翻译

翻译 i18next 和 JSON 语言环境文件

语言环境 JSON 是嵌套的,其字符串包含像 {{name}} 这样的变量。仅能识别文本的工具可能会重命名键、展平嵌套或翻译变量。KAERIS 会以相同的结构返回文件,并将每个变量保留在原位。

KAERIS 翻译了此页面,并通过回译检查了每一行。尚未经过母语人士审阅。 英文原文

语言环境 JSON 文件是如何构建的

每种语言一个文件(en.json, de.json),或每个命名空间一个文件(locales/en/common.json)。键是与代码的契约,因此只有值会被翻译。i18next 将复数形式写成单独的键(inbox_one, inbox_other);next-intl、Vue I18n 和 FormatJS 将它们放入一个 ICU 字符串中。

源文件en.json
{
  "nav": { "greeting": "Welcome back, {{name}}!" },
  "inbox_one": "{{count}} new message",
  "inbox_other": "{{count}} new messages"
}

JSON 翻译中需要注意的事项

真实运行,之前和之后

真实运行:我们的 97 行测试文件,德语,26 October 2026,截取为四行。最后一行显示了该次运行中捕获到的丢失内容。

之前en.json
{
  "ph": {
    "mustache": "Hi {{firstName}}, your order {{orderId}} has shipped.",
    "reactTrans": "By continuing you accept our <0>Terms</0> and <1>Privacy Policy</1>.",
    "nesting": "$t(nav.cart) has been updated"
  },
  "icu": {
    "copiesLeft": "{count, plural, =0 {Sold out} one {Only # copy left} other {Only # copies left}}"
  }
}
之后de.json
{
  "ph": {
    "mustache": "Hallo {{firstName}}, Ihre Bestellung {{orderId}} wurde versendet.",
    "reactTrans": "Durch die fortgesetzte Nutzung stimmen Sie unseren <0>Nutzungsbedingungen</0> und <1>Datenschutzrichtlinien</1> zu.",
    "nesting": "Der Warenkorb wurde aktualisiert"
  },
  "icu": {
    "copiesLeft": "{count, plural, =0 {Ausverkauft} one {Nur noch # Exemplar} other {Nur noch # Exemplare}}"
  }
}
免费检查此文件/check
error ph.nesting: lost placeholder $t(nav.cart)

KAERIS 的处理方式

分三步运行

  1. 安装 CLI

    运行 pip install kaeris。免费额度无需注册账户。

  2. 翻译文件

    运行 kaeris translate en.json --langs de,ja --verify。de.json 和 ja.json 文件将出现在源文件旁边。

  3. 检查结果

    运行 kaeris check --source en.json --langs de,ja。如果变量、数字或键有误,它将以代码 1 退出,从而 CI 可以阻止合并。

pip install kaeris
kaeris init --preset i18next
kaeris translate en.json --langs de,ja --verify
kaeris check --source en.json --langs de,ja

问题

哪些 JSON 布局可用?

扁平化和嵌套的键值文件,如 i18next、Vue I18n、next-intl 和 FormatJS 所使用的。顶层必须是一个对象,例如 {"greeting": "Hello"}。字符串数组也会被翻译。

是否保留 {{count}} 和 $t(…) 引用?

翻译后会比较变量和引用与源文件。丢失了引用的行会被标记;上面的示例显示了一次真实运行,其中 $t(nav.cart) 被删除了,并且检查捕获到了它。

免费吗?

是的,无需账户:每个文件 10,000 个字符,每次运行最多 8 种语言。免费的 API 密钥可将文件限制提高到 50,000 个字符。一次性付费 79 美元,使用您自己的 OpenRouter 密钥;月度套餐起价为 19 美元。价格

我可以在终端或 CI 中运行它吗?

是的。安装 pip install kaeris,然后运行 kaeris translate en.json --langs de,ja。GitHub Action 在拉取请求中运行相同的翻译。 CLI 文档 · GitHub Action

继续

CLI 参考 · 检查参考 · 在浏览器中翻译 · 免费检查 · 格式转换 · 伪本地化

其他格式:YAML · .po · ARB · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML