Faça sua pergunta e obtenha um resumo do documento referenciando esta página e o provedor AI de sua escolha
Histórico de versões
- "Init history"v8.13.005/06/2026
O conteúdo desta página foi traduzido com uma IA.
Veja a última versão do conteúdo original em inglêsIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Migrando do next-intl para Intlayer
Por que migrar do next-intl para Intlayer?
Em vez de carregar enormes arquivos JSON em suas páginas, carregue apenas o conteúdo necessário. Intlayer ajuda você a reduzir o tamanho do pacote e da página em até 50%.
Criar escopos para o conteúdo da sua aplicação torna aplicações em larga escala fáceis de manter. Você pode duplicar ou excluir um diretório de recursos inteiro sem o esforço mental de revisar toda a sua base de código de conteúdo. Além disso, Intlayer é fortemente tipado para garantir a precisão do seu conteúdo.
Intlayer também é a solução desenvolvida mais ativamente no ecossistema i18n — problemas são corrigidos rapidamente, novos adaptadores de frameworks são lançados regularmente e a API principal é continuamente refinada com base em feedback do mundo real em produção.
A co-localização do conteúdo reduz o contexto necessário para Modelos de Linguagem de Grande Escala (LLMs). O Intlayer também oferece um conjunto de ferramentas como uma CLI para testar traduções ausentes, LSP, MCP e Habilidades de Agente para tornar a Experiência do Desenvolvedor (DX) muito mais suave para agentes de IA.
Automatize as traduções em seu pipeline de CI/CD usando o LLM de sua preferência pelo custo do seu provedor de IA. O Intlayer também oferece um compilador para automatizar a extração de conteúdo, bem como uma plataforma web para auxiliar com tradução em segundo plano.
Conectar enormes arquivos JSON aos componentes pode levar a problemas de desempenho e reatividade. O Intlayer otimiza o carregamento do conteúdo no momento do build (build time).
Muito mais que apenas uma solução i18n, o Intlayer fornece um editor visual auto-hospedável e um CMS completo para ajudá-lo a gerenciar seu conteúdo multilíngue em tempo real, tornando perfeita a colaboração com tradutores, redatores e outros membros da equipe. O conteúdo pode ser armazenado local e/ou remotamente.
Estratégia de Migração
A abordagem recomendada para aplicativos existentes é usar o adaptador de compatibilidade: Instale @intlayer/next-intl. Ele expõe exatamente a mesma API do next-intl, mas delega todo o trabalho de tradução, por baixo dos panos, ao Intlayer.
Você mantém intactos o useTranslations, o getTranslations, o NextIntlClientProvider e os demais usos em seus arquivos atuais — a única coisa que muda é o caminho da importação. Não há necessidade de refatorar assinaturas de funções de chamadas, estrutura de propriedades ou design dos componentes.
Com o tempo, você pode opcionalmente migrar arquivos individuais para o formato .content.ts mais rico do Intlayer para destravar o editor visual, CMS e o escopo no nível do componente — mas este passo é totalmente opcional e pode ser feito de modo incremental.
Índice
Migração Rápida
As etapas a seguir são o mínimo necessário para executar seu aplicativo next-intl existente no Intlayer, sem fazer alterações na sua base de código.
Instale as Dependências
Instale os pacotes principais do Intlayer e o adaptador de compatibilidade
@intlayer/next-intl:bashCopiar códigoCopiar o código para a área de transferência
npm install intlayer next-intlayer @intlayer/next-intl @intlayer/sync-json-pluginnpx intlayer initMantenha o
next-intlinstalado — ele ainda é exigido para o roteamento de URL (createNavigation,createMiddleware,Link,redirect,usePathname,useRouter). O adaptador de compatibilidade não substitui a camada de roteamento.Configure o Intlayer
O comando
intlayer initcria um arquivo inicialintlayer.config.ts. Atualize-o para corresponder aos seus locales existentes e direcione o pluginsyncJSONaos seus arquivos de mensagens:intlayer.config.tsCopiar códigoCopiar o código para a área de transferência
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // Adicione todos os seus locales existentes aqui ], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ // 'icu' corresponde à sintaxe de espaço reservado ICU do next-intl: {name}, {count, plural, ...} format: "icu", source: ({ locale }) => `./messages/${locale}.json`, location: "messages", }), ], }; export default config;sourcemapeia um locale para o caminho do arquivo JSON correspondente.locationdiz ao observador (watcher) do Intlayer qual pasta monitorar para alterações. A opçãoformat: 'icu'garante que espaços reservados ICU como{name}e{count, plural, one {# item} other {# items}}sejam analisados corretamente.Veja a Documentação de Configuração para a lista completa das opções disponíveis.
Integre o plugin do Intlayer ao Next.js
Envolva a sua configuração existente do Next.js com
createNextIntlPluginproveniente de@intlayer/next-intl/plugin. Este pacote aplica owithIntlayere simultaneamente registra o alias denext-intl→@intlayer/next-intl:next.config.tsCopiar códigoCopiar o código para a área de transferência
import type { NextConfig } from "next"; import { createNextIntlPlugin } from "@intlayer/next-intl/plugin"; const withIntlayer = createNextIntlPlugin(); const nextConfig: NextConfig = { /* Suas opções de configuração existentes */ }; export default withIntlayer(nextConfig);O
createNextIntlPlugin()encapsula owithIntlayer, detecta automaticamente o Webpack ou o Turbopack, anexa o observador de conteúdo (watcher), pré-compila os dicionários e, mais importante, injetar aliases de módulos, para que as chamadas atuais aoimport … from 'next-intl'redirecionem de maneira transparente ao@intlayer/next-intlem tempo de build. A importação de roteamentonext-intl/routingcontinuará a apontar para o pacote real. Não é necessário mudar o código-fonte.Você prefere utilizar o plugin puro
withIntlayerdenext-intlayer/server? Ele compilará seus dicionários, mas não adicionará o alias paranext-intl— dessa forma, será preciso renomear as importações para@intlayer/next-intlde forma manual (veja a Etapa 4).getRequestConfigou carregar arquivos de mensagens não são mais necessários. Com onext-intl, você teria que criar um arquivosrc/i18n.tsque carregava pacotes de mensagens JSON para cada requisição utilizandogetRequestConfig. Como o Intlayer compila todos os dicionários no momento do build (build-time), não há uma etapa de carregamento de mensagens por requisição. Pode excluir com segurança esse arquivo (ou manter apenas as partes referentes ao roteamento, se você continuar usandocreateNavigation).
Isso é tudo para a migração rápida. Seu aplicativo agora está sendo executado no Intlayer, mantendo intatas as importações de next-intl e a API.
Chaves de tradução tipadas — automaticamente. Com a compilação de dicionários realizada pelo Intlayer, o
useTranslationsegetTranslationstornam-se tipados no seu conteúdo autêntico. As chaves receberão preenchimento automático (autocompletar) dentro do IDE e quaisquer caminhos que não estejam corretos acabarão apontando como erros do TypeScript no período de compilação — sem que haja a necessidade de uma configuração à parte para isso.tsxCopiar códigoCopiar o código para a área de transferência
// Componente no lado cliente (Client component) — 'about' é uma chave configurada no dicionárioconst t = useTranslations("about");t("counter.label"); // ✓ autocompletart("does.not.exist"); // ✗ erro do TypeScript// Componente no lado servidor (Server component)const t = await getTranslations("about");t("counter.label"); // ✓ tipado
Migração Completa
As etapas a seguir são opcionais e podem ser feitas gradativamente. Elas desbloqueiam o conjunto completo das funcionalidades do Intlayer: editor visual, CMS, arquivos de conteúdo tipados, automação de tradução por IA e muito mais.
Renomeie Explícitamente as Importações (Opcional)
OpcionalO wrapper
createNextIntlPlugin()já realiza o apelido (aliasing) donext-intl→@intlayer/next-intldo lado do empacotador. Caso decida deixar evidente a dependência explícita dentro dos seus arquivos fonte (e em troca disso, utilizar o plugin padrão dowithIntlayerpuro), você poderá mudar as configurações de localidade com as suas próprias mãos:Mostrar todo o conteúdo da tabelaAbrir a tabela em um modal para ver todo o conteúdo claramente
Antes Depois import { useTranslations } from 'next-intl'import { useTranslations } from '@intlayer/next-intl'import { useLocale } from 'next-intl'import { useLocale } from '@intlayer/next-intl'import { NextIntlClientProvider } from 'next-intl'import { NextIntlClientProvider } from '@intlayer/next-intl'import { getTranslations } from 'next-intl/server'import { getTranslations } from '@intlayer/next-intl/server'import { getLocale } from 'next-intl/server'import { getLocale } from '@intlayer/next-intl/server'import { setLocale } from 'next-intl/server'import { setLocale } from '@intlayer/next-intl/server'import { getMessages } from 'next-intl/server'import { getMessages } from '@intlayer/next-intl/server'Sempre preserve o que diz respeito às importações ligadas a rotas provindas diretamente do verdadeiro
next-intl— o adaptador mantido para assegurar a compatibilidade não substitui o tratamento nas rotas da URL do next-intl:tsCopiar códigoCopiar o código para a área de transferência
// ✅ Mantenha essas provindas do verdadeiro 'next-intl'import { createNavigation } from "next-intl/routing";import { createMiddleware } from "next-intl/server";import { defineRouting } from "next-intl/routing";Alternativamente, usar o
defineRoutingdo@intlayer/next-intl/routingpossibilita a inserção e mesclagem auto-gerada dos seus ambientes naintlayer.config.ts.Habilite a Automação de Tradução por IA
OpcionalLogo que o sistema do Intlayer tiver sido devidamente ajustado, utilize a sua CLI (Interface de Linha de Comando) no intuito de inserir automaticamente os espaços em falta providenciados com o seu LLM (Large Language Model) predileto:
bashCopiar códigoCopiar o código para a área de transferência
# Testar traduções ausentes (adicionar ao CI)npx intlayer test# Preencher traduções ausentes usando IAnpx intlayer fillAcrescente o
OPENAI_API_KEY(ou de quem você preferir) em seu registro.envlocal e prolongue/estenda também a base do seu arquivointlayer.config.ts:intlayer.config.tsCopiar códigoCopiar o código para a área de transferência
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ format: "icu", source: ({ locale }) => `./messages/${locale}.json`, location: "messages", }), ], ai: { apiKey: process.env.OPENAI_API_KEY, // provider: "openai", // padrão // model: "gpt-4o-mini", // padrão }, }; export default config;Dê uma lida atenta nos conteúdos incluídos na Documentação da CLI do Intlayer no propósito de verificar o leque inteiro em torno destas aberturas em seu dispor.
O que pode ser excluído pós-migração
Logo que o @intlayer/next-intl estiver configurado, as estruturas do tipo boilerplate que dizem respeito ao seu app rodando next-intl podem então seguir rumo a exclusão:
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Arquivo / Padrão | Por que não é mais necessário |
|---|---|
Sua exportação contendo getRequestConfig dentro do src/i18n.ts | O Intlayer finaliza a compilação dos seus conteúdos através da técnica de "Build-Time". O per-request das interações é cortado de modo eficiente por via dessas definições. Deixe tudo como está se unicamente houver as utilidades associadas aos comandos do tipo createNavigation por lá. |
Fazendo o Call em loadMessages() / getMessages() que são embutidos pelos seus layout's | O Provider batizado de NextIntlClientProvider o qual adentra originário provido através do @intlayer/next-intl lerá este output com dados de saídas compiladas; resultando em uma desnecessária dependência pelas "Props" denominadas messages. |
Qualquer carregamento das fontes localizadas do locales/{locale}/*.json dentro desse seu design | Os pacotes que trabalham utilizando a configuração e arquitetura via JSON (JSON bundle's) seguem sendo demandados restritamente durante o tempo aonde prosseguir acionado de preferência por você o plugin syncJSON. Terminando assim as respectivas transições para as abordagens voltadas aos estilos com finalizações .content.ts, basta apenas mandar fora a pasta contendo esse antigo método de armazenamento via JSON. |
Quando você estiver pronto para ir mais além, o Intlayer descobre automaticamente todos os arquivos .content.ts e .content.json em qualquer lugar da sua base de código (por padrão, em qualquer lugar sob ./src). Basta colocar um arquivo about.content.ts ao lado do seu about/page.tsx, e o Intlayer o detectará em tempo de build sem necessidade de configuração adicional — não são necessários imports, registros ou um arquivo index central. Isso torna a co-localização das traduções com páginas e componentes totalmente fluida.
Configuração do TypeScript
O Intlayer usa aumento de módulo (module augmentation) para fornecer IntelliSense completo no TypeScript (autocompletar) para as chaves de tradução. Certifique-se de que o seu arquivo tsconfig.json inclua os tipos gerados automaticamente:
Copiar o código para a área de transferência
{ // ... Suas configurações existentes de TypeScript "include": [ // ... Suas configurações existentes de TypeScript ".intlayer/**/*.ts", // Inclui os tipos gerados automaticamente ],}Configuração do Git
Adicione o diretório gerado pelo Intlayer ao seu .gitignore:
Copiar o código para a área de transferência
# Ignora arquivos gerados pelo Intlayer.intlayerExplore Além
- Editor Visual — Gerencie traduções visualmente no seu navegador: Editor Visual Intlayer
- CMS — Externalize o conteúdo e gerencie remotamente: CMS do Intlayer
- Extensão para VS Code — Obtenha autocompletar de tradução e detecção de erros em tempo real: Extensão do VS Code para o Intlayer
- Referência da CLI — Lista completa de comandos da CLI: CLI do Intlayer
- Intlayer com Next.js — Guia completo de configuração para Next.js: intlayerwithnextjs_16.md