跳到主要内容
版本:1.5.4

1.3 翻译

本章节描述 Gettext PO 文件的翻译方式。如果你使用别的翻译方式,可以考虑跳过。

GNU gettext 的一些信息会在之后提到。作为准备工作的一部分,你需要备好 Gettext 工具集;我们同时假定你使用类似 GNU/Linux 的命令环境。如果你要和各种 XML 打交道,你可能还需要 Intltool。

警告

不要修改 PO 文件的 msgid 项,否则这条翻了也没用,合并的时候还可能被忽略。如果原文 msgid 真的有错,你可以向项目开发者报告。

进行翻译本身非常简单,用编辑器打开就好了。如果你使用纯文本编辑器,你可能需要阅读下一章的文件格式信息。

1.3.1 检查翻译格式

PO文件翻译后请使用以下命令进行格式检查:

msgfmt --statistics -cv foo.po

此命令会当前目录下生成一个名为 messages.mo 的文件,此文件便是编译后的机读文件。将此文件复制到 /usr/share/locale/语言名/LC_MESSAGES/消息域名.mo,再运行 locale-gen,就可以替换目前的翻译了(具体的消息目录仍然取决于程序本身)。你也该看看接下来对于 --check-acclerator 的描述,你的 PO 编辑器有可能已经帮你做了这件事,所以你也可以不管这个。

1.3.2 复审翻译

使用 PO 文件时,应直接复审 PO 文件,并建议编译为 MO 文件安装在相应程序的目录下进行实测;对于文档,构建文档后精读结果文档。

如果发现问题,回到翻译步骤修正问题。

1.3.3 格式处理

翻译工具互相之间可能在细节处存在不同的格式设定,例如 Poedit 默认和 wine 项目要求行宽度为 79 列,而不少其他项目又干脆让你不要半路换行。还有不少人和编辑器为了对齐会把 msgid 和 msgstr 行的文字内容留空,接下来的几行再慢慢接上。

要解决问题,你可以使用 msgmerge,一个用来把翻译适应到模板上或者合并进新翻译的工具:

msgmerge –no-wrap -U foo.po foo.po   # 不要半路换行,和自己适应(也就是不去做适应)
msgmerge -w 79 -U zh_CN.po drunk.pot # 最大宽度 79 列,自动换行,适应到 drunk.pot