Creation:2024-08-14Last update:2026-05-31

    ¿Por qué deberías considerar Intlayer?

    ¿Qué es Intlayer?

    Intlayer es una biblioteca de internacionalización diseñada específicamente para desarrolladores de JavaScript. Permite la declaración de tu contenido en cualquier parte de tu código. Convierte las declaraciones de contenido multilingüe en diccionarios estructurados para integrarse fácilmente en tu código. Usando TypeScript, Intlayer hace que tu desarrollo sea más sólido y eficiente.

    ¿Por qué elegir Intlayer sobre otras alternativas?

    En comparación con las soluciones principales como next-intl o i18next, Intlayer es una solución que viene con optimizaciones integradas como:

    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 de tus páginas hasta en un 50%.

    Delimitar el contenido de tu aplicación facilita el mantenimiento para aplicaciones a gran escala. Puedes duplicar o eliminar una sola carpeta de funciones sin la carga mental de revisar toda tu base de código de contenido. Además, Intlayer está completamente tipado para garantizar la precisión de tu contenido.

    Co-localizar el contenido reduce el contexto necesario para los modelos de lenguaje grande (LLM). Intlayer también viene con una suite de herramientas, como una CLI para probar traducciones faltantes, LSP, MCP y agent skills, para hacer que la experiencia del desarrollador (DX) sea aún más fluida para los agentes de IA.

    Intlayer ofrece una serie de características adicionales que otras soluciones de i18n no tienen, como soporte de Markdown, obtención de contenido externo, carga de contenido de archivos, actualización de contenido en vivo, editor visual y más.

    Usa la automatización para traducir en tu pipeline 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 componentes puede generar 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 auto-hospedado y un CMS completo para ayudarte a administrar tu contenido multilingüe en tiempo real, haciendo que la colaboración con traductores, redactores y otros miembros del equipo sea fluida. El contenido se puede almacenar localmente y/o de forma remota.

    Si usas diferentes frameworks para diferentes partes de tu aplicación (por ejemplo, React, React-native, Vue, Angular, Svelte, etc.), Intlayer proporciona una forma de usar una sintaxis e implementación común en todos los principales frameworks de frontend. También podrás compartir tu declaración de contenido en tu sistema de diseño, aplicaciones, backend, etc.

    ¿Por qué se creó Intlayer?

    Intlayer se creó para resolver un problema común que afecta a todas las bibliotecas de i18n habituales como next-intl, react-i18next, react-intl, next-i18next, react-intl y vue-i18n.

    Todas estas soluciones adoptan un enfoque centralizado para listar y administrar tu contenido. Por ejemplo:

    bash
    .├── locales│   ├── en.json│   ├── es.json│   └── fr.json├── i18n.ts└── src    └── components        └── MyComponent            └── index.tsx

    O aquí usando espacios de nombres (namespaces):

    bash
    .├── locales│   ├── en│   │  ├── footer.json│   │  └── navbar.json│   ├── fr│   │  ├── footer.json│   │  └── navbar.json│   └── es│      ├── footer.json│      └── navbar.json├── i18n.ts└── src    └── components        └── MyComponent            └── index.tsx

    Este tipo de arquitectura ralentiza el proceso de desarrollo y hace que la base de código sea más compleja de mantener por varias razones:

    1. Para cualquier componente nuevo creado, debes:

      • Crear el nuevo recurso/espacio de nombres en la carpeta locales
      • Recordar importar el nuevo espacio de nombres en tu página
      • Traducir tu contenido (a menudo hecho manualmente copiando y pegando de proveedores de IA)
    2. Para cualquier cambio realizado en tus componentes, debes:

      • Buscar el recurso/espacio de nombres relacionado (lejos del componente)
      • Traducir tu contenido
      • Asegurarte de que tu contenido esté actualizado para cada idioma (locale)
      • Verificar que tu espacio de nombres no incluya claves/valores no utilizados
      • Asegurarte de que la estructura de tus archivos JSON sea la misma para todos los idiomas

    En proyectos profesionales que utilizan estas soluciones, a menudo se usan plataformas de localización para ayudar a administrar la traducción de tu contenido. Sin embargo, esto puede volverse costoso rápidamente para proyectos grandes.

    Para resolver este problema, Intlayer adopta un enfoque que delimita tu contenido por componente y lo mantiene cerca de tu componente, como solemos hacer con CSS (styled-components), tipos, documentación (storybook) o pruebas unitarias (jest).

    bash
    .└── components    └── MyComponent        ├── index.content.ts        ├── index.test.tsx        ├── index.stories.tsx        └── index.tsx
    ./components/MyComponent/index.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const componentExampleContent = {
      key: "component-example",
      content: {
        myTranslatedContent: t({
          en: "Hello World",
          es: "Hola Mundo",
          fr: "Bonjour le monde",
        }),
      },
    } satisfies Dictionary;
    
    export default componentExampleContent;
    ./components/MyComponent/index.tsx
    import { useIntlayer } from "react-intlayer";
    
    export const ComponentExample = () => {
      const { myTranslatedContent } = useIntlayer("component-example");
    
      return <span>{myTranslatedContent}</span>;
    };

    Este enfoque te permite:

    1. Aumentar la velocidad de desarrollo

      • Los archivos .content.{{ts|mjs|cjs|json}} se pueden crear utilizando una extensión de VSCode
      • Las herramientas de autocompletado de IA en tu IDE (como GitHub Copilot) pueden ayudarte a declarar tu contenido, reduciendo el copiar/pegar
    2. Limpiar tu base de código

      • Reducir la complejidad
      • Aumentar la mantenibilidad
    3. Duplicar tus componentes y su contenido relacionado más fácilmente (Ejemplo: componentes de inicio de sesión/registro, etc.)

      • Limitando el riesgo de afectar el contenido de otros componentes
      • Copiando y pegando tu contenido de una aplicación a otra sin dependencias externas
    4. Evitar contaminar tu base de código con claves/valores no utilizados para componentes no utilizados

      • Si no usas un componente, Intlayer no importará su contenido relacionado
      • Si eliminas un componente, recordarás más fácilmente eliminar su contenido relacionado ya que estará presente en la misma carpeta
    5. Reducir el costo de razonamiento para los agentes de IA al declarar tu contenido multilingue

      • El agente de IA no tendrá que escanear toda tu base de código para saber dónde implementar tu contenido
      • Las traducciones se pueden hacer fácilmente mediante herramientas de autocompletado de IA en tu IDE (como GitHub Copilot)
    6. Optimizar el rendimiento de la carga

      • Si un componente se carga de forma diferida (lazy-loaded), su contenido relacionado se cargará al mismo tiempo

    Características adicionales de Intlayer

    Característica Descripción
    Feature Soporte Multi-Framework

    Intlayer es compatible con todos los frameworks y librerías principales, incluidos Next.js, React, Vite, Vue.js, Nuxt, Preact, Express y más.
    Feature Administración de contenido basada en JavaScript

    Aprovecha la flexibilidad de JavaScript para definir y administrar tu contenido de manera eficiente.

    - Declaración de contenido
    Feature Compilador

    El compilador de Intlayer extrae automáticamente el contenido de los componentes y genera los archivos de diccionario.

    - Compilador
    Feature Archivo de declaración de contenido por idioma

    Acelera tu desarrollo declarando tu contenido una vez, antes de la generación automática.

    - Archivo de declaración de contenido por idioma
    Feature Entorno seguro para tipos

    Aprovecha TypeScript para garantizar que tus definiciones de contenido y tu código estén libres de errores, mientras te beneficias del autocompletado del IDE.

    - Configuración de TypeScript
    Feature Configuración simplificada

    Ponte en marcha rápidamente con una configuración mínima. Ajusta la configuración de internacionalización, enrutamiento, IA, compilación y manejo de contenido con facilidad.

    - Explorar la integración de Next.js
    Feature Obtención simplificada de contenido

    No es necesario llamar a tu función t para cada fragmento de contenido. Recupera todo tu contenido directamente usando un único hook.

    - Integración con React
    Feature Implementación consistente de componentes de servidor

    Perfectamente adecuado para los componentes de servidor de Next.js, usa la misma implementación para componentes de cliente y de servidor, sin necesidad de pasar tu función t a través de cada componente de servidor.

    - Componentes de servidor
    Feature Base de código organizada

    Mantén tu base de código más organizada: 1 componente = 1 diccionario en la misma carpeta. Las traducciones cercanas a sus respectivos componentes mejoran la mantenibilidad y la claridad.

    - Cómo funciona Intlayer
    Feature Enrutamiento mejorado

    Soporte completo de enrutamiento de aplicaciones, adaptándose sin problemas a estructuras de aplicaciones complejas, para Next.js, React, Vite, Vue.js, etc.

    - Explorar la integración de Next.js
    Feature Soporte de Markdown

    Importa e interpreta archivos locales y Markdown remoto para contenido multilingüe como políticas de privacidad, documentación, etc. Interpreta y haz accesibles los metadatos de Markdown en tu código.

    - Archivos de contenido
    Feature Editor visual y CMS gratuitos

    Un editor visual y un CMS gratuitos están disponibles para los escritores de contenido, eliminando la necesidad de una plataforma de localización. Mantén tu contenido sincronizado usando Git, o externalízalo total o parcialmente con el CMS.

    - Editor de Intlayer
    - CMS de Intlayer
    Feature Contenido eliminable en compilación (Tree-shakable)

    Contenido eliminable en compilación, reduciendo el tamaño del bundle final. Carga contenido por componente, excluyendo cualquier contenido no utilizado de tu bundle. Soporta la carga diferida (lazy loading) para mejorar la eficiencia de carga de la aplicación.

    - Optimización de la compilación de aplicaciones
    Feature Renderizado estático

    No bloquea el renderizado estático.

    - Integración de Next.js
    Feature Traducción basada en IA

    Transforma tu sitio web a 231 idiomas con un solo clic utilizando las herramientas avanzadas de traducción basadas en IA de Intlayer usando tu propio proveedor de IA/clave API.

    - Integración de CI/CD
    - CLI de Intlayer
    - Autocompletar
    Feature Integración del servidor MCP

    Proporciona un servidor MCP (Model Context Protocol) para la automatización del IDE, lo que permite una gestión de contenido perfecta y flujos de trabajo de i18n directamente dentro de tu entorno de desarrollo.

    - Servidor MCP
    Feature Extension de VSCode

    Intlayer proporciona una extensión de VSCode para ayudarte a administrar tu contenido y traducciones, compilar tus diccionarios, traducir tu contenido y más.

    - Extensión de VSCode
    Feature Interoperabilidad

    Permite la interoperabilidad con react-i18next, next-i18next, next-intl y react-intl.

    - Intlayer y react-intl
    - Intlayer y next-intl
    - Intlayer y next-i18next
    Probar traducciones faltantes (CLI/CI) ✅ CLI: npx intlayer content test (auditoría compatible con CI)

    Comparación de Intlayer con otras soluciones

    Característica intlayer react-i18next react-intl (FormatJS) lingui next-intl next-i18next vue-i18n
    Traducciones cerca de componentes ✅ Sí, contenido co-localizado con cada componente ❌ No ❌ No ❌ No ❌ No ❌ No ✅ Sí - usando Single File Components (SFCs)
    Integración de TypeScript ✅ Avanzada, tipos estrictos autogenerados ⚠️ Básica; configuración adicional para mayor seguridad ✅ Buena, pero menos estricta ⚠️ Tipados, necesita configuración ✅ Buena ⚠️ Básica ✅ Buena (tipos disponibles; la seguridad de claves necesita configuración)
    Detección de traducciones faltantes ✅ Error de TypeScript y error/advertencia en tiempo de compilación ⚠️ Principalmente cadenas de respaldo en tiempo de ejecución ⚠️ Cadenas de respaldo ⚠️ Requiere configuración adicional ⚠️ Respaldo en tiempo de ejecución ⚠️ Respaldo en tiempo de ejecución ⚠️ Respaldo/advertencias en tiempo de ejecución (configurable)
    Contenido rico (JSX/Markdown/componentes) ✅ Soporte directo ⚠️ Limitado / solo interpolación ⚠️ Sintaxis ICU, no JSX real ⚠️ Limitado ❌ No diseñado para nodos ricos ⚠️ Limitado ⚠️ Limitado (componentes a través de <i18n-t>, Markdown a través de plugins)
    Traducción basada en IA ✅ Sí, admite múltiples proveedores de IA. Utilizable con tus propias claves API. Considera el contexto de tu aplicación y el alcance del contenido ❌ No ❌ No ❌ Non ❌ No ❌ No ❌ No
    Editor visual ✅ Sí, editor visual local + CMS opcional; puede externalizar el contenido de la base de código; integrable ❌ No / disponible a través de plataformas de localización externas ❌ No / disponible a través de plataformas de localización externas ❌ No / disponible a través de plataformas de localización externas ❌ No / disponible a través de plataformas de localización externas ❌ No / disponible a través de plataformas de localización externas ❌ No / disponible a través de plataformas de localización externas
    Enrutamiento localizado ✅ Sí, admite rutas localizadas de forma nativa (funciona con Next.js y Vite) ⚠️ No integrado, requiere plugins (por ejemplo, next-i18next) o configuración de enrutador personalizada ❌ No, solo formato de mensajes, el enrutamiento debe ser manual ⚠️ No integrado, requiere plugins o configuración manual ✅ Integrado, App Router admite el segmento [locale] ✅ Integrado ✅ Integrado
    Generación dinámica de rutas ✅ Sí ⚠️ Plugin/ecocistema o configuración manual ❌ No proporcionado ⚠️ Plugin/manual ✅ Sí ✅ Sí ❌ No proporcionado (Nuxt i18n lo proporciona)
    Pluralización ✅ Patrones basados en enumeraciones ✅ Configurable (plugins como i18next-icu) ✅ (ICU) ✅ (ICU/messageformat) ✅ Buena ✅ Buena ✅ Reglas de pluralización integradas
    Formateo (dates, numbers, currencies) ✅ Formateadores optimizados (Intl bajo el capó) ⚠️ A través de plugins o uso personalizado de Intl ✅ Formateadores ICU ✅ Asistentes de ICU/CLI ✅ Bueno (asistentes de Intl) ✅ Bueno (asistentes de Intl) ✅ Formateadores integrados de fecha/número (Intl)
    Formato de contenido ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml WIP) ⚠️ .json ✅ .json, .js ⚠️ .po, .json ✅ .json, .js, .ts ⚠️ .json ✅ .json, .js
    Soporte ICU ⚠️ WIP ⚠️ A través de plugin (i18next-icu) ✅ Sí ✅ Sí ✅ Sí ⚠️ A través de plugin (i18next-icu) ⚠️ A través de compilador/formateador personalizado
    Asistentes de SEO (hreflang, sitemap) ✅ Herramientas integradas: asistentes para sitemap, robots.txt, metadatos ⚠️ Plugins de la comunidad/manual ❌ No es el núcleo ❌ No es el núcleo ✅ Bueno ✅ Bueno ❌ No es el núcleo (Nuxt i18n proporciona asistentes)
    Ecosistema / Comunidad ⚠️ Más pequeño pero de rápido crecimiento y reactivo ✅ El más grande y maduro ✅ Grande ⚠️ Más pequeño ✅ Mediano, centrado en Next.js ✅ Mediano, centrado en Next.js ✅ Grande en el ecosistema de Vue
    Rendimiento del lado del servidor y componentes de servidor ✅ Sí, optimizado para SSR / React Server Components ⚠️ Compatible a nivel de página, pero requiere pasar funciones t en el árbol de componentes para componentes de servidor hijos ⚠️ Compatible a nivel de página con configuración adicional, pero requiere pasar funciones t en el árbol de componentes para componentes de servidor hijos ✅ Compatible, requiere configuración ⚠️ Compatible a nivel de página, pero requiere pasar funciones t en el árbol de componentes para componentes de servidor hijos ⚠️ Compatible a nivel de página, pero requiere pasar funciones t en el árbol de componentes para componentes de servidor hijos ✅ SSR a través de Nuxt/Vue SSR (sin RSC)
    Tree-shaking (cargar solo contenido usado) ✅ Sí, por componente en tiempo de compilación a través de plugins Babel/SWC ⚠️ Generalmente carga todo (se puede mejorar con espacios de nombres/división de código) ⚠️ Generalmente carga todo ❌ No es predeterminado ⚠️ Parcial ⚠️ Parcial ⚠️ Parcial (con división de código/configuración manual)
    Carga diferida (Lazy loading) ✅ Sí, por idioma / por diccionario ✅ Sí (por ejemplo, backends/namespaces bajo demanda) ✅ Sí (paquetes de idiomas divididos) ✅ Sí (importaciones dinámicas de catálogo) ✅ Sí (por ruta/por idioma), necesita gestión de espacios de nombres ✅ Sí (por ruta/por idioma), necesita gestión de espacios de nombres ✅ Sí (mensajes de idioma asíncronos)
    Purgar contenido no utilizado ✅ Sí, por diccionario en tiempo de compilación ❌ No, solo mediante segmentación manual de espacios de nombres ❌ No, todos los mensajes declarados se agrupan ✅ Sí, las claves no utilizadas se detectan y eliminan en la compilación ❌ No, se puede gestionar manualmente con la gestión de espacios de nombres ❌ No, se puede gestionar manualmente con la gestión de espacios de nombres ❌ No, solo es posible mediante carga diferida manual
    Gestión de grandes proyectos ✅ Fomenta el enoque modular, adecuado para sistemas de diseño ⚠️ Requiere buena disciplina de archivos ⚠️ Los catálogos centrales pueden volverse grandes ⚠️ Puede volverse complejo ✅ Modular con configuración ✅ Modular con configuración ✅ Modular con configuración de Vue Router/Nuxt i18n

    Estrellas de GitHub

    Las estrellas de GitHub son un fuerte indicador de la popularidad de un proyecto, la confianza de la comunidad y su relevancia a largo plazo. Si bien no son una medida directa de la calidad técnica, reflejan cuántos desarrolladores encuentran útil el proyecto, siguen su progreso y es probable que lo adopten. Para estimar el valor de un proyecto, las estrellas ayudan a comparar la tracción entre alternativas y brindan información sobre el crecimiento del ecosystm.

    Star History Chart


    Interoperabilidad

    intlayer también puede ayudar a gestionar tus espacios de nombres para react-intl, react-i18next, next-intl, next-i18next y vue-i18n.

    Usando intlayer, puedes declarar tu contenido en el formato de tu biblioteca de i18n favorita, e intlayer generará tus espacios de nombres en la ubicación de tu elección (ejemplo: /messages/{{locale}}/{{namespace}}.json).