Переклад файлів локалізації 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.
{
"nav": { "greeting": "Welcome back, {{name}}!" },
"inbox_one": "{{count}} new message",
"inbox_other": "{{count}} new messages"
}
На що звертати увагу в перекладах JSON
Змінні у трьох написаннях
{{name}}в i18next,{name}в бібліотеках стилю ICU,%sабо${x}в інших. Відсутня змінна відображається як порожнє місце в запущеному додатку, а не як помилка.Для множини потрібні додаткові форми в деяких мовах
В англійській дві форми. У російській, польській та арабській — від трьох до шести. З ICU рядками безкоштовна перевірка позначає відсутню форму для ru, uk, pl, cs, sk, hr, sr, lt, ro, ar, lv, sl і he, а також пропущену точну гілку, наприклад
=0. З суфіксними ключами i18next ваш файл має містити додаткові ключі, які є в мові; KAERIS перекладає знайдені ключі.Посилання та розмітка всередині значення
i18next
$t(nav.cart), vue-i18n@:nav.shop, теги<0>…</0>компонента Trans та звичайний HTML мають зберігатися. Приклад нижче показує реальну втрату саме такого виду.Нотатки для себе
Ключ із сегментом шляху, що починається з
_(_comment,_status), вважається службовим і за замовчуванням не перекладається в JSON, YAML та ARB.
Реальний запуск, до і після
Реальний запуск: наш тестовий файл із 97 рядків, німецька, 26 жовтня 2026, скорочено до чотирьох ключів. Останній рядок показує втрату, яку виявила перевірка під час цього запуску.
{
"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}}"
}
}
{
"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}}"
}
}
error ph.nesting: lost placeholder $t(nav.cart)
Що KAERIS робить з цим
Той самий файл, той самий вигляд
Ключі, вкладеність і порядок залишаються як у вихідному файлі; змінюються лише значення. Працює з файлами i18next, Vue I18n, next-intl та FormatJS.
Підрахунок змінних без AI
Після перекладу проста перевірка порівнює кожну змінну та тег із оригіналом. Рядок, у якому щось втрачено, позначається і показується зверху.
Кожен рядок перекладається назад
З
--verifyкожен результат перекладається назад на вашу мову, і друга модель оцінює, чи змінився зміст. Ви читаєте, що тепер означає кожен рядок.Тільки нові ключі
kaeris translate --only-newперекладає нові та змінені ключі;kaeris.lockпоруч із джерелом запам’ятовує решту. JSON та ARB.
Запустіть у три кроки
Встановіть CLI
Виконайте
pip install kaeris. Обліковий запис не потрібен для безкоштовних лімітів.Перекладіть файл
Виконайте
kaeris translate en.json --langs de,ja --verify. Файлиde.jsonтаja.jsonз’являться поруч із джерелом.Перевірте результат
Виконайте
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