用户工具

站点工具


knowledge:superslicer:2022011001

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
knowledge:superslicer:2022011001 [2022/02/03 01:27]
弘毅 [场景5、通过其他具有完整语言包的PO文件来汉化SuperSlicer]
knowledge:superslicer:2022011001 [2022/02/03 01:29] (当前版本)
弘毅 [场景5、通过其他具有完整语言包的PO文件来汉化SuperSlicer]
行 1: 行 1:
 +====== 如何翻译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. 如何添加翻译或修复现有翻译 =====
 +
 +  - 从此处的相应文件夹中获取 PO 文件:https://github.com/ocrobot/SuperSlicer/tree/master/resources/localization
 +  - 在 PoEdit 中打开此文件为“编辑翻译”
 +  - 将您的更正应用于翻译
 +  - 将更改后的 Slic3r.po 和 Slic3r.po(将在 PoEdit 中保存 Slic3r.po 后自动创建)推送回输入文件夹。
 +
 +===== 场景 2. 如何添加新的语言支持 =====
 +
 +  - 在此处获取文件 Slicer.pot:https://github.com/ocrobot/SuperSlicer/tree/master/resources/localization
 +  - 在 PoEdit 中打开“创建新翻译”
 +  - 选择翻译语言(例如法语)。
 +  - 结果,您将拥有 fr.po - 包含法语翻译的文件。注意。翻译完成后,您需要:
 +    * 将文件重命名为 Slicer.po
 +    * 单击“保存文件”按钮。Slicer.mo 将立即创建
 +    * Slicer.po 和 Slicer.mo 都必须保存在这里:https://github.com/ocrobot/SuperSlicer/tree/master/resources/localization/fr (文件夹名称“fr”的意思是“法语”——翻译语言)。
 +
 +===== 场景 3. 在向 Slicer 实施功能时如何添加新的文本资源 =====
 +
 +Slicer 中可用于翻译的每个字符串资源都需要使用 L() 宏进行显式标记,如下所示:
 +<code>
 +auto msg = L("This message to be localized")
 +</code>
 +要获得翻译的文本,请使用所需的宏/函数之一 (_(s) or _CHB(s) )。如果添加新的文件资源,请将其添加到包含宏的文件列表中L()
 +
 +===== 场景4、如何使用GNUgettext本地化自己的应用程序,以Slicer为例 =====
 +  - 为方便起见,使用此宏创建文件列表L(s)。我们有 https://github.com/ocrobot/SuperSlicer/tree/master/resources/localization/list.txt。
 +  - 使用 GNUgettext 命令创建模板文件(*.POT):
 +    *<code>xgettext --keyword=L --add-comments=TRN --from-code=UTF-8 --debug -o Slicer.pot -f list.txt</code>
 +    *使用标志 --from-code=UTF-8 指定源字符串采用 UTF-8 编码使用标志 --debug 正确提取格式化的字符串(使用 %d, %s 等)
 +  - 如上所述为您的项目创建 PO 和 MO 文件。
 +  - 要将旧 PO 文件与创建的新 POT 文件中的字符串合并,请使用命令:
 +    *<code>msgmerge -N -o new.po old.po new.pot</code>
 +    *使用选项-N在未找到完全匹配时不使用模糊匹配。
 +  - 要将旧 PO 文件与来自新 PO 文件的字符串连接起来,请使用命令:
 +    *<code>msgcat -o new.po old.po</code>
 +  - 使用命令创建英文翻译目录:
 +    *<code>msgen -o new.po old.po</code>
 +    *请注意,在此目录中,初始文本和翻译的字符串将完全相同。
 +
 +当您有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
 +
 +{{ :knowledge:superslicer:jsgettext.7z |jsgettext源码}}
 +
 +https://mlocati.github.io/jsgettext/
 +
 +然后我们把FR的PO文件,通过这个网页转换为POT文件。
 +
 +再通过POEDIT打开ZH_CN的PO文件,通过POT文件更新。
 +
 +这样子就把最新的词条全部更新进去了。
 +
 +这样子更新的好处是词条是完整的,PO文件还不会报错。
knowledge/superslicer/2022011001.txt · 最后更改: 2022/02/03 01:29 由 弘毅