Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

57.1. 针对翻译人员 #

57.1.1. 要求
57.1.2. 概念
57.1.3. 创建和维护消息目录
57.1.4. 编辑 PO 文件

PostgreSQL 程序(服务器和客户端)可以以您喜欢的语言发出消息——如果这些消息已翻译。创建和维护翻译的消息集需要那些精通母语并希望为 PostgreSQL 贡献力量的人员的帮助。您完全不必成为一名程序员才能做到这一点。本节将说明如何提供帮助。

57.1.1. 要求 #

我们不会评判您的语言技能——本节讨论的是软件工具。从理论上讲,您只需要一个文本编辑器。但这仅在您不想试用翻译的消息时才有可能。在配置源代码树时,务必使用 --enable-nls 选项。这还将检查 libintl 库和 msgfmt 程序,所有最终用户无论如何都需要它们。要试用您的工作,请按照安装说明中适用的部分进行操作。

如果您想启动新的翻译工作或想执行消息目录合并(稍后描述),您将分别需要 GNU 兼容实现中的程序 xgettextmsgmerge。稍后,我们将设法安排好,以便如果您使用打包的源代码分发版,您将不需要 xgettext。(如果从 Git 工作,您仍然需要它。)当前建议使用 GNU Gettext 0.10.36 或更高版本。

您本地的 gettext 实现应附带其自己的文档。其中一些内容可能在以下内容中重复,但对于其他详细信息,您应该在那里查找。

57.1.2. 概念 #

原始(英语)消息及其(可能的)翻译等效项对保存在消息目录中,每个程序一个(尽管相关程序可以共享一个消息目录),每种目标语言一个。消息目录有两种文件格式:第一种是 PO 文件(针对可移植对象),它是一个具有特殊语法的纯文本文件,由翻译人员编辑。第二种是 MO 文件(针对机器对象),它是一个从相应 PO 文件生成的二进制文件,并在运行国际化程序时使用。翻译人员不处理 MO 文件;事实上,几乎没有人处理它们。

消息目录文件的后缀名毫不意外,要么是 .po,要么是 .mo。基本名称要么是它所伴随的程序的名称,要么是该文件所针对的语言,具体取决于情况。这有点令人困惑。示例包括 psql.po(psql 的 PO 文件)或 fr.mo(法语的 MO 文件)。

PO 文件的文件格式在此说明

# comment

msgid "original string"
msgstr "translated string"

msgid "more original"
msgstr "another translated"
"string can be broken up like this"

...

msgid 行从程序源中提取。(它们不必如此,但这是最常见的方法。)msgstr 行最初为空,由翻译人员填写有用的字符串。字符串可以包含 C 样式的转义字符,并且可以跨行继续,如所示。(下一行必须从行首开始。)

# 字符表示注释。如果空白紧跟 # 字符,则这是由翻译人员维护的注释。还可以有自动注释,其紧跟 # 之后的是非空白字符。这些注释由对 PO 文件进行操作的各种工具维护,旨在帮助翻译人员。

#. automatic comment
#: filename.c:1023
#, flags, flags

#。样式注释从消息使用的源文件中提取。程序员可能已为翻译人员插入信息,例如关于预期的对齐方式。#: 注释指示消息在源中使用的确切位置。翻译人员不必查看程序源,但如果有疑问,可以查看。#, 注释包含以某种方式描述消息的标志。当前有两个标志:如果消息由于程序源中的更改而可能过时,则设置 fuzzy。然后,翻译人员可以验证此消息并可能删除 fuzzy 标志。请注意,模糊消息不会提供给最终用户。另一个标志是 c-format,它表示消息是 printf 样式的格式模板。这意味着翻译也应该是具有相同数量和类型占位符的格式字符串。有一些工具可以验证这一点,这些工具以 c-format 标志为关键。

57.1.3. 创建和维护消息目录 #

好的,那么如何创建一个 空白 消息目录?首先,进入包含要翻译其消息的程序的目录。如果存在文件 nls.mk,则此程序已准备好进行翻译。

如果已经有一些 .po 文件,则有人已经完成了一些翻译工作。这些文件被命名为 language.po,其中 languageISO 639-1 双字母语言代码(小写),例如,法语为 fr.po。如果确实需要为每种语言进行多次翻译工作,则这些文件还可以命名为 language_region.po,其中 regionISO 3166-1 双字母国家代码(大写),例如,巴西葡萄牙语为 pt_BR.po。如果您找到了所需的语言,则可以开始处理该文件。

如果你需要开始新的翻译工作,那么首先运行命令

make init-po

这将创建一个文件 progname.pot。(.pot 用来区别于 正在制作 的 PO 文件。 T 代表 模板。)将此文件复制到 language.po 并对其进行编辑。为了表明新语言可用,还要编辑文件 po/LINGUAS,并在已列出的语言旁边添加语言(或语言和国家/地区)代码,如下所示

de fr

(当然,其他语言也会出现。)

随着底层程序或库的更改,程序员可能会更改或添加消息。在这种情况下,你不需要从头开始。而是运行命令

make update-po

这将创建一个新的空白消息目录文件(你开始使用的 pot 文件),并将其与现有的 PO 文件合并。如果合并算法不确定特定消息,它会将其标记为 模糊,如上所述。新的 PO 文件将保存为 .po.new 扩展名。

57.1.4. 编辑 PO 文件 #

可以使用常规文本编辑器编辑 PO 文件。还有几个专门用于 PO 文件的编辑器,它们可以通过特定于翻译的功能来帮助完成此过程。Emacs 中有一个(不出所料)PO 模式,这可能非常有用。

翻译人员只能更改 msgstr 指令后引号之间的区域,添加注释并更改模糊标记。

PO 文件不必完全填写。如果没有翻译(或翻译为空),软件将自动回退到原始字符串。将不完整的翻译提交到源代码树中是没有问题的;这为其他人提供了接手您工作的机会。但是,我们鼓励您在合并后优先删除模糊条目。请记住,模糊条目不会被安装;它们仅作为可能正确翻译的参考。

以下是编辑翻译时需要记住的一些事项

  • 确保如果原件以换行符结尾,翻译也以换行符结尾。对于制表符等也是如此。

  • 如果原件是 printf 格式字符串,翻译也需要如此。翻译还需要按相同顺序具有相同的格式说明符。有时语言的自然规则会让这变得不可能或至少很尴尬。在这种情况下,您可以像这样修改格式说明符

    msgstr "Die Datei %2$s hat %1$u Zeichen."
    

    然后第一个占位符实际上将使用列表中的第二个参数。 digits$ 需要紧跟 %,在任何其他格式操作符之前。(此功能确实存在于 printf 函数系列中。您可能以前没有听说过它,因为除了消息国际化之外,它几乎没有用处。)

  • 如果原始字符串包含语言错误,请报告该错误(或在程序源代码中自行修复),然后正常翻译。当程序源代码更新后,可以合并更正后的字符串。如果原始字符串包含事实错误,请报告该错误(或自行修复),不要翻译它。相反,您可以在 PO 文件中使用注释标记该字符串。

  • 保持原始字符串的风格和语调。具体来说,不是句子(无法打开文件 %s)的消息可能不应该以大写字母开头(如果您的语言区分大小写)或以句号结尾(如果您的语言使用标点符号)。阅读 第 56.3 节 可能会有所帮助。

  • 如果您不知道消息的含义,或者它模棱两可,请在开发人员邮件列表中询问。很有可能说英语的最终用户也可能不理解它或觉得它模棱两可,因此最好改进消息。