Переведите сообщения next-intl, затем проверьте каждую строку
{count, plural, =0 {…} few {# предмет} one {# предмет} many {# предметов} other {# предметов}}
Эту страницу перевёл KAERIS и проверил каждую строку обратным переводом. Носитель языка ещё не проверял. Оригинал на английском
Ветки ICU следуют за целевым языком
В японском языке нет единственного числа, поэтому one сворачивается в other. {name} и # остаются.
{
"HomePage": {
"title": "Welcome, {name}!",
"cartItems": "{count, plural, =0 {Your cart is empty} one {# item} other {# items}}"
}
}
{
"HomePage": {
"title": "ようこそ、{name}さん!",
"cartItems": "{count, plural, =0 {カートは空です} other {#点の商品}}"
}
}
Что KAERIS делает с этим
Пространства имен сохранены
HomePage,Cartи каждый вложенный объект остаются такими же, как в вашем источнике, готовые для сегмента[locale]App Router.Переменные проверяются без ИИ
После перевода простая проверка сравнивает каждую переменную и тег с оригиналом. Строка, потерявшая один, помечается и отображается сверху.
Каждая строка переведена обратно
Другая модель, GPT-4o mini, переводит каждую строку обратно на ваш язык, а DeepSeek V3.2 на американских серверах (DeepInfra, DigitalOcean, Google) оценивает, изменился ли смысл. Вы читаете, что теперь говорит каждая строка.
Вопросы
select тоже работает?
Да. plural, select и selectordinal сохраняют свой синтаксис; переводятся только слова внутри ветвей.
Один файл на локаль?
Да: messages/de.json, messages/ja.json и так далее, в том виде, в котором ожидает next-intl.
Это бесплатно?
Да, без учетной записи: 10 000 символов на файл и до 8 языков за запуск. Бесплатный API-ключ увеличивает лимит файлов до 50 000 символов. Пожизненная лицензия стоит $79 один раз, при использовании вашего собственного ключа OpenRouter; ежемесячные планы начинаются от $19. Цены
Как мне интегрировать это в репозиторий?
kaeris init --preset next-intl записывает настройки для messages/, а kaeris translate запускается без флагов. Документация