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 的翻译工具
  • Lokalize - Lokalize 是 KDE4 的翻译工具


主页:openSUSE:Localization_guide