使用gettext进行本地化
除了:csv格式的ref:Doc_Importing_Translations`外,Godot还支持加载GNU gettext(`.po``)格式的翻译文件.
注解
有关GetText的介绍,请查看 `A Quick GetText Tutorial<https://www.labri.fr/perso/fleury/posts/programming/a-quick-gettext-tutorial.html>`_ .它是在考虑C项目的情况下编写的,但是很多建议也适用于Godot(除了 xgettext
).
优势
GetText是一种标准格式,可以使用任何文本编辑器或图形用户界面编辑器(如 `Poedit<https://poedit.net/>`_ .)进行编辑.
翻译平台支持GetText,如 `Tranapfex<https://www.transifex.com/>`_ 和 `Weblate<https://weblate.org/>`_ ,使得人们协作本地化变得更容易.
与CSV相比,gettext更适合Git这样的版本控制系统,因为每个语言环境都有自己的消息文件.
与CSV文件相比,在gettext文件中编辑多行字符串更方便.
缺点
Gettext是一种比CSV更复杂的格式,对于刚接触软件本地化的人来说可能更难理解.
维护本地化文件的人员必须在其系统上安装gettext工具.但是,由于Godot不使用编译的消息对象文件(
.mo
),因此翻译人员无需安装gettext工具即可测试他们的工作.
注意事项
- 由于Godot在幕后使用自己的PO文件解析器(这比参考GNU gettext实现有更多限制),因此不支持诸如多元化之类的一些特性.
安装gettext工具
需要命令行gettext工具来执行维护操作,如更新消息文件.因此,强烈建议您安装它们.
windows: 从 `本页<https://mlocati.github.io/articles/gettext-iconv-windows.html>`_ .下载安装程序任何体系结构和二进制类型(共享或静态)都可以工作;如果有疑问,请选择64位静态安装程序.
macOS: Install gettext either using Homebrew with the
brew install gettext
command, or using MacPorts with thesudo port install gettext
command.Linux: 在大多数发行版上,请从发行版的包管理器安装
gettext
包.
手动创建(POT)模板
Godot目前不支持使用 xgettext
提取源字符串,因此必须手动创建 .pot
文件.该文件可以放在项目目录中的任何位置,但建议将其放在子目录中,因为每个语言环境都将在其自己的文件中定义.
在工程目录下创建名为 locale 的目录.在该目录下,保存一个名为 messages.pot
的文件,内容如下:
# Don't remove the two lines below, they're required for gettext to work correctly.
msgid ""
msgstr ""
msgid "Hello world!"
msgstr ""
Gettext中的消息由``msgid``和``msgstr``对组成.``msgid``为源字符串(一般为英文),``msgstr``为翻译后的字符串.
PO模板文件( .pot
)中的 msgstr
值应 始终 为空.而是在生成的 .po
文件中进行本地化.
使用pybabel创建PO模板 (POT)
Python工具pybabel支持Godot,可用于从场景文件和脚本自动创建和更新POT文件.
安装 Babel
和 babel-godot
后,例如使用pip:
pip install babel babel-godot
编写一个映射文件(例如``Babelrc``),指明pybabel需要处理哪些文件(请注意,我们将GDScript作为Python处理,这通常就足够了):
[python: **.gd]
encoding = utf-8
[godot_scene: **.tscn]
encoding = utf-8
然后,您可以运行pybabel,如下所示:
pybabel extract -F babelrc -k text -k LineEdit/placeholder_text -k tr -o godot-l10n.pot .
使用 -k
选项指定需要提取的内容.在这种情况下,将翻译 tr() 的参数,以及名为”text”(控制节点常用)的属性和LineEdit的 placeholder_text
属性.
从PO模板创建消息文件
``msginit``命令用于将采购订单模板转换为消息文件.例如,要创建法语本地化文件,请在``locale``目录中使用以下命令:
msginit --no-translator --input=messages.pot --locale=fr
上面的命令会在采购订单模板所在的目录下创建一个名为``fr.po``的文件.
或者,您可以使用Poedit以图形方式完成此操作,或者通过将POT文件上传到您选择的Web平台.
在Godot中加载信息文件
若要在工程中将消息文件注册为翻转,请打开**Project Settings工程设置**, 然后进入**Localization本地化** 选项. 在**Translations翻转**, 单击**Add…添加 然后在文件对话框中选择``.po`` 文件 区域设置将从消息文件中的``“Language: <code>n”`` 属性中推算出来.
注解
关于在Godot中导入和测试翻译的更多信息,请参见 使游戏国际化 .
消息更新文件遵循PO模板
更新PO模板后,您必须更新消息文件以使其包含新字符串,同时删除在PO模板中不存在的字符串.这可以使用``msgmerge``工具自动完成:
# The order matters: specify the message file *then* the PO template!
msgmerge --update --backup=none fr.po messages.pot
如果你想保留原始消息文件的备份,在本例中会保存为 fr.po~
,请删除 --backup=none
参数。
检查PO文件或模板的有效性
可以通过运行以下命令来检查gettext文件的语法是否有效:
msgfmt fr.po --check
如果有语法错误或警告,他们将显示在控制台,否则,”msgfmt”不会输出任何东西.