Bambu Studio 多语言翻译完整指南:在哪里改 PO 文件,如何新增一门语言
【免费下载链接】BambuStudioPC Software for BambuLab and other 3D printers项目地址: https://gitcode.com/GitHub_Trending/ba/BambuStudio
你在设置里切换界面语言后,发现某个按钮的中文文案和实际功能对不上,该做的第一件事不是提 bug,而是打开bbl/i18n/下对应语言的 PO 文件——这是 Bambu Studio 翻译工作的全部入口。本文基于 GNU gettext 工具集与 PoEdit 编辑器,按任务拆解修改已有翻译、新增语言、为新代码标记字符串的具体做法,并给出验证生效与提交前的完整清单。
一、前置准备:GNU gettext 与 PoEdit 的安装配置
Bambu Studio 的本地化基于 GNU gettext 框架:gettext 是标准的字符串提取与翻译目录管理工具,负责从源码中提取待翻译文本;PoEdit 则是面向翻译者的可视化编辑器,用来编辑 PO 文件(可编辑的翻译目录)。准备工作一次完成即可:
- 安装 GNU gettext 安装包,并将它的 bin 目录加入系统 PATH,之后终端里能直接敲出
xgettext、msgmerge等命令; - 安装最新版 PoEdit;
- 在终端运行
xgettext --version,能输出版本号说明环境就绪。
目录结构值得记牢:bbl/i18n/下每个语言一个子目录(如zh_CN/),存放形如BambuStudio_zh_CN.po的源文件;目录根部有模板文件BambuStudio.pot和文件清单list.txt;而程序运行时真正加载的编译产物 MO 文件,放在resources/i18n/<语言代码>/里。
二、三种常见的翻译任务
在哪里修改已有翻译(PO 文件)
以修正简体中文翻译为例:
- 用 PoEdit 以"Edit a translation"模式打开 bbl/i18n/zh_CN/BambuStudio_zh_CN.po;
- 搜索要修正的原文,在右侧翻译框直接修改译文。若原文为空的条目属于已废弃字符串,标记为 obsolete 即可;
- 保存,PoEdit 会立即生成同名的
.mo文件(MO 是 PO 的二进制编译结果,供程序加载); - 把生成的 MO 文件复制到
resources/i18n/zh_CN/并重命名为BambuStudio.mo,这是程序读取的固定位置。
如何新增一门语言
- 获取模板文件 bbl/i18n/BambuStudio.pot,它包含全部待翻译字符串及其出处;
- 在 PoEdit 中选择"Create new translation",挑选目标语言(例如法语 fr);
- 逐条完成翻译,把文件重命名为
BambuStudio_fr.po并保存,.mo文件随即生成; - 将 PO 文件放入新建的
bbl/i18n/fr/目录,MO 文件放入resources/i18n/fr/并改名为BambuStudio.mo。
语言目录名必须与 PO 文件中的语言代码一致,命名不匹配会导致程序加载不到该语言。
如何为新代码标记可翻译字符串
界面上出现的字符串都要用L()宏显式标记,它专用于翻译提取,底层定义为#define L(s) Slic3r::I18N::translate(s):
auto msg = L("This message to be localized"); std::string text = _(msg); // 运行时取翻译后的文本取译文时使用_()或_CHB()宏。注意:若你新增了含L()宏的源文件,必须把它的路径登记到 bbl/i18n/list.txt(约 300 行文件清单)中,否则xgettext生成模板时会漏掉该文件里的全部字符串。
三、避坑清单:现象、原因与处理
现象:跑完 xgettext,模板里缺少新增的字符串。原因:新文件未登记进list.txt,或提取参数不完整。 处理:核对清单后用标准命令提取。--from-code=UTF-8保证中文等非 ASCII 字符被正确处理,--debug保证格式化字符串中%d、%s等占位符被正确识别:
xgettext --keyword=L --add-comments=TRN --from-code=UTF-8 --debug \ -o BambuStudio.pot -f list.txt现象:切换语言后程序崩溃或弹出参数错误。原因:译文中的格式标记被手工改动。程序靠%1%、%%这类标记做动态替换,改动一个字符就会导致参数解析失败。 处理:把标记原样还原——%1%不要写成%1 %,%%不要简化成%。校对译文时先核标记,再核措辞。
现象:模板更新后合并,大量已有译文被标为模糊(fuzzy)。原因:原文发生过变更,精确匹配失败。 处理:用msgmerge -N -o new.po old.po new.pot合并,-N选项关闭模糊匹配,未精确命中的条目标记为待处理,PoEdit 会高亮提示你逐条复核。此外可用msgcat拼接多个 PO 文件,用msgen生成英文目录(源语言下原文与译文相同)。
现象:界面出现乱码,但 PO 文件检查无误。原因:按 doc/Localization_guide.md 的说明,这通常不是翻译错误,而是软件编码实现的 bug。 处理:不要动译文,提交 issue 并注明乱码出现的界面位置。
现象:翻译后按钮明显变宽、文案被截断。原因:在按钮文本里用括号附加了备选翻译(如"保存(存储)")。 处理:按钮只保留单一译文,备选表述不写进括号,避免撑破控件宽度。
四、验证与提交:如何确认翻译生效
图中为 Bambu Studio 的打印平台视图,界面中显示的平台标签与参数名称文字,正是切换语言后需要逐项核对的翻译内容。
最小验证路径
- 在 PoEdit 中保存 PO 文件,触发 MO 文件生成;
- 将 MO 文件重命名为
BambuStudio.mo,放入resources/i18n/<语言代码>/目录; - 启动 Bambu Studio,把界面语言切到目标语言,逐页走查界面元素,确认无缺失、无截断、无格式异常。
提交前检查项
| 英文术语 | 推荐译法 | 备注 |
|---|---|---|
| filament | 耗材 | 全文统一,不要时而是"线材" |
| layer | 层 | — |
| infill | 填充 | 不要写成"内部结构" |
| support | 支撑 | 全文术语一致 |
- 格式标记
%1%、%%与原文逐字一致; - 不额外添加换行符
\n和空格;参数描述中不写单位词(如"层打印时间小于~"),单位一律用国际单位制缩写,写s而不是sec; - 句尾标点与原文对齐:原文无句号不加,有句号不丢;
- PO 文件、MO 文件、
list.txt的变更(如适用)同一次提交。
一门语言的翻译全部落地后,同一套流程可以复制到bbl/i18n/下的其余语言。想动手的话,从改掉你最常看到的那条中文文案开始,一次跑通保存、部署、验证的完整链路。
【免费下载链接】BambuStudioPC Software for BambuLab and other 3D printers项目地址: https://gitcode.com/GitHub_Trending/ba/BambuStudio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考