Faça sua pergunta e obtenha um resumo do documento referenciando esta página e o provedor AI de sua escolha
O conteúdo desta página foi traduzido com uma IA.
Veja a última versão do conteúdo original em inglêsSe você tiver uma ideia para melhorar esta documentação, sinta-se à vontade para contribuir enviando uma pull request no GitHub.
Link do GitHub para a documentaçãoCopiar o Markdown do documento para a área de transferência
Traduza seu Next.js 15 usando next-i18next com Intlayer | Internacionalização (i18n)
Para quem este guia é destinado
- Júnior: Siga os passos exatos e copie os blocos de código. Você terá um app multilíngue funcionando.
- Pleno: Use as listas de verificação e os destaques de melhores práticas para evitar armadilhas comuns.
- Sênior: Leia rapidamente a estrutura de alto nível, SEO e seções de automação; você encontrará padrões sensatos e pontos de extensão.
O que você vai construir
- Projeto App Router com rotas localizadas (ex.:
/,/fr/...) - Configuração i18n com locais, local padrão, suporte RTL
- Inicialização i18n no servidor e um provider no cliente
- Traduções com namespaces carregadas sob demanda
- SEO com
hreflang,sitemaplocalizado,robots - Middleware para roteamento por localidade
- Integração Intlayer para automatizar fluxos de trabalho de tradução (testes, preenchimento por IA, sincronização JSON)
Nota: next-i18next é construído sobre o i18next. Este guia utiliza as primitivas do i18next compatíveis com o next-i18next no App Router, mantendo a arquitetura simples e pronta para produção. Para uma comparação mais ampla, veja next-i18next vs next-intl vs Intlayer.
1) Estrutura do projeto
Instale as dependências do next-i18next -
Comece com uma estrutura clara. Mantenha as mensagens divididas por localidade e namespace.
Checklist (nível médio/sênior):
- Mantenha um JSON por namespace por localidade
- Não centralize excessivamente as mensagens; use namespaces pequenos, escopados por página/feature
- Evite importar todas as localidades de uma vez; carregue apenas o que você precisa
2) Instalar dependências
Se você planeja usar as APIs do next-i18next ou interoperabilidade de configuração, também:
3) Configuração principal do i18n
Defina as localidades, localidade padrão, RTL e auxiliares para caminhos/URLs localizados.
Nota importante: Se você usar next-i18next.config.js, mantenha-o alinhado com i18n.config.ts para evitar divergências.
4) Inicialização do i18n no lado do servidor
Inicialize o i18next no servidor com um backend dinâmico que importa apenas o JSON necessário para a localidade/namespace.
Nota intermediária: Mantenha a lista de namespaces curta por página para limitar o payload. Evite bundles globais “catch-all”.
5) Provedor cliente para componentes React
Envolva os componentes cliente com um provedor que espelha a configuração do servidor e carrega apenas os namespaces solicitados.
Dica para iniciantes: Você não precisa passar todas as mensagens para o cliente. Comece apenas com os namespaces da página.
6) Layout e rotas localizados
Defina o idioma e a direção, e pré-genere rotas por localidade para favorecer a renderização estática.
7) Exemplo de página com uso no servidor + cliente
Traduções (um JSON por namespace em src/locales/...):
Componente cliente (carrega apenas o namespace necessário):
Garanta que a página/provider inclua apenas os namespaces que você precisa (ex:
about). Se você usar React < 19, memorize formatadores pesados comoIntl.NumberFormat.
Componente de servidor síncrono embutido sob uma fronteira de cliente:
8) SEO: Metadados, Hreflang, Sitemap, Robots
Traduzir conteúdo é uma forma de ampliar o alcance. Configure o SEO multilíngue de forma completa.
Melhores práticas:
- Defina
langedirna raiz - Adicione
alternates.languagespara cada locale (+x-default) - Liste URLs traduzidas no
sitemap.xmle usehreflang - Exclua áreas privadas localizadas (ex.:
/fr/admin) norobots.txt
9) Middleware para roteamento de locale
Detecta o locale e redireciona para uma rota localizada caso esteja ausente.
10) Melhores práticas de desempenho e DX
- Definir
langedirno html: Feito emsrc/app/[locale]/layout.tsx. - Dividir mensagens por namespace: Mantenha os bundles pequenos (
common.json,about.json, etc.). - Minimizar payload no cliente: Nas páginas, passe apenas os namespaces necessários para o provider.
- Preferir páginas estáticas: Use
export const dynamic = 'force-static'egenerateStaticParamspor locale. - Sincronizar componentes do servidor: Passe strings/formatações pré-computadas em vez de chamadas assíncronas na renderização.
- Memoizar operações pesadas: Especialmente no código cliente para versões antigas do React.
- Cache e headers: Prefira estático ou
revalidateem vez de renderização dinâmica quando possível.
11) Testes e CI
- Adicione testes unitários para componentes que usam
tpara garantir que as chaves existam. - Validar que cada namespace tenha as mesmas chaves em todas as localidades.
- Exibir chaves faltantes durante o CI antes do deploy.
O Intlayer automatizará grande parte disso (veja a próxima seção).
12) Adicionar Intlayer por cima (automação)
O Intlayer ajuda você a manter as traduções JSON sincronizadas, testar chaves faltantes e preencher com IA quando desejado.
Instale as dependências do intlayer:
Adicione scripts no package:
Fluxos comuns:
pnpm i18n:testno CI para falhar builds em caso de chaves faltantespnpm i18n:filllocalmente para propor traduções com AI para chaves recém-adicionadas
Você pode fornecer argumentos para a CLI; consulte a documentação da CLI do Intlayer.
13) Solução de problemas
- Chaves não encontradas: Verifique se a página/provedor lista os namespaces corretos e se o arquivo JSON existe em
src/locales/<locale>/<namespace>.json. - Idioma errado/piscar de inglês: Verifique novamente a detecção de locale em
middleware.tse olngdo provedor. - Problemas de layout RTL: Confirme que
diré derivado deisRtl(locale)e que seu CSS respeita[dir="rtl"]. - Alternativas de SEO ausentes: Confirme que
alternates.languagesinclui todos os locales ex-default. - Bundles muito grandes: Divida os namespaces ainda mais e evite importar árvores inteiras de
localesno cliente.
14) O que vem a seguir
- Adicione mais locales e namespaces conforme as funcionalidades crescem
- Localize páginas de erro, emails e conteúdo gerado por API
- Estenda os workflows do Intlayer para abrir PRs automaticamente para atualizações de tradução
Se preferir um starter, experimente o template: https://github.com/aymericzip/intlayer-next-i18next-template.