¿Qué hace Configuración de i18n en Next.js (nextjs-i18n-setup)?
Inicia y prepara next-intl en un proyecto existente de Next.js App Router utilizando los modernos next/root-params, el segmento dinámico app/[locale]/, y Next.js 16+ (proxy.ts) / Next.js <=15 (middleware.ts).
[!TIP] Plantillas y Código Base: Consulta
references/templates.mdpara obtener plantillas de código listas para usar al crear los archivos. Ejecución Rápida: Delega la verificación a un subagente ligero (Model: 'flash').
1. Reglas y Requisitos de Arquitectura
- Contrato de Metadatos: Asegúrate de que
docs/project.jsoncontenga:"dictionaries_dir": "messages", "dictionary_file_pattern": "[locale].json" - Interceptor de Versión de Next.js:
- Next.js 16+: Usa
proxy.ts(osrc/proxy.ts). Migra y elimina cualquiermiddleware.tsheredado. - Next.js <=15: Usa
middleware.ts(osrc/middleware.ts).
- Next.js 16+: Usa
- Root Params Moderno: Usa
next/root-params(await rootParams.locale()) eni18n/request.ts. El uso derequestLocaleysetRequestLocale()está obsoleto y prohibido. - Navegación: Exporta
Link,redirect,usePathname,useRouterdesdei18n/navigation.ts(TypeScript puro, sin JSX). - Generación Estática: El layout raíz
app/[locale]/layout.tsxDEBE exportargenerateStaticParams()que devuelva{ locale }para todos los locales soportados.
2. Lista de Verificación
- Paso 0: Auditoría: Revisa
docs/project.json(supported_languages) y la versión de Next.js enpackage.json. - Paso 1: Instalación: Ejecuta
<pkg_mgr> add next-intl(pnpm add next-intl). - Paso 2: Metadatos de Configuración: Asegúrate de que
dictionaries_dir: "messages"esté endocs/project.json. - Paso 3: Enrutamiento: Crea
i18n/routing.tsusandodefineRouting(ver plantillas). - Paso 4: Manejador de Solicitudes: Crea
i18n/request.tsusandonext/root-params(ver plantillas). - Paso 5: Ayudantes de Navegación: Crea
i18n/navigation.ts(ver plantillas). - Paso 6: Plugin de Next: Envuelve
next.config.tsconcreateNextIntlPlugin()(ver plantillas). - Paso 7: Interceptor: Crea
proxy.ts(Next 16+) omiddleware.ts(Next <=15) con un matcher de filtrado de assets (ver plantillas). - Paso 8: Diccionarios Iniciales: Asegúrate de que existan
messages/[locale].jsonpara todos los locales soportados con las claves base correspondientes. - Paso 9: Migrar Layout y Rutas: Mueve las rutas de nivel superior a
app/[locale]/. Configuradir,lang,generateStaticParamsdinámicos y<NextIntlClientProvider>(ver plantillas). - Paso 10: Aumento de Tipo: Declara
AppConfig.Messagesenglobal.d.ts(ver plantillas). - Paso 11: Importaciones de Navegación: Actualiza los enlaces internos en los componentes existentes para que usen
@/i18n/navigation. - Paso 12: Verificación: Ejecuta el script de verificación y la compilación:
pwsh .agents/skills/nextjs-i18n-setup/scripts/verify-setup.ps1 -Quiet pnpm run build
3. Plantilla de Informe de Ejecución
## 🌐 Informe de Ejecución de Configuración de i18n en Next.js
| Paso / Componente | Archivo(s) Objetivo | Estado | Notas |
| :------------------ | :--------------------------- | :------------------------------- | :----------------------- |
| **Paquete** | `package.json` (`next-intl`) | `[IMPLEMENTADO]` / `[SIN CAMBIOS]` | Runtime instalado |
| **Config. Proyecto**| `docs/project.json` | `[IMPLEMENTADO]` / `[SIN CAMBIOS]` | Directorio de mensajes config. |
| **Enrutamiento** | `i18n/routing.ts` | `[IMPLEMENTADO]` / `[SIN CAMBIOS]` | Locales y predeterminado |
| **Solicitud** | `i18n/request.ts` | `[IMPLEMENTADO]` / `[SIN CAMBIOS]` | next/root-params |
| **Navegación** | `i18n/navigation.ts` | `[IMPLEMENTADO]` / `[SIN CAMBIOS]` | Ayudantes TS puros |
| **Plugin** | `next.config.ts` | `[IMPLEMENTADO]` / `[SIN CAMBIOS]` | Envuelto con withNextIntl|
| **Interceptor** | `proxy.ts` / `middleware.ts` | `[IMPLEMENTADO]` / `[SIN CAMBIOS]` | Matcher de rutas |
| **Diccionarios** | `messages/[locale].json` | `[IMPLEMENTADO]` / `[SIN CAMBIOS]` | Diccionarios iniciales |
| **Layout** | `app/[locale]/layout.tsx` | `[IMPLEMENTADO]` / `[SIN CAMBIOS]` | Params estáticos y provider |
| **Tipos** | `global.d.ts` | `[IMPLEMENTADO]` / `[SIN CAMBIOS]` | Aumento de AppConfig |
| **Verificación** | `verify-setup.ps1` y build | `[EXITOSO]` | Compilación limpia |