用户工具

站点工具


knowledge:superslicer:2022011001

如何翻译SuperSlicer

我们使用 GNUgettext 从项目中提取字符串资源,使用 PoEdit 来编辑翻译。

这些可以在这里下载:

https://sourceforge.net/directory/os:windows/?q=gnu+gettext
GNUgettext 包包含一组工具,用于从源代码中提取字符串并创建翻译目录。

https://poedit.net
PoEdit 为翻译人员提供了良好的界面。

安装 GNUgettext 后,建议将 gettext/bin 的路径添加到 PATH 变量中。

GNUgettext 的完整手册可以在这里看到:http://www.gnu.org/software/gettext/manual/gettext.html

场景1. 如何添加翻译或修复现有翻译

  1. 从此处的相应文件夹中获取 PO 文件:https://github.com/ocrobot/SuperSlicer/tree/master/resources/localization
  2. 在 PoEdit 中打开此文件为“编辑翻译”
  3. 将您的更正应用于翻译
  4. 将更改后的 Slic3r.po 和 Slic3r.po(将在 PoEdit 中保存 Slic3r.po 后自动创建)推送回输入文件夹。

场景 2. 如何添加新的语言支持

  1. 在 PoEdit 中打开“创建新翻译”
  2. 选择翻译语言(例如法语)。
  3. 结果,您将拥有 fr.po - 包含法语翻译的文件。注意。翻译完成后,您需要:

场景 3. 在向 Slicer 实施功能时如何添加新的文本资源

Slicer 中可用于翻译的每个字符串资源都需要使用 L() 宏进行显式标记,如下所示:

auto msg = L("This message to be localized")

要获得翻译的文本,请使用所需的宏/函数之一 (_(s) or _CHB(s) )。如果添加新的文件资源,请将其添加到包含宏的文件列表中L()

场景4、如何使用GNUgettext本地化自己的应用程序,以Slicer为例

  1. 为方便起见,使用此宏创建文件列表L(s)。我们有 https://github.com/ocrobot/SuperSlicer/tree/master/resources/localization/list.txt
  2. 使用 GNUgettext 命令创建模板文件(*.POT):
    • xgettext --keyword=L --add-comments=TRN --from-code=UTF-8 --debug -o Slicer.pot -f list.txt
    • 使用标志 –from-code=UTF-8 指定源字符串采用 UTF-8 编码使用标志 –debug 正确提取格式化的字符串(使用 %d, %s 等)
  3. 如上所述为您的项目创建 PO 和 MO 文件。
  4. 要将旧 PO 文件与创建的新 POT 文件中的字符串合并,请使用命令:
    • msgmerge -N -o new.po old.po new.pot
    • 使用选项-N在未找到完全匹配时不使用模糊匹配。
  5. 要将旧 PO 文件与来自新 PO 文件的字符串连接起来,请使用命令:
    • msgcat -o new.po old.po
  6. 使用命令创建英文翻译目录:
    • msgen -o new.po old.po
    • 请注意,在此目录中,初始文本和翻译的字符串将完全相同。

当您有Catalog 翻译在PoEdit 中打开POT 或PO 文件并开始翻译时,注意每一个空白和标点符号是非常重要的。尤其是格式化字符串。(使用 %d、%s 等)


SuperSlicer的resources\localization目录中,有Slic3r.pot翻译模板。

  • 我们使用Poedit打开zh_cn中的Slic3r.po
  • 编目-从POT文件更新
  • 选择Slic3r.pot翻译模板

这样子我们就把简体中文更新到最新的翻译模板了。

场景5、通过其他具有完整语言包的PO文件来汉化SuperSlicer

经过一段时间的测试研究,发现官方给的通过Python脚本的方法更新中文PO文件是有问题的,会造成PO文件中大量的错误。

UI的汉化通过官方给出的PO更新方法也会丢失,自己手工加回去无法正常工作。

我们发现FR也就是法语的语言包是最全的,这个可能和主团队开发人员是法国人有关系。那么我们可以通过尝试通过把法语的PO文件,提取成更新用的POT,然后在用这个POT更新简体中文语言包进行升级。

我们使用GITHUB上的一个PO转POT项目。

https://github.com/mlocati/jsgettext

jsgettext源码

https://mlocati.github.io/jsgettext/

然后我们把FR的PO文件,通过这个网页转换为POT文件。

再通过POEDIT打开ZH_CN的PO文件,通过POT文件更新。

这样子就把最新的词条全部更新进去了。

这样子更新的好处是词条是完整的,PO文件还不会报错。

knowledge/superslicer/2022011001.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1