翻译 Flutter ARB 文件
ARB 文件是 JSON 格式,包含 ICU 消息和每个字符串旁边的 @key 元数据块。KAERIS 会翻译消息内容,保留元数据,并事后检查 ICU 语法。
KAERIS 翻译了此页面,并通过回译检查了每一行。尚未经过母语人士审阅。 英文原文
ARB 文件结构
纯 JSON 格式。每条消息旁边都有一个 @message 条目,包含其描述和占位符类型;@@locale 指定语言。复数和选择项是 ICU 字符串:{count, plural, =0 {…} other {…}}。
{
"@@locale": "en",
"welcome": "Welcome back, {name}!",
"@welcome": {
"description": "Greeting on the home screen",
"placeholders": { "name": { "type": "String" } }
},
"itemCount": "{count, plural, =0{No items} one{{count} item} other{{count} items}}",
"@itemCount": {
"placeholders": { "count": { "type": "int" } }
}
}
ARB 翻译注意事项
ICU 语法即代码
丢失一个大括号或一个分支就会导致生成的 Dart 代码出错。KAERIS 会将 ICU 块与源文件进行比较,并报告丢失的精确分支,例如
=0。具有更多复数形式的语言
俄语除了
one和other外,还需要few和many;检查会报告适用于这些语言的缺失形式。元数据用于模板,而非翻译
@key条目(描述、占位符类型)会保留在输出中;@@locale会根据目标语言重写。占位符已命名
{name}必须保留其名称,因为生成器会将其与@块中的类型关联起来。
实际运行:翻译为德语并进行检查
实际运行,27 October 2026,未手动编辑:kaeris translate app_en.arb --langs de,使用 kaeris 0.2.35,耗时 2.7 秒,模型 google/gemini-2.5-flash-lite,免费套餐默认选项。下方是它生成的德语文件以及 kaeris check 的检查结果。
{
"@@locale": "de",
"welcome": "Willkommen zurück, {name}!",
"itemCount": "{count, plural, =0{Keine Artikel} one{{count} Artikel} other{{count} Artikel}}",
"@welcome": {
"description": "Greeting on the home screen",
"placeholders": {
"name": {
"type": "String"
}
}
},
"@itemCount": {
"placeholders": {
"count": {
"type": "int"
}
}
}
}
$ kaeris check --source app_en.arb --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
KAERIS 的处理方式
元数据已保留,区域设置已重写
@key块已保留;@@locale已根据目标语言设置。ICU 已检查
丢失的分支、丢失的变量和括号损坏会通过网站运行的相同检查来发现。
仅翻译新键
--only-new对 ARB 文件有效:已编辑和新增的键会被翻译,其余的会沿用。预设:kaeris init --preset flutter-arb。终端检查
kaeris check直接读取 ARB 源文件,无需键名。
分三步运行
安装 CLI
运行
pip install kaeris。翻译模板文件
运行
kaeris translate lib/l10n/app_en.arb --langs de,ja。检查结果
运行
kaeris check,提供源文件和--pattern 'app_{lang}.arb';如果变量或 ICU 块损坏,则退出码为 1。
pip install kaeris
kaeris init --preset flutter-arb
kaeris translate lib/l10n/app_en.arb --langs de,ja --verify
kaeris check --source lib/l10n/app_en.arb --langs de,ja --pattern 'app_{lang}.arb'
问题
@metadata 条目会被保留吗?
是的。描述和占位符类型会保留在每条消息旁边;@@locale 会根据目标语言重写。
如果翻译中的 ICU 复数形式不正确怎么办?
检查会将 ICU 块与源文件进行比较,并指出问题,例如丢失的 =0 分支。在实际运行中,复数形式返回时包含了所有三个分支,因此检查没有报告任何问题。
免费吗?
是的,无需账户:每个文件 10,000 个字符,每次运行最多 8 种语言。免费的 API 密钥可将文件限制提高到 50,000 个字符。一次性付费 79 美元,使用您自己的 OpenRouter 密钥;月度套餐起价为 19 美元。价格
我可以在终端或 CI 中运行它吗?
是的。运行 pip install kaeris,然后运行 kaeris translate lib/l10n/app_en.arb --langs de,ja。另请参阅 Flutter。GitHub Action 在拉取请求中运行相同的翻译。 CLI 文档 · GitHub Action
继续
CLI 参考 · 检查参考 · 在浏览器中翻译 · 免费检查 · 格式转换 · 伪本地化
其他格式:JSON · YAML · .po · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML