首页 > 解决方案 > 如何在 git 中正确使用 gettext?

问题描述

我有一个我正在开发和分发的小应用程序;现在我想用 gettext 添加 i18n 支持。我看到 gettext 需要运行几个命令并生成各种文件(并在源代码中包含新字符串时更新它们)。

让 gettext 与典型的 git 工作流交互的常用方法是什么?我应该自己生成.pot文件并将其包含在存储库中,还是应该在构建时由我的 Makefile 自动生成?.mo文件呢?同样,我需要包含msgmerge在我的构建脚本中,还是只需将其结果添加到版本控制文件中?

我正在使用 C++、一个手写的 Makefile(没有 automake)和 github,以防万一。

标签: gitmakefileinternationalizationgettext

解决方案


这里涉及到三种类型的文件,而且都是生成的,至少是那种。

  1. .pot包含主消息目录的PO 模板文件。这在我知道的每个项目中都受到版本控制,尽管它是严格说生成的并且是多余的。

  2. .po带有单独翻译的文件。它们有时会生成,有时不会。当您使用 合并新字符串时msgmerge,它们会生成。但是当您的翻译人员发回新的翻译时,他们不会。您必须将它们置于版本控制之下,因为它们包含翻译。

  3. .mo文件.po编译成的文件。不要将它们置于版本控制之下,而是将它们与发布(源代码和二进制文件)一起发布。

更重要的是 Makefile 中的逻辑。上述文件均不应自动生成,只能按需生成。否则po/,每当您编辑源文件时,您的目录都会变脏。

恕我直言,最好的做法是确保可以在不安装 gettext 工具(xgettext、msgmerge、msgfmt)的情况下构建 git clone。确保仅按需调用它们。

gettext libint-perl 的 Perl 绑定(免责声明:我是作者)包含一个带有完整 Makefile 的示例 po 目录:https ://github.com/gflohr/libintl-perl/tree/master/sample/simplecal/po 。您可能可以直接在您的项目中使用该 Makefile。您只需修改xgettext所选编程语言的调用。


推荐阅读