Traduzir arquivos ARB do Flutter
Um arquivo .arb é JSON com mensagens ICU e um bloco @key de metadados ao lado de cada string. O KAERIS traduz as mensagens, mantém os metadados e verifica a sintaxe ICU depois.
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 ARB é construído
JSON puro. Cada mensagem fica ao lado de uma entrada @message com sua descrição e tipos de placeholder; @@locale nomeia o idioma. Plurais e seleções são strings ICU: {count, plural, =0{…} one{…} 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" } }
}
}
O que observar nas traduções ARB
Sintaxe ICU é código
Uma chave perdida ou um ramo descartado quebra o Dart gerado. O KAERIS compara os blocos ICU com a origem e reporta um ramo exato descartado como
=0.Idiomas com mais formas plurais
O Russo precisa de
fewemanyalém deoneeother; a verificação reporta uma forma ausente para os idiomas onde isso se aplica.Metadados são para o template, não para a tradução
Entradas
@key(descrição, tipos de placeholder) são mantidas na saída;@@localeé reescrito para o idioma de destino.Placeholders são nomeados
{name}deve manter seu nome, pois o gerador o vincula ao tipo no bloco@.
Uma execução real: traduzido para Alemão e verificado
Uma execução real, 27 de outubro de 2026, nada editado manualmente: kaeris translate app_en.arb --langs de com kaeris 0.2.35, 2.7 segundos, modelo google/gemini-2.5-flash-lite, o padrão do nível gratuito. Abaixo, o arquivo alemão que ele escreveu e o que kaeris check diz sobre ele.
{
"@@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
O que o KAERIS faz com isso
Metadados mantidos, locale reescrito
Blocos
@keysão transferidos;@@localeé definido por idioma de destino.ICU verificado
Ramos perdidos, variáveis perdidas e danos em chaves são encontrados pela mesma verificação que o site executa.
Apenas as novas chaves
--only-newfunciona para ARB: chaves editadas e novas são traduzidas, o resto é reutilizado. Presets:kaeris init --preset flutter-arb.Verificação no terminal
kaeris checklê fontes ARB diretamente, sem chave.
Execute em três etapas
Instale o CLI
Execute
pip install kaeris.Traduza o template
Execute
kaeris translate lib/l10n/app_en.arb --langs de,ja.Verifique o resultado
Execute
kaeris checkcom a origem e--pattern 'app_{lang}.arb'; ele sai com código 1 em caso de variável ou bloco ICU corrompido.
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'
Perguntas
As entradas @metadata são mantidas?
Sim. Descrições e tipos de placeholder permanecem ao lado de cada mensagem; @@locale é reescrito para o idioma de destino.
E se o plural ICU estiver errado em uma tradução?
A verificação compara os blocos ICU com a origem e nomeia o problema, por exemplo, um ramo =0 descartado. Na execução real acima, o plural retornou com os três ramos e a verificação não teve nada a relatar.
É 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 lib/l10n/app_en.arb --langs de,ja. Veja também Flutter. 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: JSON · YAML · .po · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML