翻译 gettext .po 文件
一个 .po 文件是文本键值对:英文句子是键。上下文、复数形式和 Python 风格的变量都围绕着这些文本。KAERIS 会保留它们,并为目标语言写入所需的复数形式。
KAERIS 翻译了此页面,并通过回译检查了每一行。尚未经过母语人士审阅。 英文原文
.po 文件是如何构建的
每个条目都有一个 msgid(源文本)和一个 msgstr(翻译)。msgctxt 用于区分两个相同的句子。复数形式使用 msgid_plural 和每个形式的一个 msgstr[n],并且头部文件中的 Plural-Forms 行说明了该语言有多少种形式。
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: app/views.py:12
msgid "Welcome back, %(name)s!"
msgstr ""
#: app/views.py:20
msgid "%(count)d file"
msgid_plural "%(count)d files"
msgstr[0] ""
msgstr[1] ""
msgctxt "menu"
msgid "Open"
msgstr ""
msgctxt "verb"
msgid "Open"
msgstr ""
.po 翻译中需要注意的事项
上下文改变词语
“Open”作为菜单项和“Open”作为动词的翻译不同。KAERIS 会将上下文与文本一起读取,并在同一个源词返回了两种翻译时进行标记。在下面的实际运行中,两者都返回了“Öffnen”,这在德语中是正确的,并且上下文也保留在文件中。
复数形式因语言而异
英语有两种,俄语三种,阿拉伯语六种。在俄语运行中,头部会变成
nplurals=3,每个复数条目会获得三个msgstr插槽。Python 和 C 风格的变量
%(name)s、%d、{name}必须保持不变,否则应用程序在运行时会报错。头部和引用
头部会根据语言和复数规则重建。源引用注释(
#:)不会被带入翻译后的文件中。
实际运行:翻译为德语并进行检查
实际运行,27 October 2026,未手动编辑:kaeris translate en.po --langs de 使用 kaeris 0.2.35,耗时 3.9 秒,模型 google/gemini-2.5-flash-lite,免费套餐默认模型。下方是它生成的德语文件以及 kaeris check 的检查结果。
# Generated by KAERIS i18n Tool # Language: de msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Language: de\n" msgid "Welcome back, %(name)s!" msgstr "Willkommen zurück, %(name)s!" msgid "%(count)d file" msgid_plural "%(count)d files" msgstr[0] "%(count)d Datei" msgstr[1] "%(count)d Dateien" msgctxt "menu" msgid "Open" msgstr "Öffnen" msgctxt "verb" msgid "Open" msgstr "Öffnen"
$ kaeris check --source en.po --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
KAERIS 的处理方式
条目和上下文保留
文本键、
msgctxt和复数对会以相同的顺序返回。目标语言的复数插槽
msgstr[n]的数量遵循目标语言,在俄语运行中进行了检查。此格式免费检查
在 /check 上的免费检查可以读取此格式,无需密钥或账户即可运行。终端命令
kaeris check也可以读取它:自 kaeris 0.2.35 起,它支持所有 13 种格式,规则相同,且不会将任何内容发送到任何地方。
分三步运行
安装 CLI
运行
pip install kaeris。翻译目录文件
运行
kaeris translate django.po --langs de,ja。输出文件名按语言命名。检查结果
在免费检查页面上传源文件和翻译后的 .po 文件,以查看丢失的变量和不一致的术语。
pip install kaeris kaeris translate locale/en/LC_MESSAGES/django.po --langs de,ja --verify
问题
它能处理俄语或阿拉伯语的复数形式吗?
复数头部和 msgstr[n] 插槽的数量会根据目标语言写入。在俄语运行中,示例源生成了 nplurals=3 和三个插槽。
msgctxt 呢?
上下文会附加到条目上,因此具有不同上下文的两个相同源是不同的字符串。当它们返回不同的翻译时,检查会发出警告。
免费吗?
是的,无需账户:每个文件 10,000 个字符,每次运行最多 8 种语言。免费的 API 密钥可将文件限制提高到 50,000 个字符。一次性付费 79 美元,使用您自己的 OpenRouter 密钥;月度套餐起价为 19 美元。价格
我可以在终端或 CI 中运行它吗?
是的。运行 pip install kaeris,然后运行 kaeris translate django.po --langs de,ja。另请参阅 Django。GitHub Action 会在拉取请求中运行相同的翻译。 CLI 文档 · GitHub Action
继续
CLI 参考 · 检查参考 · 在浏览器中翻译 · 免费检查 · 格式转换 · 伪本地化
其他格式: JSON · YAML · ARB · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML