Haz tu pregunta y obtén un resumen del documento referenciando esta página y el proveedor AI de tu elección
Historial de versiones
- Versión inicialv7.0.61/11/2025
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
Cómo internacionalizar tu aplicación Next.js usando next-i18next en 2026
Tabla de Contenidos
¿Qué es next-i18next?
next-i18next es una solución popular de internacionalización (i18n) para aplicaciones Next.js. Mientras que el paquete original next-i18next fue diseñado para el Pages Router, esta guía te muestra cómo implementar i18next con el moderno App Router usando directamente i18next y react-i18next.
Con este enfoque, puedes:
- Organizar las traducciones usando namespaces (por ejemplo,
common.json,about.json) para una mejor gestión del contenido. - Cargar las traducciones de manera eficiente cargando solo los namespaces necesarios para cada página, reduciendo el tamaño del bundle.
- Soportar tanto componentes del servidor como del cliente con un manejo adecuado de SSR y la hidratación.
- Asegurar soporte para TypeScript con configuración de locales y claves de traducción tipadas de forma segura.
- Optimiza para SEO con metadatos adecuados, sitemap y la internacionalización de robots.txt.
Como alternativa, también puedes consultar la guía de next-intl, o usar directamente Intlayer.
Consulta la comparación en next-i18next vs next-intl vs Intlayer.
Prácticas que deberías seguir
Antes de sumergirnos en la implementación, aquí tienes algunas prácticas que deberías seguir:
- Configura los atributos HTML
langydir - En tu layout, calcula
dirusandogetLocaleDirection(locale)y establece<html lang={locale} dir={dir}>para una accesibilidad y SEO adecuados. - Divide los mensajes por namespace
Organiza los archivos JSON por locale y namespace (por ejemplo,
common.json,about.json) para cargar solo lo que necesitas. - Minimiza la carga en el cliente
En las páginas, envía solo los namespaces requeridos a
NextIntlClientProvider(por ejemplo,pick(messages, ['common', 'about'])). - Prefiere páginas estáticas Usa páginas estáticas tanto como sea posible para mejorar el rendimiento y el SEO.
- I18n en componentes del servidor
Los componentes del servidor, como las páginas o todos los componentes que no están marcados como
client, son estáticos y pueden pre-renderizarse en tiempo de compilación. Por lo tanto, tendremos que pasar las funciones de traducción a ellos como props. - Configura los tipos de TypeScript
- Para tus locales, asegúrate de la seguridad de tipos en toda tu aplicación.
- Proxy para redirección Usa un proxy para manejar la detección de locale y el enrutamiento, y redirigir al usuario a la URL con el prefijo de locale adecuado.
- Internacionalización de tus metadatos, sitemap, robots.txt
Internacionaliza tus metadatos, sitemap, robots.txt usando la función
generateMetadataproporcionada por Next.js para asegurar un mejor descubrimiento por parte de los motores de búsqueda en todos los locales. - Localiza los enlaces
Localiza los enlaces usando el componente
Linkpara redirigir al usuario a la URL con el prefijo de locale adecuado. Es importante para asegurar el descubrimiento de tus páginas en todos los locales. - Automatiza pruebas y traducciones Automatizar pruebas y traducciones ayuda a ahorrar tiempo en el mantenimiento de tu aplicación multilingüe.
Consulta nuestra documentación que lista todo lo que necesitas saber sobre internacionalización y SEO: Internacionalización (i18n) con next-intl.
Guía paso a paso para configurar i18next en una aplicación Next.js
Consulta la Plantilla de Aplicación en GitHub.
Aquí está la estructura del proyecto que crearemos:
Copiar el código al portapapeles
Instalar Dependencias
Instala los paquetes necesarios usando npm:
bashCopiar códigoCopiar el código al portapapeles
- i18next: El framework principal de internacionalización que maneja la carga y gestión de traducciones.
- react-i18next: Enlaces de React para i18next que proporcionan hooks como
useTranslationpara componentes cliente. - i18next-resources-to-backend: Un plugin que permite la carga dinámica de archivos de traducción, permitiéndote cargar solo los namespaces que necesitas.
Configura Tu Proyecto
Crea un archivo de configuración para definir tus locales soportados, el locale por defecto y funciones auxiliares para la localización de URLs. Este archivo sirve como la única fuente de verdad para tu configuración i18n y asegura la seguridad de tipos en toda tu aplicación.
Centralizar la configuración de locales previene inconsistencias y facilita añadir o eliminar locales en el futuro. Las funciones auxiliares garantizan una generación consistente de URLs para SEO y enrutamiento.
i18n.config.tsCopiar códigoCopiar el código al portapapeles
Centralizar los Namespaces de Traducción
Crea una única fuente de verdad para cada namespace que tu aplicación expone. Reutilizar esta lista mantiene sincronizado el código del servidor, cliente y herramientas, y desbloquea un tipado fuerte para los helpers de traducción.
src/i18n.namespaces.tsCopiar códigoCopiar el código al portapapeles
Tipar fuertemente las claves de traducción con TypeScript
Aumenta
i18nextpara que apunte a tus archivos de idioma canónicos (usualmente inglés). TypeScript entonces infiere las claves válidas por namespace, por lo que las llamadas at()se verifican de extremo a extremo.src/types/i18next.d.tsCopiar códigoCopiar el código al portapapeles
Consejo: Guarda esta declaración en
src/types(crea la carpeta si no existe). Next.js ya incluyesrcentsconfig.json, por lo que la ampliación se detecta automáticamente. Si no es así, añade lo siguiente a tu archivotsconfig.json:tsconfig.jsonCopiar códigoCopiar el código al portapapeles
Con esto puedes confiar en el autocompletado y las comprobaciones en tiempo de compilación:
tsxCopiar códigoCopiar el código al portapapeles
Configurar la inicialización de i18n del lado del servidor
Cree una función de inicialización del lado del servidor que cargue las traducciones para los componentes del servidor. Esta función crea una instancia separada de i18next para la renderización del lado del servidor, asegurando que las traducciones se carguen antes de la renderización.
Los componentes del servidor necesitan su propia instancia de i18next porque se ejecutan en un contexto diferente al de los componentes del cliente. Pre-cargar las traducciones en el servidor evita el parpadeo de contenido sin traducir y mejora el SEO al garantizar que los motores de búsqueda vean contenido traducido.
src/app/i18n/server.tsCopiar códigoCopiar el código al portapapeles
Crear el proveedor i18n del lado del cliente
Crea un proveedor de componente cliente que envuelva tu aplicación con el contexto de i18next. Este proveedor recibe traducciones precargadas desde el servidor para evitar el parpadeo de contenido sin traducir (FOUC) y evitar solicitudes duplicadas.
Los componentes cliente necesitan su propia instancia de i18next que se ejecute en el navegador. Al aceptar recursos precargados desde el servidor, aseguramos una hidratación fluida y prevenimos el parpadeo del contenido. El proveedor también gestiona dinámicamente los cambios de locale y la carga de namespaces.
src/components/I18nProvider.tsxCopiar códigoCopiar el código al portapapeles
Definir Rutas Dinámicas para Locales
Configura el enrutamiento dinámico para locales creando un directorio
[locale]en tu carpeta de la app. Esto permite que Next.js maneje el enrutamiento basado en locales donde cada locale se convierte en un segmento de la URL (por ejemplo,/en/about,/fr/about).El uso de rutas dinámicas permite que Next.js genere páginas estáticas para todos los locales en tiempo de compilación, mejorando el rendimiento y SEO. El componente layout establece los atributos HTML
langydirbasados en el locale, lo cual es crucial para la accesibilidad y la comprensión por parte de los motores de búsqueda.src/app/[locale]/layout.tsxCopiar códigoCopiar el código al portapapeles
Crea tus archivos de traducción
Crea archivos JSON para cada locale y namespace. Esta estructura te permite organizar las traducciones de forma lógica y cargar solo lo que necesitas para cada página.
Organizar las traducciones por namespace (por ejemplo,
common.json,about.json) permite la división de código y reduce el tamaño del paquete. Solo cargas las traducciones necesarias para cada página, mejorando el rendimiento.src/locales/en/common.jsonCopiar códigoCopiar el código al portapapeles
src/locales/fr/common.jsonCopiar códigoCopiar el código al portapapeles
src/locales/en/home.jsonCopiar códigoCopiar el código al portapapeles
src/locales/es/home.jsonCopiar códigoCopiar el código al portapapeles
src/locales/es/about.jsonCopiar códigoCopiar el código al portapapeles
Utiliza las Traducciones en Tus Páginas
Crea un componente de página que inicialice i18next en el servidor y pase las traducciones tanto a los componentes del servidor como del cliente. Esto asegura que las traducciones se carguen antes de renderizar y previene el parpadeo de contenido.
La inicialización del lado del servidor carga las traducciones antes de que la página se renderice, mejorando el SEO y evitando el FOUC (Flash of Unstyled Content). Al pasar los recursos pre-cargados al proveedor del cliente, evitamos solicitudes duplicadas y garantizamos una hidratación fluida.
src/app/[locale]/about/index.tsxCopiar códigoCopiar el código al portapapeles
Usar traducciones en componentes cliente
Los componentes cliente pueden usar el hook
useTranslationpara acceder a las traducciones. Este hook proporciona acceso a la función de traducción y a la instancia i18n, permitiéndote traducir contenido y acceder a la información del locale.Los componentes cliente necesitan hooks de React para acceder a las traducciones. El hook
useTranslationse integra perfectamente con i18next y proporciona actualizaciones reactivas cuando cambia el locale.Asegúrate de que la página/proveedor incluya solo los namespaces que necesitas (por ejemplo,
about).
Si usas React < 19, memoriza formateadores pesados comoIntl.NumberFormat.src/components/ClientComponent.tsxCopiar códigoCopiar el código al portapapeles
Usar traducciones en componentes del servidor
Los componentes del servidor no pueden usar hooks de React, por lo que reciben las traducciones a través de props desde sus componentes padre. Este enfoque mantiene los componentes del servidor síncronos y permite que se aniden dentro de componentes cliente.
Los componentes del servidor que podrían estar anidados bajo límites cliente necesitan ser síncronos. Al pasar cadenas traducidas e información de locale como props, evitamos operaciones asíncronas y aseguramos un renderizado adecuado.
src/components/ServerComponent.tsxCopiar códigoCopiar el código al portapapeles
Cambiar el idioma de tu contenido
OpcionalPara cambiar el idioma de tu contenido en Next.js, la forma recomendada es usar URLs con prefijo de locale y los enlaces de Next.js. El siguiente ejemplo lee el locale actual de la ruta, lo elimina del pathname y renderiza un enlace por cada locale disponible.
src/components/LocaleSwitcher.tsxCopiar códigoCopiar el código al portapapeles
Construir un componente Link localizado
OpcionalReutilizar URLs localizadas en toda tu aplicación mantiene la navegación consistente y optimizada para SEO. Envuelve
next/linken un pequeño helper que antepone la locale activa a las rutas internas, dejando intactas las URLs externas.src/components/LocalizedLink.tsxCopiar códigoCopiar el código al portapapeles
Consejo: Debido a que
LocalizedLinkes un reemplazo directo, migre gradualmente intercambiando las importaciones y dejando que el componente maneje las URLs específicas por locale.Acceder al locale activo dentro de Server Actions
OpcionalLas Server Actions a menudo necesitan el locale actual para correos electrónicos, registros o integraciones con terceros. Combine la cookie de locale establecida por su proxy con el encabezado
Accept-Languagecomo respaldo.src/app/actions/get-current-locale.tsCopiar códigoCopiar el código al portapapeles
Debido a que el helper depende de las cookies y cabeceras de Next.js, funciona en Route Handlers, Server Actions y otros contextos exclusivos del servidor.
Internacionaliza tus Metadatos
OpcionalTraducir contenido es importante, pero el objetivo principal de la internacionalización es hacer que tu sitio web sea más visible para el mundo. La i18n es una palanca increíble para mejorar la visibilidad de tu sitio web mediante un SEO adecuado.
Los metadatos internacionalizados correctamente ayudan a los motores de búsqueda a entender qué idiomas están disponibles en tus páginas. Esto incluye configurar las etiquetas meta hreflang, traducir títulos y descripciones, y asegurar que las URLs canónicas estén correctamente establecidas para cada locale.
Aquí tienes una lista de buenas prácticas respecto al SEO multilingüe:
- Establece etiquetas meta hreflang en la etiqueta
<head>para ayudar a los motores de búsqueda a entender qué idiomas están disponibles en la página - Enumera todas las traducciones de la página en el sitemap.xml usando el esquema XML
http://www.w3.org/1999/xhtml - No olvides excluir las páginas con prefijo del archivo robots.txt (por ejemplo,
/dashboard,/fr/dashboard,/es/dashboard) - Usa un componente Link personalizado para redirigir a la página más localizada (por ejemplo, en francés
<a href="/fr/about">À propos</a>)
Los desarrolladores a menudo olvidan referenciar correctamente sus páginas en los diferentes locales. Vamos a corregir eso:
src/app/[locale]/about/layout.tsxCopiar códigoCopiar el código al portapapeles
- Establece etiquetas meta hreflang en la etiqueta
Internacionaliza tu Sitemap
OpcionalGenera un sitemap que incluya todas las versiones locales de tus páginas. Esto ayuda a los motores de búsqueda a descubrir e indexar todas las versiones en diferentes idiomas de tu contenido.
Un sitemap correctamente internacionalizado asegura que los motores de búsqueda puedan encontrar e indexar todas las versiones en diferentes idiomas de tus páginas. Esto mejora la visibilidad en los resultados de búsqueda internacionales.
src/app/sitemap.tsCopiar códigoCopiar el código al portapapeles
Internacionaliza tu archivo robots.txt
OpcionalCrea un archivo robots.txt que maneje correctamente todas las versiones de locales de tus rutas protegidas. Esto asegura que los motores de búsqueda no indexen las páginas de administración o panel en ningún idioma.
Configurar correctamente robots.txt para todos los locales evita que los motores de búsqueda indexen páginas sensibles en cualquier idioma. Esto es crucial para la seguridad y la privacidad.
src/app/robots.tsCopiar códigoCopiar el código al portapapeles
Configurar Middleware para el Enrutamiento de Locales
OpcionalCrea un proxy para detectar automáticamente la locale preferida del usuario y redirigirlo a la URL con el prefijo de locale correspondiente. Esto mejora la experiencia del usuario al mostrar contenido en su idioma preferido.
El middleware asegura que los usuarios sean redirigidos automáticamente a su idioma preferido cuando visitan tu sitio. También guarda la preferencia del usuario en una cookie para futuras visitas.
src/proxy.tsCopiar códigoCopiar el código al portapapeles
Automatiza tus traducciones usando Intlayer
OpcionalIntlayer es una biblioteca gratuita y de código abierto diseñada para asistir en el proceso de localización en tu aplicación. Mientras que i18next se encarga de la carga y gestión de traducciones, Intlayer ayuda a automatizar el flujo de trabajo de traducción.
Gestionar las traducciones manualmente puede consumir mucho tiempo y ser propenso a errores. Intlayer automatiza las pruebas, generación y gestión de traducciones, ahorrándote tiempo y asegurando la consistencia en toda tu aplicación.
Intlayer te permitirá:
Declarar tu contenido donde quieras en tu base de código
Intlayer permite declarar tu contenido donde quieras en tu base de código usando archivos.content.{ts|js|json}. Esto permitirá una mejor organización de tu contenido, asegurando una mejor legibilidad y mantenibilidad de tu base de código.Probar traducciones faltantes
Intlayer proporciona funciones de prueba que pueden integrarse en tu pipeline de CI/CD o en tus pruebas unitarias. Aprende más sobre cómo probar tus traducciones.Automatiza tus traducciones, Intlayer proporciona una CLI y una extensión para VSCode para automatizar tus traducciones. Puede integrarse en tu pipeline de CI/CD. Aprende más sobre automatizar tus traducciones. Puedes usar tu propia clave API y el proveedor de IA de tu elección. También ofrece traducciones conscientes del contexto, consulta rellenar contenido.
- Conectar contenido externo
Automatiza tus traducciones,
Intlayer proporciona una CLI y una extensión para VSCode para automatizar tus traducciones. Puede integrarse en tu pipeline de CI/CD. Aprende más sobre automatizar tus traducciones.
Puedes usar tu propia clave API y el proveedor de IA de tu elección. También ofrece traducciones conscientes del contexto, consulta rellenar contenido.Conectar contenido externo
Intlayer te permite conectar tu contenido a un sistema de gestión de contenido externo (CMS). Para obtenerlo de manera optimizada e insertarlo en tus recursos JSON. Aprende más sobre obtener contenido externo.Editor visual
Intlayer ofrece un editor visual gratuito para editar tu contenido usando un editor visual. Aprende más sobre editar visualmente tus traducciones.
Y más. Para descubrir todas las funcionalidades que ofrece Intlayer, por favor consulta la documentación del interés de Intlayer.
Comentarios
Aún no hay comentarios. Sé el primero en compartir tus pensamientos.