Traduza mensagens next-intl, depois verifique cada linha
Mensagens next-intl são JSON aninhados com sintaxe ICU: {count, plural, =0 {…} one {# item} other {# items}}. Japonês tem uma forma plural, russo três, e um ramo copiado como está fica errado. KAERIS traduz messages/en.json ramo por ramo e mantém os namespaces.
KAERIS traduziu esta página e verificou cada linha traduzindo-a de volta. Um falante nativo ainda não revisou. Original em inglês
Ramos ICU seguem o idioma alvo
Japonês não tem forma singular, então one se funde em other. {name} e # permanecem.
{
"HomePage": {
"title": "Welcome, {name}!",
"cartItems": "{count, plural, =0 {Your cart is empty} one {# item} other {# items}}"
}
}
{
"HomePage": {
"title": "ようこそ、{name}さん!",
"cartItems": "{count, plural, =0 {カートは空です} other {#点の商品}}"
}
}
O que o KAERIS faz com isso
Namespaces mantidos
HomePage,Carte todo objeto aninhado permanecem como na sua origem, prontos para o segmento[locale]do App Router.Variáveis verificadas sem IA
Após a tradução, uma verificação simples conta cada variável e tag comparando com o original. Uma linha que perdeu alguma é marcada e exibida no topo.
Cada linha traduzida de volta
Um modelo diferente, GPT-4o mini, traduz cada linha de volta para seu idioma, e o DeepSeek V3.2 em hosts dos EUA (DeepInfra, DigitalOcean, Google) avalia se o significado mudou. Você lê o que cada linha diz agora.
Perguntas
select também funciona?
Sim. plural, select e selectordinal mantêm sua sintaxe; apenas as palavras dentro dos ramos são traduzidas.
Um arquivo por localidade?
Sim: messages/de.json, messages/ja.json e assim por diante, o layout esperado pelo next-intl.
É gratuito?
Sim, sem conta: 10.000 caracteres por arquivo e até 8 idiomas por execução. Uma chave API gratuita eleva o limite para 50.000 caracteres. A licença vitalícia custa $79 uma vez, usando sua própria chave OpenRouter; planos mensais começam em $19. Preços
Como integrar isso ao repositório?
kaeris init --preset next-intl escreve as configurações para messages/, e kaeris translate roda sem flags. Docs