Перевести

Перевод файлов локализации 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 октября 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 выполняет тот же перевод в pull request. Документация CLI · GitHub Action

Продолжайте

Справочник по CLI · Справочник по проверке · Перевести в браузере · Бесплатная проверка · Конвертировать форматы · Псевдолокализация

Другие форматы: YAML · .po · ARB · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML