|
文件扩展名 |
.po |
|
API 扩展 |
gettext |
|
导入 |
是 |
|
导出 |
是 |
|
复数形式支持 |
是 |
|
描述支持 |
是 |
|
格式选项 这些选项可以在文件上传和/或下载时指定。根据上传/下载方法(API、CLI、Repo同步等),它们可以在查询参数 |
|
.PO(可移植对象)是用于本地化的标准文件格式,使用GNUgettext,这是一个开源GNU库,旨在简化本地化过程。使用GNU gettext,可本地化字符串从源代码提取到PO文件中进行翻译。一个.PO文件是一系列键值对。键msgid是源字符串放置的位置,而值msgstr是翻译的位置。
gettext将字符串从源代码提取到.POT(可移植对象模板)中。根据定义的区域,gettext然后将.POT文件转换为特定区域的.PO文件,以便上传到CAT工具进行翻译。翻译后,gettext将翻译的.PO文件转换为.MO文件(机器对象文件),最终用于本地化。
.PO文件与.POT文件相同,除了.POT文件通常由gettext用于生成特定区域的.PO文件。直接翻译.POT文件并根据后续预期的区域重命名不会产生问题。Phrase支持以下内容的翻译:
-
.PO文件
-
双语.PO文件
-
机器可读的.MO文件
msgctxt将用作键前缀,与msgid结合并用||分隔。
格式选项
|
标识符 |
is_bilingual_file |
|
类型 |
布尔值 |
|
上传 |
true |
|
下载 |
false |
|
默认 |
false |
|
说明 |
源和目标翻译都将从上传的文件中导入:源内容将从 |
代码示例
msgid "" msgstr "" "语言:英语\n" "MIME-Version:1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding:8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator:PhraseApp (phraseapp.com)\n" msgid "boolean_key" msgstr "--- true\n" msgid "empty_string_translation" msgstr "" # 这是这个键的惊人描述! msgid "key_with_description" msgstr "看看吧!This key has a description!(At least in some formats)" msgid "key_with_line-break" msgstr "这个翻译包含\n一个换行符。" msgid "nested.deeply.key" msgstr "哇,这个键嵌套得更深了。" msgid "nested.key" msgstr "这个键嵌套在一个命名空间内。" msgid "null_translation" msgstr "" msgid "pluralized_key" msgid_plural "" msgstr[0] "只找到一个复数形式。" msgstr[1] "哇,你有 %s 个复数形式!" msgid "sample_collection" msgstr "---\n- 第一项\n- 第二项\n- 第三项\n" msgid "simple_key" msgstr "简单的键,简单的信息,太简单了。2" #, 模糊 msgid "unverified_key" msgstr "我需要验证,请验证我!"(In some formats we also export this status)"
典型的gettext条目:
# 描述(可选) msgid "键名" msgstr "我的翻译"
gettext头部
gettext文件的头部可能包含区域名称和在导入过程中提取的复数形式的数据:
msgid "" msgstr "" "语言: en\n" "MIME-Version:1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding:8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator:PhraseApp (phraseapp.com)\n"
描述
gettext文件中的注释在导入过程中作为键描述添加:
# 这是我的描述 msgid "app_title" msgstr "我的软件项目"
上下文
gettext使用msgctxt符号来区分相同msgid的不同上下文。每个键名必须是唯一的,因此msgctxt作为键名的第一部分被添加,用两个管道符号||分隔:
msgctxt "menu" msgid "打开" msgstr "我是一种翻译" msgctxt "forum" msgid "打开" msgstr "我是一种其他翻译"
要将 msgctxt 添加到新键中,请将其添加到键名称前:
my_context||my_key_name
结果 gettext 输出:
... msgctxt "my_context" msgid "my_key_name" ...
复数形式
gettext 支持翻译的复数形式:
msgid "new_messages"
msgid_plural ""
msgstr[0] "您有一条新消息"
msgstr[1] "您有 %{count} 条新消息"
模糊匹配
模糊关键字用于翻译验证。模糊会自动在 Phrase 中调用未验证过程。
#, 模糊 msgid "app_title" msgstr "我的软件项目"