# 55.1.对于译者来说

55.1.1. 要求

55.1.2. 概念

55.1.3. 创建和维护邮件目录

55.1.4. 编辑PO文件

PostgreSQL程序(服务器和客户端)可以用您最喜欢的语言发布消息——如果消息已被翻译。创建和维护翻译后的消息集需要能够很好地使用自己的语言并希望为PostgreSQL工作做出贡献的人的帮助。要做到这一点,你根本不需要成为一名程序员。本节介绍如何提供帮助。

# 55.1.1.要求

我们不会评判你的语言技能——这一部分是关于软件工具的。理论上,你只需要一个文本编辑器。但这只是在你不想尝试你的翻译信息的情况下。配置源代码树时,请确保使用--启用nls选项这还将检查libintl库和msgfmt所有最终用户都需要的程序。要尝试您的工作,请遵循安装说明的适用部分。

如果你想开始一个新的翻译工作,或者想进行一个消息目录合并(稍后描述),你将需要这些程序xgettextmsgmerge分别在GNU兼容的实现中。稍后,我们将尝试安排它,以便如果您使用打包的源发行版,您将不需要xgettext(如果使用Git,您仍然需要它。)目前建议使用GNU Gettext 0.10.36或更高版本。

本地gettext实现应该附带自己的文档。下面的内容可能重复了其中的一些内容,但要了解更多细节,您应该在这里查看。

# 55.1.2.概念

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

消息目录文件的扩展名也不足为奇阿宝先生莫先生基本名称可以是它附带的程序名,也可以是文件的语言,具体取决于具体情况。这有点令人困惑。例如psql。阿宝(psql的PO文件)或莫神父(法语的MO文件)。

采购订单文件的文件格式如下所示:

# 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

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

# 55.1.3.创建和维护邮件目录

那么,如何创建“空白”消息目录呢?首先,进入包含要翻译其消息的程序的目录。如果有文件nls。mk,那么这个程序已经准备好翻译了。

如果已经有了阿宝先生文件,然后有人已经做了一些翻译工作。这些文件被命名为*语言*阿宝先生哪里*语言是吗ISO 639-1两字母语言代码(小写) (opens new window),例如。,阿宝神父法语。如果每种语言确实需要不止一次的翻译工作,那么这些文件也可以命名*语言*_*区域*阿宝先生哪里区域*是吗ISO 3166-1双字母国家代码(大写) (opens new window),例如。,pt_BR。阿宝在巴西的葡萄牙人。如果你找到了你想要的语言,你可以开始处理这个文件。

如果需要开始新的翻译工作,请首先运行以下命令:

make init-po

这将创建一个文件*程序名*.大麻. (以区别于“生产中”的采购订单文件。这个T代表“模板”。)将此文件复制到*语言*阿宝先生然后编辑它。为了让大家知道新语言是可用的,还可以编辑该文件nls。mk并将语言(或语言和国家)代码添加到如下行:

AVAIL_LANGUAGES := de fr

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

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

make update-po

这将创建一个新的空白邮件目录文件(您开始使用的pot文件),并将其与现有PO文件合并。如果合并算法不确定某个特定消息,它会将其标记为“模糊”,如上所述。新的采购订单文件以阿宝先生。新扩大

# 55.1.4.编辑PO文件

PO文件可以使用常规文本编辑器进行编辑。翻译人员只应在msgstr指令后更改引号之间的区域,添加注释,并更改模糊标志。Emacs有一个PO模式(毫不奇怪),我觉得非常有用。

采购订单文件不需要完全填写。如果没有翻译(或空翻译),软件将自动返回原始字符串。提交源代码树中包含的不完整翻译是没有问题的;这给了其他人接你工作的空间。但是,建议您在合并后优先删除模糊条目。记住,不会安装模糊条目;它们只是作为正确翻译的参考。

在编辑翻译时,请记住以下几点:

  • 确保如果原文以换行结尾,译文也会换行。标签页等也是如此。

  • 如果原件是printf格式字符串,也需要翻译。翻译还需要以相同的顺序使用相同的格式说明符。有时,语言的自然规则使这不可能或至少令人尴尬。在这种情况下,您可以这样修改格式说明符:

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

    然后第一个占位符将实际使用列表中的第二个参数。这个*数字*$需要在任何其他格式操纵器之前立即跟随%。(这一功能确实存在于printf函数族。您可能以前没有听说过它,因为除了消息国际化之外,它几乎没有什么用处。)

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

  • 保持原弦的风格和音调。特别是那些不是句子的信息(无法打开文件%s)不应该以大写字母开头(如果你的语言区分大小写),或者以句点结尾(如果你的语言使用标点符号)。阅读可能会有所帮助第54.3节.

  • 如果你不知道一条消息的意思,或者是模棱两可的,可以询问开发者的邮件列表。说英语的最终用户可能也不理解它或发现它模棱两可,所以最好改进信息。