☰
Bambu Studio 本地化翻译完整指南:从 PO 到 MO 的 7 步实战流程
2026/10/17 1:58:24 网站建设 项目流程

Bambu Studio 本地化翻译完整指南:从 PO 到 MO 的 7 步实战流程

【免费下载链接】BambuStudioPC Software for BambuLab and other 3D printers项目地址: https://gitcode.com/GitHub_Trending/ba/BambuStudio

如果你要在 Bambu Studio 里做翻译、参与本地化开发,先认清三种文件:PO 是翻译底稿,POT 是字符串模板,MO 是软件运行时真正读取的编译产物。Bambu Studio 是 Bambu Lab 生态的 3D 打印切片软件,用户遍布全球,界面语言质量直接决定使用体验,这就是本地化存在的意义。

准备工作:装好 gettext 工具链与 PoEdit

整个流程只需要两个工具。GNU gettext 提供命令行能力(xgettext、msgmerge等),负责字符串提取和文件合并;PoEdit 是翻译界面,带语法检查提示。用系统包管理器或官网安装包安装即可。💡 Windows 用户注意:装完 gettext 后要把gettext/bin目录加进 PATH 环境变量,否则命令行找不到这些工具。

git clone https://gitcode.com/GitHub_Trending/ba/BambuStudio

把仓库拉到本地,后面的 PO、POT、MO 文件都从这里拿。

xgettext --version

这条命令打印 gettext 版本号,能跑通就说明工具链和 PATH 都配置好了。

完成你的第一个翻译:从 PO 文件到 MO 的完整动线

这是最高频的操作:改一处现有翻译。仓库里每种语言一个目录,都挂在 bbl/i18n/ 下面。

  1. 进入目标语言目录,比如bbl/i18n/zh_CN/,找到BambuStudio_zh_CN.po。
  2. PoEdit 里选Edit a translation(编辑翻译)打开它。别选"新建翻译",那会丢掉文件头部已有的元信息。
  3. 修改译文。PoEdit 会自动高亮标点、空白这类常见错误。
  4. 保存。PoEdit 立刻在旁边生成同名的.mo文件。
  5. 把改后的 PO 提交回原目录;把 MO 复制到 resources/i18n/zh_CN/,重命名为BambuStudio.mo,一起提交。

⚠️ 软件运行时只认resources/i18n/下那个固定名字的 MO 文件,PO 是给人看的底稿,两者的去向别搞混。

从零添加一门新语言:POT 模板落地三步走

新语言和改旧翻译的路径不同:没有现成 PO 文件,一切从模板开始。

  1. 取基础模板 bbl/i18n/BambuStudio.pot——它包含全部待翻译字符串,但不含任何译文。
  2. PoEdit 里选Create new translation(创建新翻译),选目标语言,比如法语fr,得到fr.po。
  3. 翻译完成后做三件事:文件重命名为BambuStudio_fr.po;点保存(自动生成BambuStudio_fr.mo);PO 提交到新目录bbl/i18n/fr/,MO 复制到resources/i18n/fr/并改名BambuStudio.mo。

📌 语言目录名用 ISO 代码(fr、de、pt_BR),照抄 bbl/i18n/ 里现有目录的命名习惯即可。

开发者视角:用 L() 宏标记可翻译字符串

写新功能时,所有要进入翻译流程的字符串都得先"挂号"。L(s)是标记宏,运行时它就是字符串本身,唯一作用是被 xgettext 扫描出来。真正取翻译结果用_(s)(返回 wxWidgets 字符串)或_CHB(s)(返回 UTF-8 缓冲)。

const wxString label = L("Slicing in progress"); // 标记,供 xgettext 提取 wxString shown = _(L("Slicing in progress")); // 取 wxWidgets 译文 const char* utf8 = _CHB("Slicing in progress"); // 取 UTF-8 译文

💡 踩坑提醒:新写的源文件若包含L()调用,必须把文件路径加进 bbl/i18n/list.txt。这个清单已列了 300 多个文件,漏登记的话,你的字符串永远不会出现在 POT 里。

幕后机制:xgettext 关键参数逐条拆解

模板不是手写出来的,是命令扫出来的。仓库 CMake 里的gettext_make_pot目标,本质就是这一条命令:

xgettext --keyword=L --add-comments=TRN --from-code=UTF-8 --debug -o BambuStudio.pot -f list.txt

它只扫描清单文件里列出的源码,把标记好的字符串抽进BambuStudio.pot。

  • --keyword=L:只把L(...)当成可翻译标记来提取
  • --add-comments=TRN:紧跟TRN注释的字符串也一并收集
  • --from-code=UTF-8:声明源码字符串的编码是 UTF-8
  • --debug:输出调试信息,保证%d、%s这类格式化串正确提取
  • -f list.txt:限定扫描范围为清单文件列出的源码

🔧 真实构建里 CMake 还会追加_L、_L_PLURAL(复数)等 keyword,原理一致,你手动维护翻译时不用碰。

合并阶段常用三条命令,一条一个用途:

msgmerge -N -o new.po old.po new.pot

拿新模板刷新旧翻译,-N表示精确匹配不到时不做模糊匹配,宁可留空也不乱塞。

msgcat -o new.po old.po

把多个 PO 文件连接成一个。

msgen -o new.po old.po

生成英文目录,原文和译文完全相同,专供英文界面使用。

翻译质量红线:7 条碰不得的规则

⚠️ 以下几条是社区明确写进 doc/Localization_guide.md 的硬性要求:

  • 按钮文本不加括号备选。"打印(切片)"这种写法会把按钮撑宽,界面直接变形。
  • 占位符原样保留。%1%不能改成%1 %,%%不能简化成%,动一个字符都可能让程序崩溃。
  • 不随意加换行符\n和空格,参数名称的显示尤其敏感。
  • 术语全局一致。现有中文目录里filament统一译作"材料",不要一处"材料"一处"耗材"。
  • 单位用国际单位制缩写,写s而不是sec。
  • 参数描述不带单位。对的是"层打印时间小于",错的是"层打印时间小于 n 秒"。
  • 标点跟随原文。原文结尾没有句号就不加,有就不能漏。

验证与交付:用 MO 文件实测界面效果

翻译得再漂亮,最终要看界面。✅ 验证路径很短:PoEdit 一保存就生成 MO,复制进resources/i18n/<语言>/改名BambuStudio.mo,启动软件看界面即可。

排查乱码时换个思路:如果某处显示的是乱码字符而不是正常的 Unicode 文本,大概率是软件的编码 bug,不是你翻译错了——按 bug 上报,别回头改 PO。另外,凡是用自动纠错或批量工具处理过的译文,输出必须逐条人工校对,这类工具"帮倒忙"的记录远多于"立功"的。

去项目的 issue 区认领一门还没人做的语言,或者给现有目录补上缺漏的译文——你的第一个翻译 PR,就从这里开始。

【免费下载链接】BambuStudioPC Software for BambuLab and other 3D printers项目地址: https://gitcode.com/GitHub_Trending/ba/BambuStudio

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询