Haz tu pregunta y obtén un resumen del documento referenciando esta página y el proveedor AI de tu elección
El contenido de esta página ha sido traducido con una IA.
Ver la última versión del contenido original en inglésSi tienes una idea para mejorar esta documentación, no dudes en contribuir enviando una pull request en GitHub.
Enlace de GitHub a la documentaciónCopiar el Markdown del documento a la portapapeles
Traduce tu sitio web Next.js 15 usando next-i18next con Intlayer | Internacionalización (i18n)
Para quién es esta guía
- Junior: Sigue los pasos exactos y copia los bloques de código. Obtendrás una app multilingüe funcional.
- Intermedio: Usa las listas de verificación y las recomendaciones de buenas prácticas para evitar errores comunes.
- Senior: Revisa la estructura general, las secciones de SEO y automatización; encontrarás configuraciones predeterminadas sensatas y puntos de extensión.
Lo que construirás
- Proyecto App Router con rutas localizadas (por ejemplo,
/,/fr/...) - Configuración i18n con locales, locale por defecto, soporte RTL
- Inicialización i18n del lado servidor y un proveedor para el cliente
- Traducciones con namespaces cargadas bajo demanda
- SEO con
hreflang,sitemaplocalizado,robots - Middleware para enrutamiento por locale
- Integración con Intlayer para automatizar flujos de trabajo de traducción (tests, relleno con IA, sincronización JSON)
Nota: next-i18next está construido sobre i18next. Esta guía utiliza las primitivas de i18next compatibles con next-i18next en el App Router, manteniendo la arquitectura simple y lista para producción. Para una comparación más amplia, consulta next-i18next vs next-intl vs Intlayer.
1) Estructura del proyecto
Instala las dependencias de next-i18next -
Comienza con una estructura clara. Mantén los mensajes divididos por locale y namespace.
Lista de verificación (mid/senior):
- Mantén un JSON por namespace por locale
- No sobrecentralices los mensajes; usa namespaces pequeños, específicos por página o funcionalidad
- Evita importar todos los locales a la vez; carga solo lo que necesites
2) Instalar dependencias
Si planeas usar las APIs de next-i18next o interoperabilidad de configuración, también:
3) Configuración principal de i18n
Define los locales, el locale por defecto, RTL y helpers para rutas/URLs localizadas.
Nota importante: Si usas next-i18next.config.js, mantenlo alineado con i18n.config.ts para evitar desincronizaciones.
4) Inicialización de i18n del lado servidor
Inicializa i18next en el servidor con un backend dinámico que importa solo el JSON necesario del locale/namespace.
Nota intermedia: Mantén la lista de namespaces corta por página para limitar la carga. Evita paquetes globales “catch-all”.
5) Proveedor cliente para componentes React
Envuelve los componentes cliente con un proveedor que refleja la configuración del servidor y carga solo los namespaces solicitados.
Consejo para principiantes: No necesitas pasar todos los mensajes al cliente. Comienza solo con los namespaces de la página.
6) Diseño y rutas localizadas
Configura el idioma y la dirección, y pre-genera rutas por locale para favorecer el renderizado estático.
7) Página de ejemplo con uso en servidor + cliente
Traducciones (un JSON por namespace bajo src/locales/...):
Componente cliente (carga solo el namespace requerido):
Asegúrate de que la página/provider incluya solo los namespaces que necesitas (por ejemplo,
about). Si usas React < 19, memoiza los formateadores pesados comoIntl.NumberFormat.
Componente de servidor síncrono embebido bajo un límite de cliente:
8) SEO: Metadatos, Hreflang, Sitemap, Robots
Traducir contenido es un medio para mejorar el alcance. Configura el SEO multilingüe de manera exhaustiva.
Buenas prácticas:
- Establece
langydiren la raíz - Añade
alternates.languagespara cada locale (+x-default) - Lista las URLs traducidas en
sitemap.xmly usahreflang - Excluye áreas privadas localizadas (ej.,
/fr/admin) enrobots.txt
9) Middleware para el enrutamiento por locales
Detecta la locale y redirige a una ruta localizada si falta.
10) Buenas prácticas de rendimiento y experiencia de desarrollo (DX)
- Configurar
langydiren html: Hecho ensrc/app/[locale]/layout.tsx. - Dividir mensajes por namespace: Mantener los bundles pequeños (
common.json,about.json, etc.). - Minimizar la carga en el cliente: En las páginas, pasar solo los namespaces requeridos al provider.
- Preferir páginas estáticas: Usar
export const dynamic = 'force-static'ygenerateStaticParamspor locale. - Sincronizar componentes del servidor: Pasar cadenas/formateos precomputados en lugar de llamadas asíncronas en tiempo de renderizado.
- Memoizar operaciones pesadas: Especialmente en código cliente para versiones antiguas de React.
- Cache y headers: Preferir estático o
revalidatesobre renderizado dinámico cuando sea posible.
11) Testing y CI
- Añadir tests unitarios para componentes que usan
tpara asegurar que las keys existen. - Validar que cada namespace tenga las mismas claves en todas las locales.
- Mostrar las claves faltantes durante la CI antes del despliegue.
Intlayer automatizará gran parte de esto (ver la siguiente sección).
12) Añadir Intlayer encima (automatización)
Intlayer te ayuda a mantener las traducciones JSON sincronizadas, probar las claves faltantes y completarlas con IA cuando se desee.
Instala las dependencias de intlayer:
Agregar scripts al package:
Flujos comunes:
pnpm i18n:testen CI para fallar la compilación si faltan keyspnpm i18n:filllocalmente para proponer traducciones con IA para keys recién añadidas
Puedes proporcionar argumentos CLI; consulta la documentación CLI de Intlayer.
13) Solución de problemas
- Claves no encontradas: Asegúrate de que la página/proveedor liste los namespaces correctos y que el archivo JSON exista en
src/locales/<locale>/<namespace>.json. - Idioma incorrecto/destello de inglés: Verifica dos veces la detección de locale en
middleware.tsy ellngdel proveedor. - Problemas con diseño RTL: Confirma que
dirse derive deisRtl(locale)y que tu CSS respete[dir="rtl"]. - Faltan alternativos SEO: Confirma que
alternates.languagesincluya todos los locales yx-default. - Bundles demasiado grandes: Divide aún más los namespaces y evita importar árboles completos de
localesen el cliente.
14) Qué sigue
- Añade más locales y namespaces a medida que crecen las funcionalidades
- Localiza páginas de error, correos electrónicos y contenido impulsado por API
- Extiende los flujos de trabajo de Intlayer para abrir automáticamente PRs para actualizaciones de traducción
Si prefieres un starter, prueba la plantilla: https://github.com/aymericzip/intlayer-next-i18next-template.