Files
BallanceBlenderHelper/docs/docs/zh-cn/compile-distribute-plugin.md
2025-09-02 13:51:51 +08:00

122 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 编译与分发插件
本页面将指导你编译插件以及分发它。
## 编译LibCmo与BMap
BBP的Virtools文件原生导入导出功能依赖BMap以及其Python绑定PyBMap来实现。为了分发插件我们需要首先编译BMap及其前置LibCmo。而在编译前你需要先确认你需要的BMap版本。因为BBP并不总是使用最新的BMap例如你正在编译一个旧版的BBP其显然不可能依赖最新的BMap。BMap也在不断升级中其提供的功能也在不断变化不同版本的BMap是不兼容的。BBP通常会在发布时写明其所用的BMap版本如果BBP没有指出你可能需要寻找与BBP发布时最近的BMap版本来编译。
在明确版本后,你需要访问[LibCmo位于GitHub的存储库](https://github.com/yyc12345/libcmo21)。然后克隆项目使用Git命令转到对应版本或者直接下载对应版本的源码。然后按照LibCmo的编译手册编译得到BMap。在Windows上你通常会得到`BMap.dll``BMap.pdb`这两个文件。而在Linux上则会是`BMap.so`
然后我们需要配置PyBMap。PyBMap是随LibCmo一起提供的。请按照PyBMap的手册将编译得到的二进制BMap库和PyBMap结合在一起。即完成PyBMap配置。
然后我们需要将配置好的PyBMap拷贝到本项目的根目录下即可完成此步即存在`bbp_ng/PyBMap`文件夹为配置好的PyBMap
## 生成资源
BBP的正常运行离不开一系列资源文件而这些资源文件则需要一些处理才能够正常使用。
为了生成这些资源文件,首先需要转到`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`文件夹下。
## 翻译
BBP插件支持多语言功能因此在正式发布前我们需要先提取并更新要翻译的内容翻译完所有内容后再进行下一步操作。
Blender对于插件的多语言支持不尽如人意且BBP的设计比较特殊因此BBP采用了一套与Blender官方推荐的插件翻译管理方式不同的方式来管理翻译即使用PO文件来管理翻译而非官方推荐的Python脚本格式。
!!! info "不要提交Python格式的翻译"
如上文所述BBP使用PO文件来管理翻译而不是Blender官方建议的Python源码格式。但这并不能阻止Blender的多语言插件将Python源码格式的翻译写入到插件源码中。重复提交翻译不仅增加仓库体积也不利于管理因此BBP要求你在提交前需要删除Python格式的翻译。
具体的操作方法是在提交前,打开`bbp_ng/UTIL_translation.py`文件,将翻译元组变量`translations_tuple`的值改为空元组(即`translations_tuple = ()`)。
### 提取翻译模板
在翻译之前首先你需要意识到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面板接下来就可以提取翻译了。按照以下步骤提取翻译
1. 首先确保关闭了所有Blender进程否则插件会保持在加载状态对翻译元组变量的修改会不起作用。
1. 将插件中翻译元组变量`translations_tuple`的值改为空元组(参见前文有关提交的注意事项)。将翻译元组设置为空可以将插件的翻译状态归零,使得后文进行的文本提取操作不会受到已有翻译的干扰。
1. 打开Blender转到I18n Update Translation面板点击Deselect All取消所有语言的选中然后仅勾选下列语言右侧的框因为BBP目前仅支持有限的语言
* Simplified Chinese (简体中文)
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. 你需要复制`blender.pot``i18n`文件夹下,并将其重命名为`bbp_ng.pot`。至此我们提取了所有需要翻译的内容。
### 合并翻译模板
现在`i18n`文件夹下有两个POT文件分别代表了两部分提取的待翻译文本我们需要把他们合并起来。在`i18n`文件夹执行`xgettext -o blender.pot bbp_ng.pot bme.pot`来进行合并。合并完成后的`i18n/blender.pot`将用作翻译模板。
### 创建新语言翻译
如果未来BBP需要支持更多语言你需要从POT文件为新语言创建其对应的PO翻译文件。你可以通过以下方式之一来创建它们。
* 通过使用Poedit等软件打开POT文件选择创建新的翻译再进行保存来创建。
* 通过诸如`msginit -i blender.pot -o zh_HANS.po -l zh_CN.utf8`的命令来创建新语言的PO翻译文件。
创建的方式多种多样唯一需要注意的是你需要按下表所示设定文件名文件名错误Blender会拒绝接受和区域名称使用`msginit`时会用到目的是确保是UTF8格式编码的
|语言|文件名|区域名称|
|:---|:---|:---|
|Simplified Chinese (简体中文)|`zh_HANS.po`|`zh_CN.utf8`|
### 更新语言翻译
创建新的语言翻译并不常见,更为常见的操作是根据翻译模板,对现有语言翻译文件进行更新。你可以通过以下方式之一来更新它们
* 通过Poedit等软件打开PO文件再选择从POT文件更新。
* 通过诸如`msgmerge -U zh-HANS.po blender.pot --backup=none`的命令来更新。
### 进行翻译
在更新完所有语言的PO翻译文件后你可以选择你喜欢的方式来进行翻译例如使用Poedit或直接进行编辑。
BBP要求使用KDE社区的翻译规范来规范插件的翻译。例如你可以在[KDE中国相关网页](https://kde-china.org/tutorial.html)找到KDE社区有关简体中文的翻译标准。
### 翻译回写
PO格式的翻译并不能被Blender识别因此在翻译完成后你还需要继续借助Blender的多语言插件将PO文件回写成Blender可识别的Python源码格式的翻译。由于Blender的多语言插件设计的问题我们不能直接使用Import PO功能将PO文件回写成Python源码格式。你需要按照下列步骤依次操作才可以将PO翻译导入插件中
1. 首先确保关闭了所有Blender进程否则插件会保持在加载状态对翻译元组变量的修改会不起作用。
1. 将插件中翻译元组变量`translations_tuple`的值改为空元组参见前文有关提交的注意事项。这一步操作的意图是让整个插件不存在翻译条目这样之后在使用Import PO功能的时候Blender的多语言插件就会认为PO文件中存储的所有字段都是要翻译的就不会出现只导入了一部分翻译的情况因为BME部分的翻译是后来合并入的
1. 打开Blender转到I18n Update Translation面板按照提取翻译模板时的操作方法在语言列表中仅选中需要翻译的语言。
1. 点击最下方一栏的Import PO按钮然后在弹出的窗口中选择Ballance Blender Plugin然后选择`i18n`文件夹进行导入。这样我们就完成了将PO文件导入为Blender可识别的Python源码格式的操作。
## 打包
从Blender 4.2 LTS开始插件使用Blender自带的打包功能进行打包。
假定在项目根目录下执行命令,最终输出文件为`redist/bbp_ng.zip`,那么在命令行窗口中执行`blender --command extension build --source-dir bbp_ng --output-filepath redist/bbp_ng.zip`命令即可完成打包。其中`blender`为Blender的可执行程序。
Blender会根据`blender_manifest.toml`的指示,在排除下列文件的情况下将插件打包:
* `__pycache__/`Python缓存
* `.style.yapf`:代码风格描述文件
* `.gitignore`gitignore
* `.gitkeep`:文件夹占位符
* `.md`:文档
## 生成帮助文档
虽然本项目会利用GitHub Page功能提供帮助文档但有时你可能需要提供帮助文档的离线版本本节将会介绍如何生成离线版本的帮助文档。
首先你需要通过pip安装`mkdocs``pymdown-extensions`。然后转到`docs`文件夹下,运行`mkdocs build --no-directory-urls`。运行命令后得到一个名为`site`的文件夹,其中就是可以离线浏览的帮助文档。