3 Commits

Author SHA1 Message Date
415cc98758 doc: update document
- add hint for gray virtools import export button
- add outcome of leaving blank ballance texture folder setting.
- update compile chapter according to the change of build scripts.
2025-08-26 20:42:11 +08:00
2d93ce1340 feat: allow export all object for virtools file. 2025-08-26 19:59:36 +08:00
1129872234 fix: fix UTIL_naming_convention rename in i18n files. 2025-08-25 14:22:42 +08:00
7 changed files with 120 additions and 88 deletions

2
.gitattributes vendored
View File

@ -3,4 +3,4 @@
# Element placeholder mesh should be save as binary # Element placeholder mesh should be save as binary
*.ph binary *.ph binary
# Raw json data should be binary, although i edit it manually # Raw json data should be binary, although i edit it manually
assets/jsons/*.json binary assets/jsons/*.json5 binary

View File

@ -245,10 +245,12 @@ class ExportMode(enum.IntEnum):
BldColl = enum.auto() BldColl = enum.auto()
BldObj = enum.auto() BldObj = enum.auto()
BldSelObjs = enum.auto() BldSelObjs = enum.auto()
BldAllObjs = enum.auto()
_g_ExportModeDesc: dict[ExportMode, tuple[str, str, str]] = { _g_ExportModeDesc: dict[ExportMode, tuple[str, str, str]] = {
ExportMode.BldColl: ('Collection', 'Export a collection', 'OUTLINER_COLLECTION'), ExportMode.BldColl: ('Collection', 'Export a collection', 'OUTLINER_COLLECTION'),
ExportMode.BldObj: ('Object', 'Export an object', 'OBJECT_DATA'), ExportMode.BldObj: ('Object', 'Export an object', 'OBJECT_DATA'),
ExportMode.BldSelObjs: ('Selected Objects', 'Export selected objects', 'SELECT_SET'), ExportMode.BldSelObjs: ('Selected Objects', 'Export selected objects', 'SELECT_SET'),
ExportMode.BldAllObjs: ('All Objects', 'Export all objects stored in this file', 'FILE_BLEND'),
} }
_g_EnumHelper_ExportMode = UTIL_functions.EnumPropHelper( _g_EnumHelper_ExportMode = UTIL_functions.EnumPropHelper(
ExportMode, ExportMode,
@ -275,10 +277,8 @@ class ExportParams():
header.label(text='Export Parameters', text_ctxt='BBP/UTIL_ioport_shared.ExportParams/draw') header.label(text='Export Parameters', text_ctxt='BBP/UTIL_ioport_shared.ExportParams/draw')
if body is None: return if body is None: return
# make prop expand horizontaly, not vertical.
horizon_body = body.row()
# draw switch # draw switch
horizon_body.prop(self, "export_mode", expand=True) body.prop(self, "export_mode", expand=True)
# draw picker # draw picker
export_mode = _g_EnumHelper_ExportMode.get_selection(self.export_mode) export_mode = _g_EnumHelper_ExportMode.get_selection(self.export_mode)
@ -290,6 +290,8 @@ class ExportParams():
ptrprops.draw_export_object(body) ptrprops.draw_export_object(body)
case ExportMode.BldSelObjs: case ExportMode.BldSelObjs:
pass # Draw nothing pass # Draw nothing
case ExportMode.BldAllObjs:
pass # Draw nothing
def general_get_export_objects(self, context: bpy.types.Context) -> tuple[bpy.types.Object, ...] | None: def general_get_export_objects(self, context: bpy.types.Context) -> tuple[bpy.types.Object, ...] | None:
""" """
@ -308,6 +310,8 @@ class ExportParams():
else: return (obj, ) else: return (obj, )
case ExportMode.BldSelObjs: case ExportMode.BldSelObjs:
return tuple(context.selected_objects) return tuple(context.selected_objects)
case ExportMode.BldAllObjs:
return tuple(bpy.data.objects)
#endregion #endregion

View File

@ -12,11 +12,29 @@ BBP的Virtools文件原生导入导出功能依赖BMap以及其Python绑定PyBMa
然后我们需要将配置好的PyBMap拷贝到本项目的根目录下即可完成此步即存在`bbp_ng/PyBMap`文件夹为配置好的PyBMap 然后我们需要将配置好的PyBMap拷贝到本项目的根目录下即可完成此步即存在`bbp_ng/PyBMap`文件夹为配置好的PyBMap
## 生成缩略图和压缩JSON ## 生成资源
BBP内置了一系列自定义图标以及其组件BME需要的用于描述结构的JSON文件。通过批量生成缩略图和压缩JSON的操作可以减小这些部分的大小使得其适合在Blender中加载也更方便分发 BBP的正常运行离不开一系列资源文件,而这些资源文件则需要一些处理才能够正常使用
转到`bbp_ng/tools`文件夹下,`python3 build_icons.py`将批量生成缩略图此功能需要PIL库请提前通过pip安装。其实际上是将`bbp_ng/raw_icons`目录下的原始图片生成对应的缩略图并存储于`bbp_ng/icons`文件夹下。运行`python3 build_jsons.py`将压缩JSON。其实际上是将`bbp_ng/raw_jsons`目录下的原始JSON文件读取压缩再写入到`bbp_ng/jsons`文件夹下 为了生成这些资源文件,首先需要转到`scripts`文件夹下,`uv sync`指令来还原脚本环境需提前安装Astral UV
### 生成缩略图
BBP内置了一系列自定义图标但这些图标都以其原始大小存储在库中。通过批量生成缩略图的操作可以减小这些部分的大小使得其适合在Blender中加载也更方便分发。
执行`uv run build_icons.py`来生成缩略图。其实际上是将`assets/icons`目录下的原始图片生成对应的缩略图并存储于`bbp_ng/icons`文件夹下。
### 生成JSON文件
BBP中的BME组件依赖一系列JSON文件来描述原型。这些描述文件以JSON5格式存储在库中方便编写者阅读。通过批量生成操作将这些JSON5文件转换为JSON文件并压缩其大小可以方便其在Blender中加载以及方便插件分发。
如果你是插件开发者或者是这些原型的编写者那么你在生成JSON文件前还需要额外地进行一项操作验证JSON文件的正确性。BBP插件在加载这些JSON文件时会默认这些文件都是正确的无错误的。如果将有错误的JSON文件放入例如缺少部分字段或者拼写错误等则会导致Blender在创建原型时抛出错误。所以验证JSON文件的正确性很有必要。执行`uv run validate_jsons.py`来验证所有原型文件。如果没有任何报错则验证无误。需要注意的是验证器并非完美的它只能尽可能地验证数据确保一些常见的错误例如字段名称拼写错误等不会发生并不能100%保证验证后的文件没有错误。
对于编译人员而言,只需要执行`uv run build_jsons.py`来生成JSON文件即可。其实际上是将`assets/jsons`目录下的原始JSON5文件读取压缩再以JSON格式写入到`bbp_ng/jsons`文件夹下。
### 生成机关网格
BBP中内置了Ballance所有机关占位符的网格信息。执行`uv run build_meshes.py`来部署这些内容,其简单地将`assets/meshes`下的网格文件复制到`bbp_ng/meshes`文件夹下。
## 翻译 ## 翻译
@ -31,7 +49,7 @@ Blender对于插件的多语言支持不尽如人意且BBP的设计比较特
### 提取翻译模板 ### 提取翻译模板
在翻译之前首先你需要意识到BBP需要翻译的文本由两部分组成一部分是BBP插件本身可以通过Blender自带的多语言插件来实现待翻译文本的提取。另一部分是BME组件中的用于描述结构的JSON文件其中各个展示用字段的名称需要进行翻译而这一部分Blender的多语言插件无能为力因为它是动态加载的。幸运的是我们已经写好了一个提取器可以提取BME的JSON文件中的相关待翻译文本当你在进行上一步压缩JSON的操作时实际上压缩器也一并运行了提取待翻译文本写入`bbp_ng/i18n/bme.pot`文件中。那么接下来的任务就只剩下提取插件部分的翻译了。 在翻译之前首先你需要意识到BBP需要翻译的文本由两部分组成一部分是BBP插件本身可以通过Blender自带的多语言插件来实现待翻译文本的提取。另一部分是BME组件中的用于描述结构的JSON文件其中各个展示用字段的名称需要进行翻译而这一部分Blender的多语言插件无能为力因为它是动态加载的。幸运的是我们已经写好了一个提取器可以提取BME的JSON文件中的相关待翻译文本。就是在上一步运行脚本的文件夹中,执行`uv run extract_jsons.py`,脚本就会提取待翻译文本写入`i18n/bme.pot`文件中。那么接下来的任务就只剩下提取插件部分的翻译了。
首先你需要启用Blender内置的多语言插件Manage UI translations。为了启用它你可能还需要下载对应Blender版本的源代码和翻译仓库具体操作方法可参考[Blender的官方文档](https://developer.blender.org/docs/handbook/translating/translator_guide/)。在启用插件并在偏好设置中配置了合适的相关路径后你就可以在Render面板下找到I18n Update Translation面板接下来就可以提取翻译了。按照以下步骤提取翻译 首先你需要启用Blender内置的多语言插件Manage UI translations。为了启用它你可能还需要下载对应Blender版本的源代码和翻译仓库具体操作方法可参考[Blender的官方文档](https://developer.blender.org/docs/handbook/translating/translator_guide/)。在启用插件并在偏好设置中配置了合适的相关路径后你就可以在Render面板下找到I18n Update Translation面板接下来就可以提取翻译了。按照以下步骤提取翻译
@ -41,11 +59,11 @@ Blender对于插件的多语言支持不尽如人意且BBP的设计比较特
* Simplified Chinese (简体中文) * Simplified Chinese (简体中文)
1. 点击最下方一栏的Refresh I18n Data按钮然后在弹出的窗口中选择Ballance Blender Plugin等待一会后插件就会完成待翻译字符的提取。此时插件只是将他们按照Blender推荐的方式以Python源码的格式将翻译字段提取到了插件的源代码中。 1. 点击最下方一栏的Refresh I18n Data按钮然后在弹出的窗口中选择Ballance Blender Plugin等待一会后插件就会完成待翻译字符的提取。此时插件只是将他们按照Blender推荐的方式以Python源码的格式将翻译字段提取到了插件的源代码中。
1. 为了获得我们希望的可以用于编辑的POT文件还需要点击Export PO按钮在弹出的窗口中选择Ballance Blender Plugin保存的位置可以选择任意的文件夹例如桌面因为它会产生许多文件其中只有POT文件才是我们想要的取消勾选右侧的Update Existing选项并确保Export POT是勾选的最后进行保存。导出完成后可以在你选择的文件夹中找到一个名为`blender.pot`的翻译模板文件,以及众多以语言标识符为文件名的`.po`文件。 1. 为了获得我们希望的可以用于编辑的POT文件还需要点击Export PO按钮在弹出的窗口中选择Ballance Blender Plugin保存的位置可以选择任意的文件夹例如桌面因为它会产生许多文件其中只有POT文件才是我们想要的取消勾选右侧的Update Existing选项并确保Export POT是勾选的最后进行保存。导出完成后可以在你选择的文件夹中找到一个名为`blender.pot`的翻译模板文件,以及众多以语言标识符为文件名的`.po`文件。
1. 你需要复制`blender.pot``bbp_ng/i18n`文件夹下,并将其重命名为`bbp_ng.pot`。至此我们提取了所有需要翻译的内容。 1. 你需要复制`blender.pot``i18n`文件夹下,并将其重命名为`bbp_ng.pot`。至此我们提取了所有需要翻译的内容。
### 合并翻译模板 ### 合并翻译模板
现在`bbp_ng/i18n`文件夹下有两个POT文件分别代表了两部分提取的待翻译文本我们需要把他们合并起来。在`bbp_ng/i18n`文件夹执行`xgettext -o blender.pot bbp_ng.pot bme.pot`来进行合并。合并完成后的`bbp_ng/i18n/blender.pot`将用作翻译模板。 现在`i18n`文件夹下有两个POT文件分别代表了两部分提取的待翻译文本我们需要把他们合并起来。在`i18n`文件夹执行`xgettext -o blender.pot bbp_ng.pot bme.pot`来进行合并。合并完成后的`i18n/blender.pot`将用作翻译模板。
### 创建新语言翻译 ### 创建新语言翻译
@ -80,7 +98,7 @@ PO格式的翻译并不能被Blender识别因此在翻译完成后你还
1. 首先确保关闭了所有Blender进程否则插件会保持在加载状态对翻译元组变量的修改会不起作用。 1. 首先确保关闭了所有Blender进程否则插件会保持在加载状态对翻译元组变量的修改会不起作用。
1. 将插件中翻译元组变量`translations_tuple`的值改为空元组参见前文有关提交的注意事项。这一步操作的意图是让整个插件不存在翻译条目这样之后在使用Import PO功能的时候Blender的多语言插件就会认为PO文件中存储的所有字段都是要翻译的就不会出现只导入了一部分翻译的情况因为BME部分的翻译是后来合并入的 1. 将插件中翻译元组变量`translations_tuple`的值改为空元组参见前文有关提交的注意事项。这一步操作的意图是让整个插件不存在翻译条目这样之后在使用Import PO功能的时候Blender的多语言插件就会认为PO文件中存储的所有字段都是要翻译的就不会出现只导入了一部分翻译的情况因为BME部分的翻译是后来合并入的
1. 打开Blender转到I18n Update Translation面板按照提取翻译模板时的操作方法在语言列表中仅选中需要翻译的语言。 1. 打开Blender转到I18n Update Translation面板按照提取翻译模板时的操作方法在语言列表中仅选中需要翻译的语言。
1. 点击最下方一栏的Import PO按钮然后在弹出的窗口中选择Ballance Blender Plugin然后选择`bbp_ng/i18n`文件夹进行导入。这样我们就完成了将PO文件导入为Blender可识别的Python源码格式的操作。 1. 点击最下方一栏的Import PO按钮然后在弹出的窗口中选择Ballance Blender Plugin然后选择`i18n`文件夹进行导入。这样我们就完成了将PO文件导入为Blender可识别的Python源码格式的操作。
## 打包 ## 打包

View File

@ -19,7 +19,9 @@ BBP插件目前有2个设置需要配置。
请填写为Ballance的`Texture`目录插件将从此目录下调用外置贴图文件即Ballance原本带有的贴图文件。点击右侧的文件夹按钮可以浏览文件夹并选择。 请填写为Ballance的`Texture`目录插件将从此目录下调用外置贴图文件即Ballance原本带有的贴图文件。点击右侧的文件夹按钮可以浏览文件夹并选择。
这是关乎BBP是否正常运行的关键只有填写正确BBP才不会在运行中出错 该选项几乎是必填写的。如果不填写该项目则Virtools文件导入导出BME创建钢轨创建等各种核心功能将不可用按钮为灰色
该选项是BBP能否正常运行的关键只有填写正确BBP才不会在运行中出错。
### No Component Collection ### No Component Collection

View File

@ -56,3 +56,11 @@ Ballance ParamsBallance参数章节包含针对Ballance特有内容
Successive Sector小节连续是一个解决导出小节组时出现的Bug的选项。由于某些原因如果一个小节中没有任何机关实际上是某小节组中没有归入任何物体导出插件会认为该小节组不存在因而遗漏导出。且由于Ballance对最终小节即飞船出现小节的判定是从1开始递增寻找最后一个存在的小节组所以二者叠加会导致Ballance错误地认定地图的小节数从而在错误的小节显示飞船这也就是导出Bug。当勾选此选项后导出文档时会预先按照当前Blender文件中Ballance地图信息中指定的小节数预先创建所有小节组然后再进行导出这样就不会遗漏创建某些小节组飞船也会在正确的小节显示。 Successive Sector小节连续是一个解决导出小节组时出现的Bug的选项。由于某些原因如果一个小节中没有任何机关实际上是某小节组中没有归入任何物体导出插件会认为该小节组不存在因而遗漏导出。且由于Ballance对最终小节即飞船出现小节的判定是从1开始递增寻找最后一个存在的小节组所以二者叠加会导致Ballance错误地认定地图的小节数从而在错误的小节显示飞船这也就是导出Bug。当勾选此选项后导出文档时会预先按照当前Blender文件中Ballance地图信息中指定的小节数预先创建所有小节组然后再进行导出这样就不会遗漏创建某些小节组飞船也会在正确的小节显示。
这个选项通常在导出可游玩的地图时选中,如果你只是想导出一些模型,那么需要关闭此选项,否则会在最终文件中产生许多无用的小节组。 这个选项通常在导出可游玩的地图时选中,如果你只是想导出一些模型,那么需要关闭此选项,否则会在最终文件中产生许多无用的小节组。
## 无法导入导出
通常而言在你正确按照之前介绍的步骤安装和配置插件后你理论上就可以使用Virtools文档的导入导出功能了。但难免有意外发生。这里说的无法导入导出指的是导入和导出Virtools文档的按钮是灰色的不可点击的。你需要按照下述步骤检查。如果你所指的是在导入导出过程中出错了请参考本页页首的警告信息。
首先检查你是否已经在[配置插件](configure-plugin.md)章节正确配置了插件的`External Texture Folder`设置项。如果你没有配置则自然无法导入导出Virtools文件。因为导入导出Virtools文件需要依赖Ballance原版关卡数据。请按教程认真配置这一设置项。
如果你确定你已经设置了正确的贴图路径,你可以尝试点击菜单`Window - Toggle System Console`来打开控制台。在控制台中可能会有一些相关的错误信息输出在其中例如加载底层BMap库时失败等。加载底层BMap库失败通常只发生在一些罕见架构的机器上例如使用Snapdragon处理器的Windows系统等因为我们打包的插件中并未包含支持这些平台的Virtools文件底层读取库BMap。在面对这种情况时你有两个选择一是汇报给开发者等待开发者主动支持二是自行编译该库仅建议有丰富计算机知识的人这样做

View File

@ -3675,99 +3675,99 @@ msgctxt "BBP/UTIL_ioport_shared.VirtoolsParams/draw"
msgid "Compression" msgid "Compression"
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:85 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:85
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "All / Failed - {0} / {1}" msgid "All / Failed - {0} / {1}"
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:295 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:295
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "" msgid ""
"PC_Checkpoints or PR_Resetpoints detected. But couldn't get sector from name." "PC_Checkpoints or PR_Resetpoints detected. But couldn't get sector from name."
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:502 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:502
msgctxt "BBP/UTIL_naming_convension.YYCToolchainConvention" msgctxt "BBP/UTIL_naming_convention.YYCToolchainConvention"
msgid "Name match lost." msgid "Name match lost."
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:610 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:610
msgctxt "BBP/UTIL_naming_convension.ImengyuConvention" msgctxt "BBP/UTIL_naming_convention.ImengyuConvention"
msgid "Name match lost." msgid "Name match lost."
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:74 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:74
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "Rename Report" msgid "Rename Report"
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:110 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:110
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "For object \"{0}\"" msgid "For object \"{0}\""
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:113 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:113
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "For object \"{0}\" (Old name: \"{1}\")" msgid "For object \"{0}\" (Old name: \"{1}\")"
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:397 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:397
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "Group match lost." msgid "Group match lost."
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:128 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:128
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "ERROR" msgid "ERROR"
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:130 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:130
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "WARN" msgid "WARN"
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:132 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:132
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "INFO" msgid "INFO"
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:546 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:546
msgctxt "BBP/UTIL_naming_convension.YYCToolchainConvention" msgctxt "BBP/UTIL_naming_convention.YYCToolchainConvention"
msgid "No matched info." msgid "No matched info."
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:656 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:656
msgctxt "BBP/UTIL_naming_convension.ImengyuConvention" msgctxt "BBP/UTIL_naming_convention.ImengyuConvention"
msgid "No matched info." msgid "No matched info."
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:345 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:345
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "A Multi-grouping Unique Component." msgid "A Multi-grouping Unique Component."
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:359 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:359
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "Component detected. But couldn't get sector from CKGroup data." msgid "Component detected. But couldn't get sector from CKGroup data."
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:369 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:369
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "A Multi-grouping Component." msgid "A Multi-grouping Component."
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:448 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:448
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "No matched info." msgid "No matched info."
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:340 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:340
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "The match of Unique Component lost." msgid "The match of Unique Component lost."
msgstr "" msgstr ""
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:387 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:387
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "" msgid ""
"Can't distinguish object between Floors and Rails. Suppose it is Floors." "Can't distinguish object between Floors and Rails. Suppose it is Floors."
msgstr "" msgstr ""

View File

@ -3708,99 +3708,99 @@ msgctxt "BBP/UTIL_ioport_shared.VirtoolsParams/draw"
msgid "Compression" msgid "Compression"
msgstr "压缩" msgstr "压缩"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:85 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:85
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "All / Failed - {0} / {1}" msgid "All / Failed - {0} / {1}"
msgstr "总计 / 失败 - {0} / {1}" msgstr "总计 / 失败 - {0} / {1}"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:295 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:295
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "" msgid ""
"PC_Checkpoints or PR_Resetpoints detected. But couldn't get sector from name." "PC_Checkpoints or PR_Resetpoints detected. But couldn't get sector from name."
msgstr "检测到 PC_Checkpoints 或 PR_Resetpoints但无法从名称中获取小节号。" msgstr "检测到 PC_Checkpoints 或 PR_Resetpoints但无法从名称中获取小节号。"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:502 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:502
msgctxt "BBP/UTIL_naming_convension.YYCToolchainConvention" msgctxt "BBP/UTIL_naming_convention.YYCToolchainConvention"
msgid "Name match lost." msgid "Name match lost."
msgstr "名称匹配失败。" msgstr "名称匹配失败。"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:610 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:610
msgctxt "BBP/UTIL_naming_convension.ImengyuConvention" msgctxt "BBP/UTIL_naming_convention.ImengyuConvention"
msgid "Name match lost." msgid "Name match lost."
msgstr "名称匹配失败。" msgstr "名称匹配失败。"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:74 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:74
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "Rename Report" msgid "Rename Report"
msgstr "重命名报告" msgstr "重命名报告"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:110 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:110
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "For object \"{0}\"" msgid "For object \"{0}\""
msgstr "对于物体“{0}”" msgstr "对于物体“{0}”"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:113 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:113
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "For object \"{0}\" (Old name: \"{1}\")" msgid "For object \"{0}\" (Old name: \"{1}\")"
msgstr "对于物体“{0}” (旧名称:“{1}”)" msgstr "对于物体“{0}” (旧名称:“{1}”)"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:397 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:397
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "Group match lost." msgid "Group match lost."
msgstr "组匹配失败。" msgstr "组匹配失败。"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:128 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:128
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "ERROR" msgid "ERROR"
msgstr "错误" msgstr "错误"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:130 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:130
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "WARN" msgid "WARN"
msgstr "警告" msgstr "警告"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:132 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:132
msgctxt "BBP/UTIL_naming_convension.RenameErrorReporter" msgctxt "BBP/UTIL_naming_convention.RenameErrorReporter"
msgid "INFO" msgid "INFO"
msgstr "信息" msgstr "信息"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:546 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:546
msgctxt "BBP/UTIL_naming_convension.YYCToolchainConvention" msgctxt "BBP/UTIL_naming_convention.YYCToolchainConvention"
msgid "No matched info." msgid "No matched info."
msgstr "没有匹配的信息。" msgstr "没有匹配的信息。"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:656 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:656
msgctxt "BBP/UTIL_naming_convension.ImengyuConvention" msgctxt "BBP/UTIL_naming_convention.ImengyuConvention"
msgid "No matched info." msgid "No matched info."
msgstr "没有匹配的信息。" msgstr "没有匹配的信息。"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:345 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:345
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "A Multi-grouping Unique Component." msgid "A Multi-grouping Unique Component."
msgstr "多重归组的唯一机关。" msgstr "多重归组的唯一机关。"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:359 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:359
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "Component detected. But couldn't get sector from CKGroup data." msgid "Component detected. But couldn't get sector from CKGroup data."
msgstr "检测到机关,但是无法从归组数据中获取小节号。" msgstr "检测到机关,但是无法从归组数据中获取小节号。"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:369 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:369
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "A Multi-grouping Component." msgid "A Multi-grouping Component."
msgstr "多重归组的机关。" msgstr "多重归组的机关。"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:448 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:448
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "No matched info." msgid "No matched info."
msgstr "没有匹配的信息。" msgstr "没有匹配的信息。"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:340 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:340
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "The match of Unique Component lost." msgid "The match of Unique Component lost."
msgstr "匹配唯一机关失败。" msgstr "匹配唯一机关失败。"
#: extensions/user_default/bbp_ng/UTIL_naming_convension.py:387 #: extensions/user_default/bbp_ng/UTIL_naming_convention.py:387
msgctxt "BBP/UTIL_naming_convension.VirtoolsGroupConvention" msgctxt "BBP/UTIL_naming_convention.VirtoolsGroupConvention"
msgid "" msgid ""
"Can't distinguish object between Floors and Rails. Suppose it is Floors." "Can't distinguish object between Floors and Rails. Suppose it is Floors."
msgstr "无法区分物体是路面还是钢轨,假定为路面。" msgstr "无法区分物体是路面还是钢轨,假定为路面。"