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