Para adicionar um idioma a um app Flutter, você traduz um arquivo: o ARB de modelo. Todo o resto, inclusive as classes Dart, é gerado a partir dele.
Este guia trata desse único arquivo, app_en.arb, e dos três pontos que costumam dar problema: os metadados @, os placeholders e os plurais. Para outros formatos de app, veja como traduzir os arquivos de idioma do seu app.
O que é um arquivo ARB
Um arquivo ARB é um JSON com uma convenção adicional. A ferramenta de localização do Flutter lê arquivos ARB de lib/l10n por padrão, usa app_en.arb como modelo e gera as classes Dart quando você executa flutter gen-l10n. Cada arquivo corresponde a um idioma.
As entradas vêm em pares: uma chave com o texto e uma entrada @ que o descreve. Só o texto deve ser traduzido.
Qual opção você deve usar?
| Ideal para | Limitações | |
|---|---|---|
| AI Glot | Um ou vários novos locales, um glossário que precisa ser respeitado e cada lançamento | Não vale a pena para dez strings |
| Uma plataforma de gerenciamento de tradução (Crowdin, Lokalise, Phrase, Localizely) | Uma equipe com revisores e conexão com o repositório | Primeiro, você precisa configurar um projeto e conectar o repositório |
| DeepL | Arquivos XLIFF, que estão na lista | ARB não está na lista, então você precisa converter o arquivo primeiro |
| ChatGPT, Claude ou outro assistente | Poucas strings | Você escreve o prompt e inclui o glossário em cada conversa. A cada execução, uma chave pode mudar, um {placeholder} pode quebrar ou um plural ICU pode ser alterado. Por isso, compare todos os arquivos |
| Um freelancer ou uma agência | O texto da sua App Store e da Play Store | O processo é lento, o preço é por palavra e você ainda precisa preparar o arquivo |
Contrate um profissional para a página da loja e a primeira tela. Use um mecanismo para traduzir o restante dos rótulos e das mensagens.
Por que o AI Glot é ideal para arquivos ARB
- As chaves e os metadados
@fazem parte da estrutura. Eles podem permanecer exatamente como estão. - Placeholders e sintaxe ICU são preservados.
{name}e{count, plural, ...}permanecem na mensagem, enquanto as palavras de cada ramificação são traduzidas. - Vários idiomas em uma única tarefa, sem repetir as mesmas strings cinco vezes.
- Um glossário para todos os locales e para os arquivos que você adicionar depois.
- Um plano antes de qualquer gasto, com uma amostra que você pode revisar.
O fluxo de um arquivo
- 1Uploadapp_en.arb originalAté 8 MB
- 2Diga o que você precisaIdiomas e o que manter sem alteraçõesGrátis
- 3Leia o planoStrings, idiomas e custoGrátis
- 4AprovarA única etapa com custoConsome créditos
- 5BaixarUm arquivo ARB por idiomaÉ só enviar
Como fica uma entrada traduzida
{ "@@locale": "en", "@@locale": "fr", "welcome": "Welcome back, {name}", "welcome": "Bon retour, {name}", "@welcome": { "description": "Greeting on the home screen" }, "cartItems": "{count, plural, one{1 item} other{{count} items}}" "cartItems": "{count, plural, one{1 article} other{{count} articles}}"}O que verificar depois
Plurais em idiomas com mais formas. O inglês precisa de dois ramos. O russo e o árabe precisam de mais, e a mensagem traduzida pode precisar de ramos que não existem no texto original em inglês. Revise essas mensagens uma vez.
@@locale. Se você não pediu para atualizar esse valor, ele volta como estava. Então, defina a localidade de destino antes de publicar.
Comprimento. Confira as telas com as strings mais longas para ver se algum texto ultrapassa os limites de um botão ou cartão.
Como fazer, passo a passo
1. Experimente um arquivo grátis. O tradutor de ARB não exige conta e aceita arquivos de até 2 MB e 5,000 palavras.
2. Envie app_en.arb no app ou envie-o pela linha de comando, abaixo.
3. Diga em uma frase o que você precisa.
Translate this file into French, German and Spanish.
Leave the @ metadata entries alone. Set @@locale to the target language.
A frase define o que será traduzido em todo o arquivo. Uma regra de redação, como “mantenha cada {placeholder} e a sintaxe de plural do ICU exatamente como estão” ou “use um tom informal”, deve ser incluída no segundo campo durante a aprovação, pois é aplicada a cada mensagem à medida que ela é escrita.
4. Adicione um glossário com o nome do app, os nomes dos recursos e os termos que o app sempre usa da mesma forma. Veja como criar um.
5. Confira o plano e escolha um nível de qualidade.
Lite oferece cerca de três vezes mais palavras por crédito e é mais rápido. É ideal para uma primeira versão em uma nova localidade. Standard é para as strings que as pessoas veem primeiro. Um crédito equivale a uma palavra no Standard.
6. Aprove e baixe.
7. Coloque os arquivos em lib/l10n, junto de app_en.arb, e execute:
flutter gen-l10n
Um arquivo, várias localidades
Os nomes dos arquivos e as quantidades são apenas exemplos. Um arquivo ARB contém um idioma, então cada localidade precisa de seu próprio arquivo.
Três maneiras de usar
Pela linha de comando é a opção que os desenvolvedores Flutter mantêm, porque ela é executada novamente a cada lançamento:
id=$(aiglot batches create lib/l10n/app_en.arb \
--instruction "Translate into French. Leave the @ metadata entries alone. Set @@locale to the target language." \
--json | jq -r '.data.id')
aiglot batches get "$id" --json | jq '.data.plan'
aiglot batches approve "$id" --quality lite \
--instructions "Keep every {placeholder} and ICU plural syntax exactly as written."
aiglot batches download "$id" --output lib/l10n/app_fr.arb
Com seu agente de IA: conecte o AI Glot como um servidor MCP. O agente pode ler seu projeto, sugerir termos para o glossário, executar o trabalho, salvar os arquivos em lib/l10n e rodar flutter gen-l10n para você.
No app: envie, clique e baixe. Ideal para uma tarefa pontual.
Para integrar via API, consulte a documentação da API.
Em Preços, você encontra os valores para volumes maiores. Uma conta gratuita inclui créditos para processar um arquivo real.
Os limites citados aqui são os que estavam em vigor quando este texto foi escrito: 8 MB por arquivo ARB e 2 MB e 5,000 palavras na ferramenta gratuita. Os valores padrão do Flutter vêm da documentação do próprio Flutter e podem mudar. A lista do DeepL vem da documentação dele. Os nomes de arquivos e as contagens de strings nos diagramas são exemplos. Seu plano mostra os números reais do seu arquivo, e a consulta é gratuita.
