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
O next-intl está obsoleto em 2026?
Quando a Vercel apresentou o App Router e descontinuou a i18n nativa do Pages Router, o next-intl supriu a carência rapidamente. Jan Amann ofereceu documentação exemplar e suporte pontual ao App Router, transformando a biblioteca na escolha comum da comunidade.
Por qual razão, então, reavaliar sua adequação hoje?
A arquitetura web progrediu significativamente nos últimos três anos, mas a base do next-intl permaneceu estática.
Enquanto o Next.js evoluiu em direção aos React Server Components (RSC), ao streaming e a otimizações por compilador, o next-intl ainda trata a internacionalização como uma responsabilidade de execução: enviando volumosos objetos JSON por provedores cliente, executando formatadores ICU nos navegadores e dependendo da triagem manual de namespaces para conter o crescimento do pacote.
Principais conclusões
Ritmo de desenvolvimento estabilizado:
Nos últimos 12 meses, o next-intl somou ~187 commits, focados quase que integralmente em compatibilidade com o Next.js e correções menores.
Custo de execução no cliente:
Montar o NextIntlClientProvider com useTranslations() adiciona ~12.8 KB gzipped (51 KB minificados) antes de exibir qualquer texto, quase o triplo do next-intlayer (4.3 KB).
Vazamento de conteúdo de 90%:
Em arranjos comuns, 89.8% do payload de traduções recebido por uma página pertence a outras rotas. Acessar /contact força o download de textos de /pricing e /dashboard.
Gestão manual de namespaces:
Prevenir o inchaço dos pacotes requer fragmentar e mapear namespaces rota por rota manualmente, ampliando a possibilidade de falhas em produção.
Parceria comercial:
Como parceiro oficial do Crowdin, o projeto tem poucos motivos para priorizar um comando gratuito de tradução por IA local em sua CLI.
Manutenção vs. ferramentas atuais
Atividade de commits ao longo dos últimos doze meses:
Abrir a tabela em um modal para ver todo o conteúdo claramente
Histórico recente:
amannn/next-intl: 187 commits (ajustes de compatibilidade e pequenos reparos).aymericzip/intlayer: 4.343 commits (evolução ativa em compiladores, extensões de editor, servidores MCP e motores de tradução).
Uma ferramenta consolidada pode ser confiável. Mas o ecossistema de i18n se modernizou: compiladores removem conteúdo sem referência em tempo de build, LLMs automatizam a tradução em CI e editores se integram com Language Servers (LSP) e agentes de IA. Uma arquitetura restrita ao runtime não usufrui plenamente desses avanços.
Avaliação no Next.js 16 App Router
Benchmark conduzido em uma aplicação App Router padrão com 10 rotas e 10 idiomas:
Carregamento JSON dinâmico
Carrega as traduções tardiamente em tempo de execução
JSON com escopo (namespacing)
Namespaces de tradução por página
Benchmark de Desempenho I18n
O que é essa métrica?
O tamanho total compactado em gzip do pacote da biblioteca de internacionalização. Inclui apenas o provedor e a lógica de recuperação de conteúdo após o tree-shaking e a minificação.
Por que é importante?
Um tamanho de biblioteca menor reduz a carga útil inicial de JavaScript, resultando em tempos de download e execução mais rápidos no cliente.
Ver como
Avaliado em navegadores reais com compressão gzip de produção. Informações completas no relatório de benchmark Next.js.
Pegada base da biblioteca
Peso no cliente antes de acrescentar quaisquer textos:
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Biblioteca | Gzipped | Minificado |
|---|---|---|
next-intl@4.9.1 | 12.8 KB | 51.0 KB |
next-intlayer@8.7.12 | 4.3 KB | 13.3 KB |
Peso da página e vazamento de dados
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Configuração | JS médio / pág (gz) | Vazamento idioma | Vazamento outras págs | Componente médio (gz) |
|---|---|---|---|---|
| Base (sem i18n) | 150.8 KB | 0.0% | 0.0% | 0.7 KB |
next-intl (estático) | 163.5 KB | 4.2% | 89.8% | 20.5 KB |
next-intl (dinâmico) | 163.4 KB | 9.7% | 89.9% | 20.5 KB |
next-intlayer | 152.1 KB | 0.0% | 0.0% | 7.2 KB |
Como ocorre o vazamento entre rotas
Em implementações habituais do next-intl, o layout raiz carrega todos os textos de uma única vez:
Copiar o código para a área de transferência
Ao fornecer messages ao provedor na raiz, o navegador baixa a coleção integral de mensagens em qualquer página. Quem visita /login é obrigado a carregar também as seções de ajuda, termos e dashboards.
É possível atenuar o problema dividindo arquivos JSON por namespaces. Contudo, manter essa tabela manualmente demanda esforço contínuo e gera erros frequentes.
O Intlayer soluciona isso por análise estática: o compilador do Intlayer empacota exclusivamente os textos solicitados por cada rota, reduzindo o vazamento para 0.0%.
Por que o next-intl não suporta tree-shaking
Sua API depende de buscas dinâmicas por strings em runtime:
Copiar o código para a área de transferência
Copiar o código para a área de transferência
Turbopack e Webpack não conseguem assegurar quais chaves de UserProfile serão de fato invocadas. Para não ocasionar erros, o bundler precisa empacotar o namespace por inteiro no bundle do cliente. A desestruturação do Intlayer permite ao compilador inspecionar referências concretas e suprimir campos sem utilidade. Saiba mais em otimização de bundle.
Experiência do desenvolvedor
JSON segregado vs. co-localização
Com o next-intl, os textos ficam retidos em pastas messages/ distantes do código. O Intlayer reúne as declarações de conteúdo junto aos componentes:
Copiar o código para a área de transferência
Copiar o código para a área de transferência
Copiar o código para a área de transferência
Copiar o código para a área de transferência
Copiar o código para a área de transferência
Ao mover ou remover AuthModal.tsx, as traduções associadas são ajustadas ou excluídas em conjunto.
Sugestão de código vs. segurança estrita de tipos
Definir IntlMessages no next-intl traz autocompletar baseado no arquivo de idioma principal:
Copiar o código para a área de transferência
Entretanto, apenas o idioma base é verificado. Se uma chave for excluída de pt.json, o TypeScript não emitirá avisos, seu build passará normalmente e os usuários receberão textos ausentes.
O Intlayer infere tipos a partir de todas as declarações. Com o strictMode, traduções incompletas geram erros imediatos na compilação.
Ecossistema e automação com IA
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Funcionalidade | next-intl | Intlayer |
|---|---|---|
| Extensão VS Code | ❌ Nenhuma | ✅ Extensão oficial |
| Language Server (LSP) | ❌ Nenhum | ✅ LSP dedicado |
| Servidor MCP (para agentes) | ❌ Nenhum | ✅ Servidor MCP integrado |
| Habilidades de Agente | ❌ Nenhuma | ✅ Skills prontas |
| CMS Visual em contexto | ❌ Nenhum | ✅ Gratuito & Open Source |
A presença de servidores LSP e MCP viabiliza que assistentes de codificação entendam a estrutura de conteúdo do projeto e sugiram atualizações com alta precisão.
A relação com o Crowdin
O next-intl conta com patrocínio oficial do Crowdin. Apoios financeiros são importantes para o software livre, mas direcionam prioridades: estruturado para operar como cliente de serviços TMS externos, o next-intl não prioriza ferramentas gratuitas e locais de tradução por IA na CLI.
O Intlayer disponibiliza esses recursos nativamente:
Preenchimento automático por IA local (intlayer fill):
Localiza e traduz textos ausentes utilizando suas credenciais da OpenAI, Anthropic, Mistral ou Gemini.
CMS visual auto-hospedado:
Use o CMS Intlayer para capacitar editores a ajustarem textos com gravação direta no Git.
Licença de código aberto permissiva:
Todo o pacote opera sob licença Apache 2.0.
Em quais situações o next-intl ainda é aplicável?
Se o sistema utiliza extensivamente seletores ordinais encadeados e formatos avançados, o suporte a ICU do next-intl é confiável.
Para times cujo processo de tradução já se apoia integralmente no Crowdin, a integração do next-intl é bastante fluida.
Se a aplicação atende bem aos requisitos e o tamanho do pacote não afeta o desempenho esperado, a migração não se faz urgente.
Como melhorar minha configuração atual do next-intl?
O Intlayer fornece um pacote de compatibilidade direta que replica as assinaturas de funções e hooks do next-intl (como useTranslations, getTranslations e auxiliares de navegação). Você não precisa reescrever componentes para obter as vantagens de otimização em nível de compilador.
A configuração é feita com um único comando:
Copiar o código para a área de transferência
Essa CLI interativa:
- Instala o pacote de compatibilidade
@intlayer/next-intl. - Configura aliases no empacotador para que suas importações (
next-intl,next-intl/server) apontem para o Intlayer, permitindo desinstalar a biblioteca antiga dopackage.json. - Ativa imediatamente o Language Server (LSP), a eliminação de vazamentos de dados entre páginas (tree-shaking completo) e fluxos locais de tradução por IA sem necessidade de uma refatoração pesada.
Para instruções detalhadas, veja nossos guias dedicados:
- Compatibilidade transparente: Mantenha suas chamadas
useTranslationsusando o adaptador de compatibilidade para next-intl. - Migração guiada: Converta catálogos JSON existentes em arquivos tipados por meio do nosso guia de migração next-intl.
- Abordagem híbrida: Conserve o
next-intlna renderização enquanto utiliza o Intlayer com next-intl para realizar traduções locais por IA.
Avalie o payload e vazamento do seu site com o scanner de SEO para i18n gratuito:
Leituras complementares
Comentários
Ainda sem comentários. Seja o primeiro a compartilhar seus pensamentos.
