O que Configuração de i18n no Next.js (nextjs-i18n-setup) faz?
Inicializa e organiza next-intl em um projeto Next.js existente que usa App Router, empregando next/root-params moderno, o segmento dinâmico app/[locale]/ e Next.js 16+ (proxy.ts) / Next.js <=15 (middleware.ts).
[!TIP] Boilerplate e Modelos: Consulte
references/templates.mdpara modelos de código prontos para uso ao criar arquivos. Execução Rápida: Delegue a verificação a um subagente leve (Model: 'flash').
1. Regras e Requisitos Arquiteturais
- Contrato de Metadados: Garanta que
docs/project.jsoncontenha:"dictionaries_dir": "messages", "dictionary_file_pattern": "[locale].json" - Interceptador de Versão do Next.js:
- Next.js 16+: Use
proxy.ts(ousrc/proxy.ts). Migre e remova qualquermiddleware.tslegado. - Next.js <=15: Use
middleware.ts(ousrc/middleware.ts).
- Next.js 16+: Use
- Root Params Moderno: Use
next/root-params(await rootParams.locale()) emi18n/request.ts. O uso derequestLocaleesetRequestLocale()é proibido. - Navegação: Exporte
Link,redirect,usePathname,useRouterdei18n/navigation.ts(TypeScript puro, sem JSX). - Geração Estática: O layout raiz
app/[locale]/layout.tsxDEVE exportargenerateStaticParams()retornando{ locale }para todos os locales suportados.
2. Checklist de Configuração
- Etapa 0: Auditoria: Verifique
docs/project.json(supported_languages) e a versão do Next.js empackage.json. - Etapa 1: Instalação: Execute
<pkg_mgr> add next-intl(ex.:pnpm add next-intl). - Etapa 2: Metadados de Configuração: Garanta
dictionaries_dir: "messages"emdocs/project.json. - Etapa 3: Roteamento: Crie
i18n/routing.tsusandodefineRouting(veja modelos). - Etapa 4: Manipulador de Requisições: Crie
i18n/request.tsusandonext/root-params(veja modelos). - Etapa 5: Helpers de Navegação: Crie
i18n/navigation.ts(veja modelos). - Etapa 6: Plugin do Next.js: Envolva
next.config.tscomcreateNextIntlPlugin()(veja modelos). - Etapa 7: Interceptador: Crie
proxy.ts(Next 16+) oumiddleware.ts(Next <=15) com seletor de filtro de assets (veja modelos). - Etapa 8: Dicionários Iniciais: Garanta que
messages/[locale].jsonexista para todos os locales suportados com as chaves base correspondentes. - Etapa 9: Migrar Layout e Rotas: Mova as rotas de nível superior para
app/[locale]/. Configuredir,lang,generateStaticParamse<NextIntlClientProvider>dinâmicos (veja modelos). - Etapa 10: Aumento de Tipos: Declare
AppConfig.Messagesemglobal.d.ts(veja modelos). - Etapa 11: Importações de Navegação: Atualize links internos em componentes existentes para usar
@/i18n/navigation. - Etapa 12: Verificação: Execute o script de verificação e a build:
pwsh .agents/skills/nextjs-i18n-setup/scripts/verify-setup.ps1 -Quiet pnpm run build
3. Modelo de Relatório de Execução da Configuração
## 🌐 Relatório de Execução da Configuração de i18n no Next.js
| Etapa / Componente | Arquivo(s) Alvo | Status | Observações |
| :------------------- | :--------------------------- | :------------------------------ | :--------------------------- |
| **Pacote** | `package.json` (`next-intl`) | `[IMPLEMENTADO]` / `[NÃO TOCADO]` | Runtime instalado |
| **Config. Projeto** | `docs/project.json` | `[IMPLEMENTADO]` / `[NÃO TOCADO]` | Diretório de mensagens config.|
| **Roteamento** | `i18n/routing.ts` | `[IMPLEMENTADO]` / `[NÃO TOCADO]` | Locales e padrão |
| **Requisição** | `i18n/request.ts` | `[IMPLEMENTADO]` / `[NÃO TOCADO]` | next/root-params |
| **Navegação** | `i18n/navigation.ts` | `[IMPLEMENTADO]` / `[NÃO TOCADO]` | Helpers TypeScript puros |
| **Plugin** | `next.config.ts` | `[IMPLEMENTADO]` / `[NÃO TOCADO]` | Envolto com withNextIntl |
| **Interceptador** | `proxy.ts` / `middleware.ts` | `[IMPLEMENTADO]` / `[NÃO TOCADO]` | Seletor de rotas |
| **Dicionários** | `messages/[locale].json` | `[IMPLEMENTADO]` / `[NÃO TOCADO]` | Dicionários iniciais |
| **Layout** | `app/[locale]/layout.tsx` | `[IMPLEMENTADO]` / `[NÃO TOCADO]` | Parâmetros estáticos & provider|
| **Tipos** | `global.d.ts` | `[IMPLEMENTADO]` / `[NÃO TOCADO]` | Aumento AppConfig |
| **Verificação** | `verify-setup.ps1` & build | `[APROVADO]` | Build limpa |