Перевести файлы Flutter ARB
Файл .arb — это JSON с сообщениями ICU и блоком метаданных @key рядом с каждой строкой. KAERIS переводит сообщения, сохраняет метаданные и проверяет синтаксис ICU после этого.
Эту страницу перевёл KAERIS и проверил каждую строку обратным переводом. Носитель языка ещё не проверял. Оригинал на английском
Как устроен файл ARB
Простой JSON. Каждое сообщение находится рядом с записью @message с его описанием и типами заполнителей; @@locale указывает язык. Множественное число и выбор — это строки ICU: {count, plural, =0{…} one{…} few{…} many{…} 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.Языки с большим количеством форм множественного числа
Русскому языку нужны формы
fewиmanyпомимоoneиother; проверка сообщает об отсутствующей форме для языков, к которым это относится.Метаданные предназначены для шаблона, а не для перевода
Записи
@key(описание, типы плейсхолдеров) сохраняются в выводе;@@localeперезаписывается для целевого языка.Плейсхолдеры имеют имена
{name}должен сохранять свое имя, потому что генератор связывает его с типом в блоке@.
Реальный запуск: переведено на немецкий и проверено
Реальный запуск, 27 октября 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'; он завершается с кодом 1 при ошибке в переменной или блоке ICU.
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 выполняет тот же перевод в pull request. Документация CLI · GitHub Action
Продолжайте
Справочник по CLI · Справочник по проверке · Перевести в браузере · Бесплатная проверка · Конвертировать форматы · Псевдолокализация
Другие форматы: JSON · YAML · .po · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML