我们使用 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
Slicer 中可用于翻译的每个字符串资源都需要使用 L() 宏进行显式标记,如下所示:
auto msg = L("This message to be localized")
要获得翻译的文本,请使用所需的宏/函数之一 (_(s) or _CHB(s) )。如果添加新的文件资源,请将其添加到包含宏的文件列表中L()
xgettext --keyword=L --add-comments=TRN --from-code=UTF-8 --debug -o Slicer.pot -f list.txt
msgmerge -N -o new.po old.po new.pot
msgcat -o new.po old.po
msgen -o new.po old.po
当您有Catalog 翻译在PoEdit 中打开POT 或PO 文件并开始翻译时,注意每一个空白和标点符号是非常重要的。尤其是格式化字符串。(使用 %d、%s 等)
SuperSlicer的resources\localization目录中,有Slic3r.pot翻译模板。
这样子我们就把简体中文更新到最新的翻译模板了。
经过一段时间的测试研究,发现官方给的通过Python脚本的方法更新中文PO文件是有问题的,会造成PO文件中大量的错误。
UI的汉化通过官方给出的PO更新方法也会丢失,自己手工加回去无法正常工作。
我们发现FR也就是法语的语言包是最全的,这个可能和主团队开发人员是法国人有关系。那么我们可以通过尝试通过把法语的PO文件,提取成更新用的POT,然后在用这个POT更新简体中文语言包进行升级。
我们使用GITHUB上的一个PO转POT项目。
https://github.com/mlocati/jsgettext
https://mlocati.github.io/jsgettext/
然后我们把FR的PO文件,通过这个网页转换为POT文件。
再通过POEDIT打开ZH_CN的PO文件,通过POT文件更新。
这样子就把最新的词条全部更新进去了。
这样子更新的好处是词条是完整的,PO文件还不会报错。