Traduz arquivos de locale i18next e JSON
Locale JSON é aninhado, e suas strings carregam variáveis como {{name}}. Uma ferramenta que vê apenas texto pode renomear uma chave, achatar o aninhamento ou traduzir a variável. KAERIS devolve o arquivo na mesma forma, com cada variável onde estava.
KAERIS traduziu esta página e verificou cada linha traduzindo-a de volta. Um falante nativo ainda não revisou. Original em inglês
Como um arquivo locale JSON é construído
Um arquivo por idioma (en.json, de.json), ou um por namespace (locales/en/common.json). As chaves são o contrato com seu código, então apenas os valores são traduzidos. i18next escreve formas plurais como chaves separadas (inbox_one, inbox_other); next-intl, Vue I18n e FormatJS as colocam em uma única string ICU.
{
"nav": { "greeting": "Welcome back, {{name}}!" },
"inbox_one": "{{count}} new message",
"inbox_other": "{{count}} new messages"
}
O que observar em traduções JSON
Variáveis em três grafias
{{name}}em i18next,{name}em bibliotecas estilo ICU,%sou${x}em outros lugares. Uma que desaparece aparece como um espaço em branco no aplicativo em execução, não como um erro.Plurais precisam de mais formas em alguns idiomas
Inglês tem duas formas. Russo, polonês e árabe precisam de três a seis. Com strings ICU, a verificação gratuita sinaliza uma forma ausente para ru, uk, pl, cs, sk, hr, sr, lt, ro, ar, lv, sl e he, e um ramo exato perdido como
=0. Com chaves de sufixo i18next, seu arquivo precisa das chaves extras que o idioma tem; KAERIS traduz as chaves que encontra.Referências e marcações dentro de um valor
$t(nav.cart)do i18next,@:nav.shopdo vue-i18n, tags<0>…</0>do componente Trans e HTML puro têm que sobreviver. O exemplo abaixo mostra uma perda real exatamente deste tipo.Anotações para você mesmo
Uma chave cujo caminho tem um segmento começando com
_(_comment,_status) é tratada como uma chave de serviço e não é traduzida por padrão, em JSON, YAML e ARB.
Uma execução real, antes e depois
Uma execução real: nosso arquivo de teste de 97 strings, alemão, 26 de outubro de 2026, cortado para quatro chaves. A última linha mostra uma perda que a verificação pegou nessa execução.
{
"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)
O que o KAERIS faz com isso
Mesmo arquivo, mesma forma
Chaves, aninhamento e ordem permanecem como em seu arquivo de origem; apenas os valores mudam. Funciona com arquivos i18next, Vue I18n, next-intl e FormatJS.
Variáveis contadas sem IA
Após a tradução, uma verificação de contagem simples compara cada variável e tag com o original. Uma linha que perdeu uma é marcada e mostrada no topo.
Cada linha traduzida de volta
Com
--verify, cada resultado é traduzido de volta para o seu idioma e um segundo modelo julga se o significado mudou. Você lê o que cada linha diz agora.Apenas as novas chaves
kaeris translate --only-newtraduz chaves novas e editadas;kaeris.lockao lado da origem lembra o resto. JSON e ARB.
Execute em três etapas
Instale o CLI
Execute
pip install kaeris. Nenhuma conta é necessária para os limites gratuitos.Traduza o arquivo
Execute
kaeris translate en.json --langs de,ja --verify. Os arquivosde.jsoneja.jsonaparecem ao lado da origem.Verifique o resultado
Execute
kaeris check --source en.json --langs de,ja. Ele sai com código 1 se uma variável, um número ou uma chave estiver errada, para que o CI possa parar o merge.
pip install kaeris kaeris init --preset i18next kaeris translate en.json --langs de,ja --verify kaeris check --source en.json --langs de,ja
Perguntas
Quais layouts JSON funcionam?
Arquivos de chave-valor planos e aninhados, como usados por i18next, Vue I18n, next-intl e FormatJS. O nível superior tem que ser um objeto, como {"greeting": "Hello"}. Arrays de strings também são traduzidos.
Ele mantém referências {{count}} e $t(…)?
Variáveis e referências são comparadas com a origem após a tradução. Uma linha que perdeu uma é sinalizada; o exemplo acima mostra uma execução real onde $t(nav.cart) foi perdido e a verificação pegou.
É 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
Posso rodar pelo terminal ou em CI?
Sim. pip install kaeris, então kaeris translate en.json --langs de,ja. O GitHub Action executa a mesma tradução em um pull request. Docs do CLI · GitHub Action
Continue
Referência do CLI · Referência de verificação · Traduzir no navegador · Verificação gratuita · Converter formatos · Pseudo-localização
Outros formatos: YAML · .po · ARB · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML