Os arquivos de idioma de um app são uma única tarefa em treze extensões de arquivo. Você está com um arquivo JSON, um strings.xml, um arquivo PO ou um String Catalog e quer as mesmas strings em mais cinco idiomas sem comprometer a compilação.
O formato muda. A tarefa, não: mantenha as chaves, preserve os placeholders, traduza os valores e repita tudo no próximo lançamento.
Qual opção você deve usar?
| Ideal para | Limitações | |
|---|---|---|
| AI Glot | Qualquer um dos formatos abaixo, vários idiomas em uma única tarefa, um glossário que precisa ser seguido e cada lançamento | Desnecessário para dez strings |
| Uma plataforma de gerenciamento de tradução (Crowdin, Lokalise, Phrase) | Uma equipe com fluxo de trabalho contínuo, revisores e integração com um repositório | Você precisa configurar um projeto e conectar seu repositório antes de traduzir a primeira string |
| DeepL | Arquivos XLIFF de até 10 MB | Aceita XLIFF, mas não os outros formatos desta lista. Além disso, substitui termos do glossário sem entender por que eles são fixos |
| ChatGPT, Claude ou outro assistente | Algumas strings | Você precisa escrever o prompt e incluir o glossário em cada conversa. Um arquivo longo é gerado token por token, lentamente, e consome seu limite de uso. A cada execução, há o risco de uma chave mudar ou um placeholder ficar corrompido |
| Um freelancer ou uma agência | A página da App Store e a integração inicial do app | É lento, cobrado por palavra, e você ainda precisa preparar os arquivos |
Pague uma pessoa para traduzir as cinco strings que vendem seu app: a descrição na loja e a primeira tela. Deixe as milhares de strings que vêm depois por conta de um mecanismo.
Escolha seu arquivo
Cada formato tem uma página própria, com uma ferramenta gratuita e todos os detalhes. Veja o principal sobre cada um.
| Arquivo | Onde fica | O que você precisa saber |
|---|---|---|
| JSON | locales/en.json |
As chaves são devolvidas na mesma ordem. Placeholders como {count} são preservados conforme suas instruções |
| ARB (Flutter) | lib/l10n/app_en.arb |
As entradas de metadados @ são copiadas. Defina @@locale para o idioma de destino |
| YAML | config/locales/en.yml |
Placeholders no estilo Rails, como %{name}, são identificados. Os comentários são removidos quando o arquivo é salvo novamente |
| TOML | i18n/en.toml (Hugo) |
Apenas os valores de texto mudam. Em geral, os comentários são mantidos |
| XLIFF | exportações das suas ferramentas | Versões 1.2 e 2.0. As tags inline são reconstruídas a partir do original |
| PO e POT | locale/fr/LC_MESSAGES/app.po |
As entradas no plural recebem as formas do idioma de destino, e o cabeçalho Plural-Forms é reescrito |
| Qt Linguist | app_fr.ts |
Mensagens no plural (numerus) ainda não são traduzidas. Execute lrelease depois |
| String Catalog | Localizable.xcstrings |
Todos os idiomas ficam em um único arquivo. Substituições e variações por dispositivo são mantidas como estão |
| iOS .strings | fr.lproj/Localizable.strings |
O arquivo é devolvido em UTF-8, com os blocos de comentários preservados. Os plurais de .stringsdict também são tratados |
| Android XML | res/values-fr/strings.xml |
Plurais e listas de strings são tratados. O atributo translatable="false" é respeitado |
| RESX e RESW | Resources.fr.resx |
Você recebe um arquivo por idioma. Os comentários do desenvolvedor permanecem em inglês |
| Java .properties | messages_fr.properties |
Apenas UTF-8. Antes, coloque em uma única linha qualquer valor que continue na linha seguinte |
Os formatos não organizam os idiomas da mesma forma. Um String Catalog mantém todos os idiomas em um único arquivo. A maioria dos outros formatos, incluindo JSON, Android e iOS, mantém um idioma por arquivo, então cada idioma de destino fica em seu próprio arquivo.
Como fica um arquivo traduzido
Só os valores mudam.
{ "cart.title": "Your cart", "cart.title": "Votre panier", "cart.items": "{count} items", "cart.items": "{count} articles", "cart.checkout": "Go to checkout" "cart.checkout": "Passer à la caisse"}O fluxo de um arquivo
- 1UploadO arquivo originalOu um ZIP com vários arquivos
- 2Diga o que você precisaIdiomas e escopoGrátis
- 3Leia o planoStrings, palavras, custoGrátis
- 4AprovarA única etapa com custoConsome créditos
- 5BaixarUm arquivo por idiomaÉ só enviar
Nada é cobrado antes da etapa quatro, e corrigir um plano inadequado não custa nada.
Como fazer, passo a passo
1. Teste um arquivo grátis. Cada página de formato tem uma ferramenta gratuita que não exige cadastro.
2. Envie o arquivo pelo app ou pela linha de comando, explicada mais adiante.
3. Diga em uma frase o que você precisa.
Translate this file into French.
Skip every key that starts with "internal.".
A frase define o que será traduzido em todo o arquivo. Regras sobre a redação em si, como “mantenha cada {placeholder} exatamente como está” ou “use linguagem informal”, devem ser inseridas no segundo campo durante a aprovação, pois são aplicadas a cada string conforme ela é escrita.
4. Adicione um glossário com o nome do produto, os nomes dos recursos e as palavras que seu app sempre usa da mesma forma. Veja como criar um.
5. Escolha um nível de qualidade.
Lite rende cerca de três vezes mais palavras por crédito e é mais rápido. É ideal para o conjunto extenso de configurações e textos de ajuda. Standard é para as strings que a pessoa usuária lê primeiro. Um crédito equivale a uma palavra no Standard.
6. Aprove e baixe.
Um arquivo, vários idiomas
Os nomes dos arquivos são apenas um exemplo. Para processar uma pasta inteira de arquivos de localização, coloque-os em um ZIP: até 200 arquivos e 20 MB são processados em uma única tarefa.
Três maneiras de usar
A linha de comando é a opção que os desenvolvedores mantêm. São as mesmas quatro etapas, em um script:
# 1. Create the job. Free. Returns a plan and an id.
id=$(aiglot batches create locales/en.json \
--instruction "Translate into French. Skip every key that starts with internal." \
--json | jq -r '.data.id')
# 2. Read the plan for free, then commit.
aiglot batches get "$id" --json | jq '.data.plan'
aiglot batches approve "$id" --quality lite \
--instructions "Keep every {placeholder} exactly as written."
# 3. When the status is completed, bring the file back.
aiglot batches download "$id" --output locales/fr.json
Com seu agente de IA: conecte o AI Glot como servidor MCP. O agente pode ler seu repositório, sugerir os termos de glossário que encontrar, adicioná-los ao seu espaço de trabalho, executar a tarefa e devolver os arquivos aos locais corretos.
No app: envie, clique e baixe. Ideal para uma tarefa pontual.
Para integrar via API, consulte a documentação da API.
Confira o resultado
Compile o app em um idioma traduzido e abra as três telas com as strings mais longas. Depois, execute o lint de sempre ou verifique se há chaves ausentes, porque uma chave alterada aparece como uma string faltando. O texto traduzido costuma ser mais longo que o original em inglês, então confira se algum botão ou rótulo está transbordando.
Em Preços, você encontra os valores para volumes maiores. Uma conta gratuita inclui créditos para processar um arquivo real.
Os limites informados aqui eram os vigentes quando este texto foi escrito: 200 arquivos e 20 MB por ZIP. O limite do DeepL vem da documentação do próprio serviço. Os nomes de arquivo e a quantidade de strings nos diagramas são exemplos. Seu plano mostra os números reais dos seus arquivos, e você pode consultá-lo gratuitamente.
