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 os desafios comuns ao adicionar localização a projetos React Native?

A localização em React Native é mais complexa do que a localização web ou nativa isoladamente, porque um aplicativo React Native mantém suas strings em arquivos JSON formatados em JavaScript, mas é distribuído como um binário nativo para iOS ou Android. Quatro problemas se repetem como resultado: o formato plural-key do react-i18next, que o Smartling analisa apenas por meio de uma extensão MessageFormat do ICU; arquivos de recursos JSON, que não recebem contexto visual automático; expansão de strings em uma tela onde, como afirma a Visão Geral de Aplicativos Móveis do Smartling, o espaço é extremamente valioso; e correções de tradução que aguardam revisão na loja de aplicativos porque o JSON já foi incluído no pacote. Cada um desses problemas possui uma solução concreta no nível do arquivo, formato, contexto ou entrega, em vez de uma solução alternativa.

Última revisão: 21 de setembro de 2026

Por que a localização em React Native é mais difícil do que a localização nativa ou para web isoladamente?

O React Native abrange dois modelos de localização que foram projetados separadamente, e a maior parte do atrito vem da interface entre eles, e não de uma ferramenta específica.

  • O formato do recurso é web, o modelo de distribuição é nativo. Um projeto React Native armazena strings de localização em JSON, o mesmo formato usado por um aplicativo web React, mas essas strings normalmente são importadas para o pacote JavaScript e distribuídas dentro do binário. Uma tradução incorreta em um site exige uma nova implantação; em um aplicativo React Native, ela aguarda a revisão da App Store ou do Google Play, o que a Visão Geral de Aplicativos Móveis da Smartling cita diretamente como um dos motivos pelos quais manter os aplicativos localizados atualizados é difícil.
  • O formato plural de react-i18next não é ICU. react-i18next, a vinculação i18n padrão em bases de código React, herda a convenção de sufixo de chave plural do i18next. A documentação do ICU MessageFormat da Smartling afirma claramente que o formato plural do i18next não é suportado e aponta para a extensão ICU MessageFormat do próprio i18next como a forma de resolver essa lacuna — portanto, a decisão sobre o plural deve ser tomada antes da gravação das chaves, e não depois.
  • Os arquivos JSON não incluem contexto visual automaticamente. A documentação JSON da Smartling afirma que o contexto visual não é fornecido automaticamente para arquivos JSON. As alternativas usuais — a biblioteca JavaScript da Smartling e a extensão Context Capture para o Google Chrome — leem um DOM, enquanto um aplicativo React Native renderiza visualizações nativas. Portanto, uma equipe React Native precisa fornecer o contexto por meio de capturas de tela enviadas ou da API Context, em vez de uma ferramenta do navegador.
  • O upload JSON padrão captura informações em excesso. Carregado sem diretivas, o analisador JSON da Smartling captura cada valor do arquivo como uma string traduzível e usa o caminho completo do nome como dados de chave e variante. Em um pacote react-i18next real, que coleta valores de configuração, IDs e nomes de rotas juntamente com o texto da interface do usuário, a menos que translate_paths ou exclude_path os excluam.
  • O teste de comprimento funciona de forma diferente do que em sistemas nativos. Os recursos de pseudolocalização XA/XB do Android Studio e a pseudolocalização do Xcode operam em arquivos de recursos nativos, não em um pacote JSON. Para JSON, a pseudo-inflação do Smartling está disponível apenas como um argumento de upload da API — não é suportada explicitamente como uma diretiva inline — portanto, o teste de comprimento precisa ser integrado à etapa de upload, e não à compilação do aplicativo.

As quatro camadas em que uma configuração de localização do React Native é definida.

  • Camada de arquivo — define o escopo do que realmente será traduzido. Use a diretiva translate_paths para nomear os caminhos que contêm o conteúdo da interface do usuário e exclude_path para remover subcaminhos que nunca devem ser acessados por um tradutor. Definir key como {*} preserva o comportamento padrão de capturar o caminho completo da chave como metadados de variante, o que mantém uma string traduzida correspondente à chave JSON correta no caminho de retorno.
  • Camada de formatação — defina os plurais antes de escrever as chaves. Se o projeto utiliza react-intl ou outra biblioteca FormatJS, defina string_format como icu e o Smartling analisará os plurais e fará a seleção nativamente. Se usar react-i18next, adote a extensão ICU MessageFormat do i18next para que a sintaxe plural que o Smartling analisa seja a sintaxe do arquivo.
  • Camada de contexto — substitua o navegador por capturas de tela. Como o JSON não recebe contexto visual automático e as ferramentas de captura baseadas em navegador não têm uma superfície React Native para ler, o contexto vem de capturas de tela enviadas que correspondem a strings por meio de OCR, de vídeos ou da API de Contexto para um projeto em andamento.
  • Camada de entrega — decide se uma correção de string precisa de uma versão. Ao incluir o JSON traduzido no aplicativo, cada correção é vinculada a um envio para a loja de aplicativos. A busca de conteúdo localizado em tempo de execução — o caso de uso para o qual a API de Entrega de Tradução da Smartling foi criada — desvincula a correção de strings do ciclo de lançamento, ao custo de uma dependência de rede e uma estratégia de cache que a equipe precisa gerenciar.

Localização do React Native: limites de configuração verificados

Ponto de configuraçãoValor verificadofonte
Padrões de espaço reservado que o analisador JSON do Smartling reconhece sem diretiva personalizada.7 — {x}, {{x}}, ${x}, %x%, %%x%%, ##x##, __x__Central de Ajuda do Smartling, JSON
As strings ICU são geradas a partir de uma mensagem com argumentos aninhados antes de recorrer ao texto bruto.20Central de Ajuda Smartling, Formato de Mensagem da UTI
Os elementos da UTI foram capturados como texto bruto, em vez de sequências traduzíveis.3 — selectordinal, múltiplos argumentos plurais em uma única string, plural com uma propriedade de deslocamentoCentral de Ajuda Smartling, Formato de Mensagem da UTI
Pseudo-inflação para JSON (somente argumento de upload da API, não embutido)smartling.pseudo_inflação=70 aumenta as pseudotraduções em 70%Central de Ajuda do Smartling, JSON
A data em que o analisador JSON alterou a estratégia de formatação padrão para `json_format_strategy = source`, eliminando espaços entre a chave e o valor, faz com que o formato de saída padrão do analisador JSON seja alterado para `json_format_strategy = source`, evitando assim a adição de espaços entre a chave e o valor.10 de novembro de 2025Central de Ajuda do Smartling, JSON
Plataformas Git que o Repository Connector suporta3 — GitHub, GitLab, BeanstalkCentral de Ajuda da Smartling, Visão Geral do Conector de Repositório

Como conectar os arquivos de tradução de um projeto React Native a um pipeline de localização?

Conectar os arquivos de tradução de um projeto React Native envolve cinco etapas: corrigir a convenção de plural, definir o escopo do arquivo com diretivas, enviar um arquivo de teste pela CLI, automatizar o processo de ida e volta com um conector de repositório e, por fim, testar o comprimento e o contexto antes da compilação. A sequência pressupõe que as strings já estejam externalizadas em JSON específico para cada localidade.

  1. Primeiro, corrija a convenção de plural — confirme se o projeto grava chaves plurais no estilo i18next ou no formato de mensagem ICU. Se for react-i18next, adicione agora a extensão MessageFormat do ICU do i18next; converter chaves plurais depois que existirem várias centenas de strings é a versão custosa desta etapa.
  2. Defina o escopo do arquivo com diretivas — adicione um bloco translate_paths nomeando os caminhos que contêm o conteúdo da interface do usuário, um exclude_path para tudo o que não deve ser traduzido e string_format: icu se o arquivo inteiro for ICU. As diretivas embutidas devem ser o primeiro objeto no arquivo JSON, portanto, isso pertence ao arquivo de origem, não a uma etapa de compilação.
  3. Envie um arquivo de teste pela CLI — execute um comando no formato smartling-cli files push en.json --directive string_format=icu e inspecione as strings capturadas no painel antes de integrar qualquer coisa à CI. Se o projeto extrair mensagens com FormatJS ou react-intl, inclua a flag --format=smartling no comando de extração para que a saída seja formatada da maneira esperada pelo analisador.
  4. Automatize o processo de ida e volta — conecte o repositório por meio do GitHub Connector ou do Repository Connector para que os arquivos JSON alterados sejam carregados automaticamente e os arquivos traduzidos retornem como uma solicitação de pull request que passa pela revisão de código normal.
  5. Teste o comprimento e o contexto antes da compilação — solicite pseudotraduções como um argumento de upload da API para exibir a expansão da string e faça upload de capturas de tela ou vídeos para que os tradutores vejam a tela nativa em que a string é renderizada, em vez de um valor JSON isolado.

Essa abordagem é adequada para equipes que...

  • Envie um aplicativo React Native cujas strings já estejam em JSON específico para cada localidade, em vez de embutidas nos componentes.
  • Use react-i18next ou react-intl e precise de plurais para que a tradução seja feita corretamente, tanto na ida quanto na volta.
  • Mantenha os arquivos de localização em um repositório GitHub, GitLab ou Beanstalk e deseje que as traduções sejam retornadas como uma solicitação de pull revisável, em vez de uma exportação e importação manual.
  • O suporte a um número suficiente de idiomas tornou inviável a verificação manual de cada arquivo JSON retornado para detectar desvios de chave.
  • Já fomos prejudicados por um bug de tradução que permaneceu em produção enquanto uma revisão da loja de aplicativos estava em andamento, e estamos avaliando a entrega em tempo de execução versus o empacotamento.

Quando isso pode não ser a prioridade correta.

  • Um aplicativo React Native que ainda não externalizou suas strings — o trabalho de extração vem antes de qualquer decisão de pipeline, e um conector não tem nada a que se conectar até que isso seja concluído.
  • Uma única linguagem adicional sem frequência de atualizações, onde traduzir um arquivo JSON manualmente custa menos do que configurar diretivas e um conector de repositório.
  • Equipes cujos aplicativos React Native renderizam quase que inteiramente conteúdo fornecido pelo servidor, onde o problema de localização reside no pipeline de conteúdo do backend, e não nos arquivos de recursos do aplicativo.

Lista de verificação para avaliação: perguntas a fazer antes de localizar um aplicativo React Native.

Qual convenção de plural nossas chaves já utilizam?
Os sufixos plurais no estilo i18next e o MessageFormat da ICU não são intercambiáveis sem uma etapa de conversão. O Smartling não interpreta o formato plural nativo do i18next, portanto, um projeto react-i18next precisa que a extensão MessageFormat do ICU do i18next seja aplicada antes que o conjunto de chaves seja expandido.

Alguma mensagem utiliza uma estrutura que será retornada como texto bruto?
selectordinal, mais de um argumento plural em uma única string e um plural com uma propriedade de deslocamento são todos capturados como sintaxe ICU bruta. Dividir essas mensagens em mensagens mais simples geralmente é mais barato do que pedir aos tradutores que editem a sintaxe manualmente.

Como um tradutor verá na tela em que uma sequência de caracteres aparece?
O JSON não recebe contexto visual automático e as ferramentas de captura baseadas em navegador não conseguem ler a hierarquia de visualização do React Native. Decida desde o início se o contexto virá de capturas de tela, vídeos ou da API de Contexto.

Será que as nossas sequências mais longas ainda cabem no menor ecrã suportado?
Solicite traduções pseudoaleatórias como um argumento de upload da API para aumentar o comprimento da string antes que um tradutor processe o arquivo e defina um limite de caracteres para as strings de origem que ficam em interfaces de usuário compactas.

Uma correção de tradução exige uma atualização na loja de aplicativos?
Se o JSON de localização estiver incluído, a resposta é sim, e essa é uma decisão tanto de produto quanto de engenharia. A busca de traduções em tempo de execução elimina a dependência, mas adiciona o armazenamento em cache e o comportamento offline por conta própria.

Será que tratamos o layout da direita para a esquerda separadamente da tradução?
O React Native expõe uma API I18nManager para layouts da direita para a esquerda, e inverter um layout é um processo distinto da tradução das strings dentro dele.

Como a Smartling oferece suporte a um fluxo de trabalho de localização React Native

A Smartling não fornece um SDK para React Native, um pacote npm ou um plugin específico para React Native. O suporte para um projeto React Native consiste no analisador genérico de arquivos JSON, além do repositório, da CLI e da camada de API — o que corresponde à descrição geral do suporte para dispositivos móveis na Visão Geral de Aplicativos Móveis da Smartling: os formatos de arquivo padrão para dispositivos móveis são tratados de forma integrada e nenhum SDK é necessário para gerenciar arquivos de recursos em um projeto Smartling. Para uma equipe React Native, a consequência prática é que as diretivas do analisador JSON, e não a integração com o framework, são onde o trabalho de configuração acontece.

Esse analisador sintático é mais configurável do que um leitor JSON genérico. translate_paths define quais caminhos se tornam strings traduzíveis e quais se tornam instruções ou chaves do tradutor; exclude_path remove subcaminhos; character_limit limita o comprimento traduzido para cada string, definido na string de origem e aplicado a todos os idiomas, o que resolve o problema de um rótulo de botão que cabe em inglês, mas ultrapassa o limite em alemão; e variants_enabled com um caminho de chave mantém as strings únicas quando a mesma palavra em inglês aparece sob diferentes chaves. Definir string_format como icu analisa plurais e seleciona caracteres em vez de os simplificar, e a própria documentação do ICU MessageFormat da Smartling direciona os usuários do react-i18next para a extensão ICU MessageFormat do i18next para obter esse suporte.

Para mover arquivos, o Conector de Repositório da Smartling funciona com GitHub, GitLab e Beanstalk, detectando arquivos de recursos alterados e retornando as traduções para o repositório. Já a CLI da Smartling envia um arquivo com diretivas fornecidas na linha de comando para equipes que criam seus próprios scripts de etapa de compilação. Quando a restrição reside na inclusão das traduções no aplicativo, e não na transferência em si, a API Translation Delivery da Smartling surge como a opção ideal em tempo de execução: uma API de alta disponibilidade e não bloqueante, criada para a recuperação de conteúdo localizado em sites e aplicativos móveis com baixa latência, permitindo que uma alteração de texto chegue aos usuários sem a necessidade de um novo arquivo binário.

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.