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
- "Init history"v8.13.05/6/2026
El contenido de esta página ha sido traducido con una IA.
Ver la última versión del contenido original en 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
Migrar de next-intl a Intlayer
¿Por qué migrar de next-intl a Intlayer?
En lugar de cargar archivos JSON masivos en tus páginas, carga solo el contenido necesario. Intlayer ayuda a reducir el tamaño de tu bundle y tus páginas hasta en un 50 %.
Establecer un alcance al contenido de tu aplicación facilita el mantenimiento para aplicaciones a gran escala. Puedes duplicar o eliminar una carpeta de función completa sin la carga mental de revisar todo el código de tu contenido. Además, Intlayer está completamente tipado para asegurar la precisión de tu contenido.
Intlayer es también la solución con el desarrollo más activo en el ecosistema i18n — los problemas se solucionan rápidamente, nuevos adaptadores de framework se añaden regularmente y la API principal se refina continuamente basándose en retroalimentación real de producción.
Colocalizar el contenido reduce el contexto necesario para los Grandes Modelos de Lenguaje (LLM). Intlayer también incluye una suite de herramientas, como un CLI para probar traducciones faltantes, LSP, MCP y habilidades de agente, para que la experiencia del desarrollador (DX) sea aún más fluida para los agentes de IA.
Usa la automatización para traducir en tu flujo de CI/CD utilizando el LLM de tu elección al costo de tu proveedor de IA. Intlayer también ofrece un compilador para automatizar la extracción de contenido, así como una plataforma web para ayudar a traducir en segundo plano.
Conectar archivos JSON masivos a los componentes puede llevar a problemas de rendimiento y reactividad. Intlayer optimiza la carga de tu contenido en tiempo de compilación.
Más que una simple solución de i18n, Intlayer proporciona un editor visual autohospedado y un CMS completo para ayudarte a gestionar tu contenido multilingüe en tiempo real, haciendo la colaboración con traductores, redactores y otros miembros del equipo fluida. El contenido se puede almacenar local y/o remotamente.
Estrategia de migración
El enfoque recomendado para las aplicaciones existentes es el adaptador de compatibilidad: instala @intlayer/next-intl, que expone exactamente la misma API que next-intl pero delega todo el trabajo de traducción a Intlayer.
Mantienes tus useTranslations, getTranslations, NextIntlClientProvider existentes y demás elementos — el único cambio es la ruta de importación. No se requiere refactorizar firmas de llamada, formas de props o la estructura de los componentes.
Con el tiempo puedes, opcionalmente, migrar archivos individuales al formato .content.ts más rico de Intlayer para desbloquear el editor visual, el CMS y el alcance de contenido por componente — pero este paso es enteramente opcional y puede realizarse de forma gradual.
Tabla de Contenidos
Migración rápida
Los siguientes pasos son el mínimo requerido para que tu aplicación next-intl existente funcione sobre Intlayer con cero cambios en el código.
Instalar Dependencias
Instala los paquetes principales de Intlayer y el adaptador de compatibilidad
@intlayer/next-intl:bashCopiar códigoCopiar el código al portapapeles
npm install intlayer next-intlayer @intlayer/next-intl @intlayer/sync-json-pluginnpx intlayer initConserva instalado
next-intl— sigue siendo necesario para el enrutamiento URL (createNavigation,createMiddleware,Link,redirect,usePathname,useRouter). El adaptador de compatibilidad no reemplaza la capa de enrutamiento.Configurar Intlayer
El comando
intlayer initcrea un archivo inicialintlayer.config.ts. Actualízalo para que coincida con tus idiomas existentes y apunta el pluginsyncJSONa tus archivos de mensajes:intlayer.config.tsCopiar códigoCopiar el código al portapapeles
import { Locales, type IntlayerConfig } from "intlayer"; import { syncJSON } from "@intlayer/sync-json-plugin"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // Agrega todos tus idiomas existentes aquí ], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ // 'icu' coincide con la sintaxis de marcador de posición ICU de next-intl: {name}, {count, plural, ...} format: "icu", source: ({ locale }) => `./messages/${locale}.json`, location: "messages", }), ], }; export default config;sourceasigna un idioma a su ruta de archivo JSON.locationle indica al observador de Intlayer qué carpeta monitorear en busca de cambios. La opciónformat: 'icu'asegura que los marcadores de posición ICU como{name}y{count, plural, one {# item} other {# items}}se analicen correctamente.Para obtener una lista completa de opciones de configuración, consulta la documentación de configuración.
Añadir el Plugin de Intlayer a Next.js
Envuelve tu configuración existente de Next.js con
createNextIntlPlugindesde@intlayer/next-intl/plugin. Este envoltorio componewithIntlayere inyecta los aliasnext-intl→@intlayer/next-intlpor ti:next.config.tsCopiar códigoCopiar el código al portapapeles
import type { NextConfig } from "next"; import { createNextIntlPlugin } from "@intlayer/next-intl/plugin"; const withIntlayer = createNextIntlPlugin(); const nextConfig: NextConfig = { /* tus opciones de configuración existentes */ }; export default withIntlayer(nextConfig);createNextIntlPlugin()envuelve awithIntlayer, detecta automáticamente Webpack o Turbopack, vincula el monitoreo de contenido, compila los diccionarios y, lo más importante, inyecta alias de módulos para que tus llamadas existentes aimport … from 'next-intl'sean redirigidas de forma transparente a@intlayer/next-intlen tiempo de compilación. La entrada de enrutamientonext-intl/routingsigue apuntando al paquete real. No se requieren cambios en los archivos de origen.¿Prefieres usar el
withIntlayersencillo denext-intlayer/server? Compilará tus diccionarios, pero no añadirá los alias denext-intl— tendrías que renombrar las importaciones a@intlayer/next-intlmanualmente (ver el Paso 4).Ya no necesitas
getRequestConfigoloadMessages. Connext-intl, tenías que escribir un archivosrc/i18n.tsque cargaba paquetes de mensajes JSON en cada solicitud a través degetRequestConfig. Intlayer compila todos los diccionarios en tiempo de compilación, por lo que no hay paso de carga en tiempo de ejecución. Puedes borrar ese archivo por completo (o mantener solo las partes de enrutamiento si aún utilizascreateNavigation).
Eso es todo para la migración rápida. Tu aplicación ahora funciona sobre Intlayer mientras mantiene intactas todas las importaciones y APIs de next-intl.
Claves de traducción tipadas — automáticas. Una vez que Intlayer compila tus diccionarios,
useTranslationsygetTranslationsquedan tipados en relación a tu contenido real. Las claves se autocompletan en tu IDE y las rutas inválidas provocan errores de TypeScript en tiempo de compilación — sin configuraciones adicionales requeridas.tsxCopiar códigoCopiar el código al portapapeles
// Componente de cliente — 'about' es una clave de diccionario registradaconst t = useTranslations("about");t("counter.label"); // ✓ autocompletadot("does.not.exist"); // ✗ Error de TypeScript// Componente de servidorconst t = await getTranslations("about");t("counter.label"); // ✓ tipado
Migración completa
Los pasos a continuación son opcionales y pueden hacerse incrementalmente. Desbloquean todas las funcionalidades de Intlayer: editor visual, CMS, archivos de contenido tipados, automatización de traducción con IA y más.
Renombrar importaciones explícitamente (opcional)
OpcionalEl contenedor
createNextIntlPlugin()ya maneja el alias denext-intl→@intlayer/next-intla nivel del empaquetador. Si prefieres hacer la dependencia explícita en tus archivos de origen (y usar el pluginwithIntlayerregular en su lugar), puedes renombrar las importaciones manualmente:Mostrar todo el contenido de la tablaAbrir la tabla en una ventana flotante para ver todo el contenido claramente
Antes Después 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'Mantén siempre las importaciones de enrutamiento del
next-intlreal — el adaptador de compatibilidad no reemplaza la capa de enrutamiento URL:tsCopiar códigoCopiar el código al portapapeles
// ✅ Mantén siempre estos desde el 'next-intl' realimport { createNavigation } from "next-intl/routing";import { createMiddleware } from "next-intl/server";import { defineRouting } from "next-intl/routing";De manera alternativa, puedes usar
defineRoutingde@intlayer/next-intl/routingque combina la configuración de idiomas de tuintlayer.config.tsautomáticamente.Activar la Automatización de Traducción con IA
OpcionalUna vez que Intlayer esté configurado, puedes usar su CLI para llenar automáticamente las traducciones faltantes utilizando el LLM de tu elección:
bashCopiar códigoCopiar el código al portapapeles
# Probar traducciones faltantes (agregar al CI)npx intlayer test# Llenar traducciones faltantes con IAnpx intlayer fillAñade una
OPENAI_API_KEY(o la clave de tu proveedor preferido) a tu archivo.env, luego amplía tuintlayer.config.ts:intlayer.config.tsCopiar códigoCopiar el código al portapapeles
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", // default // model: "gpt-4o-mini", // default }, }; export default config;Consulta la documentación de CLI de Intlayer para ver todas las opciones disponibles.
Qué puedes eliminar tras la migración
Una vez que @intlayer/next-intl esté en su lugar, el siguiente código repetitivo de next-intl se puede eliminar:
Abrir la tabla en una ventana flotante para ver todo el contenido claramente
| Archivo / patrón | Por qué ya no es necesario |
|---|---|
Exportación getRequestConfig de src/i18n.ts | Intlayer compila los diccionarios en tiempo de compilación; no hay carga de mensajes por cada solicitud. Conserva el archivo solo si exporta además ayudantes de enrutamiento de createNavigation. |
Llamadas loadMessages() / getMessages() en layout | El NextIntlClientProvider de @intlayer/next-intl lee de la salida compilada; no se requiere la prop messages. |
Importaciones locales/{locale}/*.json en layout | Los bundles JSON solo son necesarios si aún utilizas el plugin syncJSON. Una vez que migres a archivos .content.ts, puedes borrar la carpeta JSON. |
Cuando estés listo para ir más allá, Intlayer descubre automáticamente todos los archivos .content.ts y .content.json en cualquier lugar de tu código base (por defecto, en cualquier lugar dentro de ./src). Puedes colocar un archivo about.content.ts directamente junto a tu about/page.tsx e Intlayer lo tomará al momento de compilación sin configuración adicional — sin importaciones, sin registro, sin necesidad de un archivo índice centralizado. Esto hace que la co-localización de traducciones sea completamente fluida con las páginas y componentes.
Configurar TypeScript
Intlayer usa el aumento de módulos para ofrecer autocompletado completo de TypeScript para tus claves de traducción. Asegúrate de que tu tsconfig.json incluya los tipos generados automáticamente:
Copiar el código al portapapeles
{ // ... Tus configuraciones de TypeScript existentes "include": [ // ... Tus configuraciones de TypeScript existentes ".intlayer/**/*.ts", // Incluir los tipos generados automáticamente ],}Configuración de Git
Añade el directorio generado por Intlayer a tu .gitignore:
Copiar el código al portapapeles
# Ignorar los archivos generados por Intlayer.intlayerProfundizar Más
- Editor Visual — Gestiona las traducciones visualmente en tu navegador: Editor Visual de Intlayer
- CMS — Externaliza y gestiona contenido de forma remota: Intlayer CMS
- Extensión de VS Code — Obtén autocompletado y detección de errores de traducción en tiempo real: Extensión de VS Code de Intlayer
- Referencia del CLI — Lista completa de comandos CLI: Intlayer CLI
- Intlayer con Next.js — Guía de configuración completa para Next.js: intlayerwithnextjs_16.md