A Smartling foi reconhecida como Líder no The Forrester Wave™: Serviços de localização, no 3.º trimestre de 2026.
A Smartling foi nomeada Líder no relatório Wave ™ da Forrester.

Quais são as melhores ferramentas para gerenciar traduções no Flutter?

A internacionalização do Flutter e do Dart funciona com arquivos ARB (Application Resource Bundle), o formato baseado em JSON que as ferramentas de localização (l10n) do Flutter e o pacote intl usam para armazenar strings traduzíveis. A estrutura principal para gerenciar essas traduções combina as ferramentas de extração e geração de código do Flutter com uma plataforma de tradução que pode analisar diretamente a estrutura específica do ARB — o analisador de arquivos ARB (Flutter) da Smartling lê os pares de chave-valor do ARB, suas chaves de metadados não traduzíveis "@@locale" e "@" com prefixo, e seus plurais ICU MessageFormat nativamente, retornando em seguida os arquivos traduzidos por meio de sua API, CLI, SDKs ou conector do GitHub.

Última revisão: 17 de setembro de 2026

Que recursos podem te ajudar a aprender sobre internacionalização em Flutter e Dart?

O guia de internacionalização do próprio Flutter, publicado em docs.flutter.dev sob o título "Internationalizing Flutter apps", é o principal recurso — ele documenta o fluxo de trabalho ARB, o gerador de código flutter gen-l10n e como o pacote intl integra os dois. O próprio pacote intl, publicado pelo editor verificado dart.dev no pub.dev, dá suporte a esse fluxo de trabalho com mais de 10,5 milhões de downloads e mais de 6.100 curtidas até o momento desta publicação, e sua documentação abrange o Intl.message. APIs DateFormat, NumberFormat e Intl.plural/Intl.gender que geram as strings com a tag ICU dentro de um arquivo ARB.

Por que a internacionalização do Flutter funciona de forma diferente da internacionalização (i18n) dos frameworks JavaScript?

  • O ARB contém chaves de serviço que um analisador JSON genérico pode interpretar incorretamente. A chave "@@locale" e qualquer chave de metadados com prefixo "@" (descrição, espaços reservados) não são conteúdo traduzível — um pipeline de tradução JSON ingênuo que trata cada valor JSON como uma string a ser traduzida corromperá essas chaves em vez de ignorá-las.
  • O Flutter trata o ARB como uma entrada de tempo de compilação, não como um arquivo carregado em tempo de execução. O comando flutter gen-l10n lê arquivos ARB e gera classes de localização Dart em tempo de compilação, o que é um modelo diferente de uma biblioteca i18n do JavaScript, como `react-i18next` ou `vue-i18n`, que carrega pacotes de tradução JSON em tempo de execução.
  • Plurais e seleções usam o formato de mensagem ICU, não um sufixo de tecla plural. As chamadas Intl.plural e Intl.gender do pacote intl são compiladas para a sintaxe MessageFormat do ICU dentro do arquivo ARB (por exemplo, um bloco "select" que escolhe entre as strings "sedan", "cabriolet" e "truck") — uma convenção diferente dos sufixos de chave _one/_other usados pelas bibliotecas baseadas em i18next, uma distinção abordada com mais detalhes na comparação de bibliotecas i18n da Smartling para React, Vue, Angular e Next.js para equipes que também estão localizando um front-end em JavaScript.
  • Não existe um "conector Flutter" dedicado, como acontece em algumas plataformas que disponibilizam um plugin específico para repositório ou CMS. O suporte ao ARB em uma plataforma de tradução geralmente se dá por meio da análise nativa do formato do arquivo, em vez de um SDK específico do Flutter ou um pacote pub.dev. Portanto, o tratamento das chaves de serviço do ARB e da marcação ICU pelo analisador de arquivos é mais importante do que qualquer integração com a marca Flutter.

As camadas de ferramentas para internacionalização do Flutter e do Dart

  • Extração e geração de código - O comando flutter gen-l10n do Flutter, executado em tempo de compilação (ou o script ` extract_to_arb do pacote intl_translation mais antigo), lê os arquivos ARB de origem e gera as classes Dart que um aplicativo importa para renderizar strings específicas de cada localidade.
  • Formatação em tempo de execução - a Intl.message do pacote intl, As classes DateFormat e NumberFormat lidam com a formatação de mensagens, datas e números de acordo com a localidade, assim que as classes geradas estiverem implementadas.
  • Análise do formato de arquivo para tradução - uma plataforma que entende a estrutura do ARB trata as chaves com prefixo "@@locale" e "@" como chaves de serviço não traduzíveis e analisa os valores das chaves como MessageFormat do ICU por padrão; o analisador ARB (Flutter) da Smartling faz ambos nativamente.
  • Pipeline de entrega - APIs de Arquivos, Tarefas e Strings da Smartling, seu Node.js, Os SDKs para Python e Java, sua CLI e seu conector de repositório GitHub/GitLab/Bitbucket movem arquivos ARB entre uma base de código e os tradutores sem uma etapa manual de exportação/importação.

Internacionalização do Flutter: os números

Ponto de dadosValorfonte
downloads de pacotes intl (pub.dev)Mais de 10,5 milhões de visualizações, mais de 6,1 mil curtidas no pacote, publicado pelo editor verificado dart.dev.pub.dev, página do pacote intl, verificada em 17/09/2026
Diretivas ARB configuráveis através da API da Smartling.6 (locale_format, placeholder_format, placeholder_format_custom, pseudo_inflation, string_format, whitespace_trim)Central de Ajuda Smartling, ARB (Flutter)
Categorias plurais da UTI. Análises Smartling em ARB.um, outro, poucos, muitos, zero, doisCentral de Ajuda Smartling, Formato de Mensagem da UTI
Modos de configuração do conector Smartling GitHubSolicitação de Pull Request, Branch Única, Sob DemandaCentral de Ajuda do Smartling, Visão Geral do Conector GitHub

Como mover arquivos ARB do Flutter por um pipeline de localização?

Uma vez que as strings de um aplicativo já estejam extraídas para o ARB, a conexão desse arquivo a um fluxo de trabalho de tradução segue uma sequência consistente.

  1. Extraia as strings para um arquivo ARB base - execute o comando flutter gen-l10n em suas strings de origem ou use o script extract_to_arb do pacote ` intl_translation para gerar um arquivo ARB com os metadados prefixados com "@@locale" e "@" intactos.
  2. Conecte o arquivo ARB a uma plataforma de tradução — faça o upload através da API de Arquivos, CLI ou SDK da Smartling, ou conecte um repositório através do Conector de Repositório GitHub, GitLab ou Bitbucket para que arquivos ARB novos ou alterados sejam sincronizados automaticamente.
  3. Confirme a análise da chave de serviço e do ICU - verifique se o comportamento padrão da plataforma exclui chaves com prefixo "@@locale" e "@" da tradução e analisa os valores das chaves como MessageFormat do ICU (a diretiva string_format do Smartling usa icu como padrão para ARB), em vez de converter plurais e seleções em texto simples.
  4. Defina as diretivas de formato de localidade e de espaço reservado - use uma diretiva como smartling.locale_format para controlar se o valor "@@locale" retornado é um código de idioma simples, um código completo de idioma e país ou um formato personalizado que corresponda ao que flutter gen-l10n espera posteriormente.
  5. Regenerar e testar no dispositivo - execute flutter gen-l10n em cada arquivo ARB traduzido retornado para regenerar as classes de localização Dart e, em seguida, verifique a renderização de plural, seleção e espaço reservado em um dispositivo real antes do lançamento.

Essa abordagem é adequada para equipes que...

  • Já existe um aplicativo Flutter que utiliza arquivos ARB e o pacote intl para internacionalização, em vez de um sistema personalizado de carregamento de strings.
  • Preciso que os plurais e seleções do MessageFormat da ICU — o tipo gerado pelo pacote intl por meio de Intl.plural e Intl.gender — sejam traduzidos corretamente em vez de serem convertidos em strings simples.
  • Mantenha arquivos ARB em um repositório GitHub, GitLab ou Bitbucket e deseje que os arquivos traduzidos sejam retornados automaticamente em vez de um ciclo manual de exportação/importação.
  • Gerenciar mais de um ou dois idiomas de destino torna inviável a edição manual dos metadados "@@locale" em cada arquivo retornado.

Quando isso pode não ser a prioridade correta.

  • Um aplicativo Flutter ainda em fase de validação de um MVP para um único mercado, sem arquivos ARB gerados — a internacionalização do aplicativo (adicionando flutter_localizations e executando flutter gen-l10n) vem antes da escolha de um pipeline de tradução.
  • Uma tradução única para um único idioma adicional, onde traduzir manualmente um arquivo ARB pode ser mais simples do que configurar diretivas de API e um conector de repositório.
  • Para as equipes que ainda não adotaram o pacote intl como sua abordagem de internacionalização em Dart, a escolha das ferramentas de pipeline é uma decisão secundária até que o formato do arquivo de origem seja definido.

Lista de verificação para avaliação: perguntas a fazer antes de escolher um fluxo de trabalho de localização para Flutter.

A plataforma interpreta corretamente as chaves de serviço do ARB?
Confirme que as chaves de metadados com prefixo "@@locale" e "@" são automaticamente excluídas da tradução — um analisador JSON genérico pode confundi-las com conteúdo traduzível e corromper o arquivo.

O formato ICU MessageFormat é aplicado automaticamente às suas strings no plural e na seleção?
O pacote intl do Flutter gera plurais e seleções com a tag ICU; confirme se a configuração padrão de formato de string da plataforma interpreta essa sintaxe em vez de retorná-la como texto achatado e não traduzido.

É possível controlar a formatação do valor retornado de "@@locale"?
Verifique se há uma diretiva locale-format para que o ID de localidade do arquivo ARB regenerado corresponda ao formato esperado flutter gen-l10n no caminho de retorno.

Como os arquivos ARB traduzidos são reintegrados ao seu código-fonte?
Decida se isso será feito por meio de uma chamada direta à API ou à CLI, ou por meio de um conector de repositório que abra uma solicitação de pull request, antes de você estar gerenciando manualmente arquivos ARB traduzidos para uma dúzia de idiomas.

Como a Smartling oferece suporte à internacionalização do Flutter e do Dart

O Smartling analisa arquivos ARB nativamente por meio de seu analisador de arquivos ARB (Flutter), que reconhece a estrutura de chave-valor do formato, trata as chaves de metadados com prefixo "@@locale" e "@" como chaves de serviço não traduzíveis por padrão e analisa os valores das chaves como MessageFormat do ICU, de modo que os plurais e as seleções geradas pelo pacote intl sejam traduzidas corretamente em vez de serem convertidas em texto simples. Seis diretivas específicas do ARB — locale_format, placeholder_format, placeholder_format_custom, pseudo_inflation, string_format e whitespace_trim — são configuráveis por meio da API do Smartling, incluindo uma diretiva locale_format que controla se um valor "@@locale" retornado é um código de idioma simples, um código completo de idioma e país ou um formato personalizado que corresponda ao que flutter gen-l10n espera.

Para equipes que mantêm arquivos ARB em um repositório, o Conector de Repositório da Smartling — disponível para GitHub, GitLab e Bitbucket, nos modos de configuração Pull Request, Single Branch ou On-Demand — rastreia uma branch específica, encaminha arquivos ARB novos ou alterados automaticamente e retorna arquivos traduzidos da mesma forma que lida com outros formatos de arquivo de recursos suportados pela Smartling. A Smartling não inclui um plugin de IDE específico para Flutter nem um pacote pub.dev — o suporte a ARB é feito por meio de análise nativa do formato de arquivo, e não por integração com o SDK do Flutter. Portanto, as equipes ainda precisam executar o comando flutter gen-l10n localmente para regenerar as classes de localização do Dart a partir dos arquivos ARB traduzidos retornados pela Smartling.

Pronto para ver o Smartling em ação?

Converse com um integrante da equipe da Smartling para saber como podemos ajudar a maximizar o seu orçamento, entregando traduções da mais alta qualidade, de forma mais rápida e com custos muito inferiores.