我开发了一个小型应用程序并正在分发;现在我想用 gettext 添加 i18n 支持。我看到 gettext 需要运行多个命令并生成各种文件(并在源代码中包含新字符串时更新它们)。
让 gettext 与典型的 git 工作流程交互的常用方法是什么?我应该自己生成我的 .pot
文件并将其包含在存储库中,还是应该在构建时由我的 Makefile 自动生成? .mo
文件呢?同样,我是否需要在构建脚本中包含 msgmerge
,还是只将其结果添加到版本控制文件中?
我正在使用 C++、一个手写的 Makefile(没有 automake)和 github,以备不时之需。
最佳答案
这里涉及到三种类型的文件,而且都是生成的,至少是种。
包含主消息目录的
.pot
PO 模板文件。这在我知道的每个项目中都处于版本控制之下,尽管它严格来说是生成的并且是多余的。带有单独翻译的
.po
文件。它们有时会生成,有时不会。当您使用msgmerge
merge 新字符串时,它们会生成。但是,当您的译员发回新译文时,他们却不是。您必须将它们置于版本控制之下,因为它们包含翻译。.po
文件编译成的.mo
文件。不要将它们置于版本控制之下,而是将它们与版本(源代码和二进制文件)一起发布。
更重要的是 Makefile 中的逻辑。上面提到的文件都不应自动生成,而只能按需生成。否则,无论何时编辑源文件,您的 po/
目录都会变脏。
恕我直言,最好的做法是确保可以在没有安装 gettext 工具(xgettext、msgmerge、msgfmt)的情况下构建 git clone。确保它们仅按需调用。
gettext libint-perl 的 Perl 绑定(bind)(免责声明:我是作者)包含一个示例 po 目录和一个完整的 Makefile:https://github.com/gflohr/libintl-perl/tree/master/sample/simplecal/po .您可以直接在您的项目中使用该 Makefile。您只需为您选择的编程语言修改 xgettext
调用。
关于git - git如何正确使用gettext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50658622/