SDB:使用 po 文件进行本地化
什么是 po 文件
应用程序的对话框和菜单,需要翻译的部分,存储在 po 文件中。po 文件是一种具有特殊结构和 .po 后缀的文件。它包含有关语言、翻译人员、原始对话框和翻译后的对话框的信息。原始对话框以 msgid 开头,后跟以 msgstr 开头的翻译。语言和翻译人员的信息位于 po 文件的开头。如果不可用翻译后的对话框或菜单,则 msgstr 部分为空。符号 # 表示该行是注释。
空翻译示例
#: src/PackageCommands.cs:57 src/PackageCommands.cs:3181 msgid "Search for a match to any of the search strings" msgstr ""
捷克语翻译示例
#: src/PackageCommands.cs:57 src/PackageCommands.cs:3181 msgid "Search for a match to any of the search strings" msgstr "Vyhledat výsledek odpovídající alespoň některému z řetězců"
什么是 pot 文件
pot 文件是翻译的模板。pot 文件的格式类似于 po 文件,但它仅包含原始英文文本,不包含有关语言或翻译人员的信息。po 文件是从 pot 文件创建的。如果您在文本编辑器中手动创建 po 文件,则需要添加有关您的语言的信息并以 .po 后缀保存文件。如果您不正确地创建 po 文件的开头,则 po 文件将无法通过语法检查,并且在 统计 中将显示为紫色,并且翻译和模糊字符串的数量为零。
rug.pot 的开头
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-05-02 20:04-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n"
rug.hu.po 的开头
# translation of hu.po to # Peter Breuer <comp@suselinux.hu>, 2003. # Marcel Hilzinger <hili@suselinux.hu>, 2003. # Marcel Hilzinger <marcel.hilzinger@suselinux.hu>, 2004. # Szabolcs Varga <shirokuma@shirokuma.hu>, 2004, 2005. # Kalman Kemenczy <kkemenczy@novell.com>, 2006. msgid "" msgstr "" "Project-Id-Version: hu\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-06-08 12:58+0200\n" "PO-Revision-Date: 2006-06-08 17:26+0200\n" "Last-Translator: \n" "Language-Team: <hu@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.2\n" "Plural-Forms: nplurals=1; plural=0;\n"
如何翻译 po 文件
开始本地化所需的一切都是一个文本编辑器,并用您的翻译填充所有空的 msgstr。但是,您可能会发现一个特殊的 翻译工具 更方便使用。
po 文件中以 msgid 开头的原始英文文本无法更改。您只能更改翻译。如果您在原始英文文本中发现错误,请使用 Bugzilla 进行报告。所有错误的文本必须首先在应用程序的源代码中修复,然后将生成一个新的 pot 文件。
快捷键
定义快捷键有两种不同的方法
msgid "&Add..." msgstr "&Hozzáadás"
或
msgid "_Add" msgstr "_Hozzáadás"
您可以选择翻译字符串中的任何字母,也可以将快捷键符号放置在不同的位置,但快捷键符号必须与原始字符串中的相同。如果原始字符串中使用了 &,则必须在翻译中也使用该符号 &。如果无法直接将快捷键添加到字符串中,请使用此语法
msgid "&Add..." msgstr "新增(&A)"
或
msgid "_Add" msgstr "新增(_A)"
变量
所有变量由 % 和一个数字或字母组成。包含变量的字符串示例
msgid "Automatic configuration via %s?" msgstr ""
变量在您的翻译中是必需的。如果字符串包含变量,则必须在您的翻译中也使用它。
格式化字符串
在每个 po 文件中,您可以找到各种格式化字符串。其中大多数与 HTML 标签相同。也可能发生您找到 XML 标签或来自其他语言的格式化字符串。所有这些字符串在您的翻译中都是必需的。如果您省略一个字符串,则翻译将无法通过语法检查。
| \n | 新行 |
如果原始字符串中的所有行(最后一行除外)都以 \n 结尾,则您的翻译中只有最后一行可以没有 \n,即使您的翻译中的行数多于或少于原始字符串中的行数。所有其他行必须以 \n 结尾。 |
| <b>some_text</b> | 粗体文本 | |
| <i>some_text</i> | 斜体文本 | |
| <qt>some_text</qt> |
复数形式
pot 文件中包含复数的字符串
msgid "%1 second" msgid_plural "%1 seconds" msgstr[0] "" msgstr[1] ""
具有一个复数形式的字符串的翻译 (zh_CN)
msgid "%1 second" msgid_plural "%1 seconds" msgstr[0] "%1 秒"
具有两个复数形式的字符串的翻译 (希腊语)
msgid "%1 second" msgid_plural "%1 seconds" msgstr[0] "%1 δευτερόλεπτο" msgstr[1] "%1 δευτερόλεπτα"
具有三个复数形式的字符串的翻译 (捷克语)
msgid "%1 second" msgid_plural "%1 seconds" msgstr[0] "%1 sekunda" msgstr[1] "%1 sekundy" msgstr[2] "%1 sekund"
在 KBabel 中,您应该首先在项目设置中设置复数形式定义。如果您的设置正确,KBabel 将为每个复数形式提供单独的选项卡。
语法检查
在将 po 文件提交到 SVN 之前,请检查 po 文件的语法。为此,请使用 msgfmt 并指定参数 -c,或检查您的翻译应用程序中的功能。
链接
- POEditor - 用于 gettext po 文件和其他流行的本地化格式的基于 Web 的翻译工具
- KBabel 手册 (已过时)
- Lokalize - Lokalize 是 KDE4 的翻译工具