Como Adicionar Várias Línguas à Sua App ou Site
Para adicionar várias línguas a uma app, passe todo o texto da interface para ficheiros de tradução (um por língua), carregue-os com uma biblioteca de i18n e acrescente um seletor de idioma que memorize a escolha. Para as páginas públicas que quer encontrar na pesquisa, dê a cada língua o seu próprio URL, como /fr/, e ligue as versões com etiquetas hreflang. Depois, trate das partes que as pessoas costumam esquecer: datas, números e moedas, textos mais longos em algumas línguas, escritas da direita para a esquerda e conteúdos guardados na base de dados.
Termos que vai ouvir
- Internacionalização (i18n): preparar o código para suportar qualquer língua — sem texto fixo no código, formatação sensível ao idioma e layouts flexíveis. O «18» corresponde ao número de letras entre o i e o n.
- Localização (l10n): adaptar a app a uma língua ou mercado específico, sobretudo tradução, por vezes também moeda, imagens e textos legais.
- Locale: uma língua e, opcionalmente, uma região, como
en-GBoupt-BR.
Faça a i18n uma vez, e acrescentar cada nova língua passa a ser sobretudo trabalho de tradução.
Opções e compromissos
| Abordagem | Como funciona | Indicada para | Compromisso |
|---|---|---|---|
| Biblioteca de i18n + ficheiros de tradução (por exemplo react-i18next, next-intl, vue-i18n) | O texto fica em ficheiros JSON por idioma; os componentes procuram chaves | A maioria das apps | Refactor inicial; traduções para manter |
| Sistema de gestão de traduções (por exemplo Crowdin, Lokalise, Phrase) | Editor online para tradutores, sincronizado com os seus ficheiros | Muitas línguas, vários tradutores | Pago; mais uma ferramenta para configurar |
| Tradução automática ou por IA no momento da compilação | Gera traduções preliminares com uma API, depois revê | Chegar depressa a muitas línguas | A qualidade precisa de revisão; custos de API |
| Tradução automática do navegador ou de um widget | O navegador do visitante traduz a página em tempo real | Nada que controle | Sem controlo de qualidade; as páginas traduzidas não são indexadas como suas |
| Sites separados por língua | Um site duplicado por mercado | Mercados muito diferentes | Tudo mantido duas vezes |
Para a maioria das apps, uma biblioteca de i18n padrão com ficheiros de tradução é a base certa. Faça rascunhos de tradução com tradução automática ou por IA, se quiser, e depois peça a falantes fluentes que revejam o que os clientes veem com mais frequência.
As partes de uma app multilingue
Ficheiros de tradução
Em vez de <h1>Bem-vindo de volta</h1>, o código diz t('dashboard.welcome'), e cada idioma tem um ficheiro com o texto:
{
"dashboard": {
"welcome": "Bem-vindo de volta, {{name}}",
"items_one": "{{count}} item",
"items_other": "{{count}} itens"
}
}
Use marcadores para as variáveis em vez de juntar fragmentos de frases — a ordem das palavras varia entre línguas. E use as regras de plural da biblioteca: o inglês tem duas formas (1 item, 2 items), mas algumas línguas têm três, quatro ou mais.
Formatar datas, números e dinheiro
Não formate estes valores à mão. A API Intl incluída no navegador formata para qualquer locale: 1,234.5 em inglês é 1.234,5 em alemão; as datas mudam entre dia-primeiro e mês-primeiro; os símbolos das moedas mudam de posição. Guarde as datas em UTC e o dinheiro como números com um código de moeda, e formate apenas para apresentação.
Layout que se adapta
O texto traduzido costuma ser mais longo do que em inglês — sobretudo em alemão e finlandês. Evite botões de largura fixa e rótulos cortados, e teste com a língua mais longa.
Línguas da direita para a esquerda
O árabe, o hebraico, o persa e o urdu lêem-se da direita para a esquerda. Defina dir="rtl" na página para esses locales e use propriedades lógicas de CSS (margin-inline-start em vez de margin-left; no Tailwind, ms-4 em vez de ml-4) para que o layout se espelhe sozinho. Os ícones que indicam direção, como setas, também precisam de ser invertidos.
Seletor de idioma e deteção
Mostre um seletor em todas as páginas, com o nome de cada língua escrito nessa própria língua («Deutsch», «Français», «العربية») e não com bandeiras — as bandeiras representam países, não línguas. Deteta o idioma preferido do navegador na primeira visita para sugerir uma versão, mas deixe a escolha explícita do visitante prevalecer e memorize-a.
URLs e SEO
Para as páginas que quer nos resultados de pesquisa, cada língua precisa do seu próprio URL. A partir de setembro de 2026, as orientações da Google para sites multilingues são:
- URLs separados por língua — os subdiretórios (
exemplo.com/fr/) são o mais simples; os subdomínios e os domínios por país também funcionam. Os parâmetros de URL (?lang=fr) não são recomendados. - Não mude de idioma apenas por cookie ou pelas definições do navegador; o rastreador da Google pode nunca ver as outras versões.
- Não redirecione automaticamente por idioma; ligue as versões entre si.
- Use hreflang para indicar à Google quais páginas são traduções umas das outras. Cada versão deve listar-se a si própria e todas as outras, senão as anotações podem ser ignoradas. Acrescente
x-defaultpara a página de recurso. - A Google deteta o idioma de uma página pelo conteúdo visível, não pelo
langnem pelo hreflang — por isso traduza a página inteira, não apenas o menu.
Defina na mesma <html lang="fr"> em cada versão: os leitores de ecrã usam-no para escolher a pronúncia correta, o que é um requisito de acessibilidade.
As telas da app com sessão iniciada não precisam de ser indexadas, por isso, para essas, guardar o idioma no perfil do utilizador é suficiente. Veja SEO para sites criados com IA para conseguir que as páginas públicas sejam rastreadas.
Conteúdo na base de dados
O texto da interface fica em ficheiros; conteúdos como nomes de produtos, artigos de blogue e categorias ficam na base de dados. Dois padrões comuns:
- Uma tabela de traduções:
product_translations (product_id, locale, name, description). Limpa e escalável para muitas línguas. - Uma coluna JSON por campo:
name: {"en": "...", "fr": "..."}. Mais simples para poucas línguas.
Decida o que acontece quando falta uma tradução — normalmente, recorra à língua predefinida em vez de mostrar um espaço em branco.
Emails e notificações
Guarde o idioma de cada utilizador e use-o também nos emails, nas notificações e nos PDF. É fácil traduzir a app e esquecer que o email de boas-vindas continua a chegar em inglês.
Prompts que funcionam
Adicione internacionalização com react-i18next. Mova cada texto visível para o utilizador para locales/en.json com chaves organizadas por espaços de nomes, use interpolação e regras de plural em vez de concatenar texto, e formate datas, números e preços com Intl usando o locale atual. Ainda não mude nenhuma redação.
Adicione francês e alemão. As páginas de marketing públicas recebem os prefixos de URL /fr/ e /de/, com o inglês na raiz, links hreflang em cada página (incluindo a autorreferência e x-default), e html lang definido em cada página. Adicione um seletor de idioma que mostre o nome nativo de cada língua. Nas páginas com sessão iniciada, guarde o idioma no perfil do utilizador.
Adicione árabe com suporte da direita para a esquerda: defina dir="rtl" para o árabe, substitua as margens e os paddings esquerda/direita por propriedades lógicas, espelhe os ícones direcionais e confirme que os formulários e as tabelas continuam a ler-se corretamente.
Passo a passo
- Escolha a primeira língua extra com base na procura real — onde estão os seus visitantes ou clientes.
- Internacionalize o código: mova os textos para ficheiros, acrescente plurais e formatação com
Intl. Lance isto apenas com inglês e confirme que nada mudou. - Defina a estrutura de URLs das páginas públicas e acrescente hreflang.
- Traduza: faça um rascunho com tradução automática ou por IA e depois reveja com um falante fluente. Dê contexto aos tradutores — uma palavra como «Book» é um substantivo num ecrã e um verbo noutro.
- Traduza o conteúdo da base de dados e defina as alternativas.
- Localize o resto: emails, mensagens de erro, páginas legais, imagens com texto.
- Teste cada língua em largura de telemóvel e, se for relevante, da direita para a esquerda.
- Crie um processo para que as novas funcionalidades cheguem com traduções, e não meses depois.
Erros comuns
- Concatenar frases (
"Tem " + n + " mensagens"), o que parte noutras línguas. - Texto fixo deixado nos componentes, em mensagens de erro e em textos de validação.
- Formatar datas e preços manualmente.
- Bandeiras para representar línguas, e redirecionamentos automáticos que prendem as pessoas na versão errada.
- Um único URL para todas as línguas nas páginas que quer indexadas.
- Faltar os links de retorno hreflang, pelo que a Google ignora as anotações.
- Traduzir a interface mas não o conteúdo, ou o contrário.
- Tradução automática não revista em páginas de preços, legais ou de pagamento.
Lista de verificação multilingue
- Nenhum texto visível para o utilizador escrito diretamente no código; plurais e marcadores usados
- Datas, números e moedas formatados com
Intl - Seletor de idioma com nomes nativos em todas as páginas; escolha memorizada
- URLs separados por língua para as páginas públicas; sem redirecionamentos forçados
- hreflang em cada versão, incluindo a autorreferência e x-default
-
html lang(edir="rtl"quando necessário) definido por página - Conteúdo da base de dados traduzido, com alternativas sensatas
- Emails e notificações enviados no idioma do utilizador
- Texto para clientes revisto por um falante fluente
Várias línguas na Mythex
Na Mythex, acrescenta línguas pedindo-o no chat — não existe um painel de tradução separado — por isso os prompts acima funcionam tal como estão escritos. Faça primeiro o passo de internacionalização e verifique-o em Preview antes de acrescentar línguas; é uma refatorização grande, e um checkpoint no chat dá-lhe um ponto para voltar atrás se algo falhar (chat e checkpoints). Se quiser que a app traduza conteúdos automaticamente com uma IA ou uma API de tradução, isso usa a sua própria chave de API, guardada nas definições do projeto (variáveis de ambiente e segredos); como usar APIs de LLM explica os custos. Publique de novo quando as novas línguas estiverem prontas.
Perguntas
Qual é a diferença entre i18n e localização?
A internacionalização (i18n) é preparar o código para suportar muitas línguas: sem texto fixo no código, datas e números adaptados ao idioma, e layouts que aguentam palavras mais longas e escritas da direita para a esquerda. A localização (l10n) é o trabalho de adaptar tudo para uma língua ou mercado específico, sobretudo a tradução.
Posso simplesmente usar tradução automática ou IA para traduzir a minha app?
Para um primeiro rascunho, sim: a tradução automática e por IA atuais são boas para texto de interface. Peça a um falante nativo fluente que reveja tudo o que os clientes vêem, sobretudo textos legais, preços e textos de marketing, porque o tom e os pequenos erros importam aí.
Cada língua deve ter o seu próprio URL?
Para as páginas públicas que quer que apareçam nos resultados de pesquisa, sim. A Google recomenda URLs separados por língua, como /fr/ e /de/, em vez de mudar de idioma por cookie ou pelas definições do navegador, porque o rastreador pode ficar sempre com uma só versão.
Devo redirecionar os visitantes com base no idioma do navegador?
Sugira, não imponha. A Google desaconselha redirecionamentos automáticos por idioma, porque podem impedir as pessoas e os rastreadores de chegar às outras versões. Mostre uma pequena mensagem a oferecer o idioma correspondente e um seletor visível em todas as páginas.