Autor:
    Creación:2025-04-18Última actualización:2025-06-29

    Declaración de contenido Por-Locale en Intlayer

    Intlayer soporta dos formas de declarar contenido multilingüe:

    • Archivo único con todas las traducciones
    • Un archivo por locale (formato por-locale)

    Esta flexibilidad permite:

    • Migración sencilla desde otras herramientas i18n
    • Soporte para flujos de trabajo de traducción automatizados
    • Organización clara de las traducciones en archivos separados y específicos por locale

    Archivo único con múltiples traducciones

    Este formato es ideal para:

    • Iteración rápida en el código.
    • Integración fluida con el CMS.

    Este es el enfoque recomendado para la mayoría de los casos de uso. Centraliza las traducciones, facilitando la iteración y la integración con el CMS.

    hello-world.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const helloWorldContent = {
      key: "hello-world",
      content: {
        multilingualContent: t({
          en: "Title of my component",
          es: "Título de mi componente",
        }),
      },
    } satisfies Dictionary;
    
    export default helloWorldContent;
    
    Recomendado: Este formato es el mejor cuando se utiliza el editor visual de Intlayer o se gestionan las traducciones directamente en el código.
    Nota: En ambos casos, el archivo de declaración de contenido debe seguir el patrón de nomenclatura *.content.{ts,tsx,js,jsx,mjs,cjs,json} para ser reconocido por Intlayer. El sufijo .[locale] es opcional y se utiliza solo como una convención de nomenclatura.

    Configuración global para archivos por locale

    Puedes configurar la configuración global para archivos por locale agregando lo siguiente a tu archivo intlayer.config.ts:

    ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      dictionary: {
        locale: Locales.ENGLISH,
      },
    };
    
    export default config;
    

    Usando esta configuración, todos los archivos por locale se generarán con el locale predeterminado establecido en inglés. También incluye la generación de archivos .content utilizando el comando extract y el compilador. (Consulta Compiler o Extract para más información.)

    Formato por idioma

    Este formato es útil cuando:

    • Deseas versionar o sobrescribir traducciones de forma independiente.
    • Estás integrando flujos de trabajo de traducción automática o humana.

    También puedes dividir las traducciones en archivos individuales por idioma especificando el campo locale:

    hello-world.es.content.ts
    import { t, Locales, type Dictionary } from "intlayer";
    
    const helloWorldContent = {
      key: "hello-world",
      locale: Locales.SPANISH, // Importante
      content: { multilingualContent: "Título de mi componente" },
    } satisfies Dictionary;
    
    export default helloWorldContent;
    
    Importante: Asegúrate de que el campo locale esté definido. Indica a Intlayer qué idioma representa el archivo.

    Mezclando formatos

    Puedes combinar ambos enfoques de declaración para la misma clave de contenido. Por ejemplo:

    • Declara tu contenido base de forma estática en un archivo como index.content.ts.
    • Añade o sobrescribe traducciones específicas en archivos separados como index.fr.content.ts o index.content.json.

    Esta configuración es especialmente útil cuando:

    • Quieres definir la estructura inicial del contenido en código.
    • Planeas enriquecer o completar las traducciones más adelante usando el CMS o herramientas automatizadas.
    bash
    .
    └── Components
        └── MyComponent
            ├── index.content.ts
            ├── index.content.json
            └── index.ts
    

    Ejemplo

    Aquí un archivo de declaración de contenido multilingüe:

    Components/MyComponent/index.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const helloWorldContent = {
      key: "hello-world",
      locale: Locales.ENGLISH,
      content: {
        multilingualContent: "Título de mi componente",
        projectName: "Mi proyecto",
      },
    } satisfies Dictionary;
    
    export default helloWorldContent;
    
    Components/MyComponent/index.content.json
    {
      "$schema": "https://intlayer.org/schema.json",
      "key": "hello-world",
      "content": {
        "multilingualContent": {
          "nodeType": "translation",
          "translation": {
            "fr": "Titre de mon composant",
            "es": "Título de mi componente"
          }
        }
      }
    }
    

    Intlayer combina automáticamente archivos multilingües y por idioma.

    Components/MyComponent/index.ts
    import { getIntlayer, Locales } from "intlayer";
    
    const intlayer = getIntlayer("hello-world"); // La configuración regional predeterminada es INGLÉS, por lo que devolverá el contenido en INGLÉS
    
    console.log(JSON.stringify(intlayer, null, 2));
    // Resultado:
    // {
    //  "multilingualContent": "Título de mi componente",
    //  "projectName": "Mi proyecto"
    // }
    
    const intlayer = getIntlayer("hello-world", Locales.SPANISH);
    
    console.log(JSON.stringify(intlayer, null, 2));
    // Resultado:
    // {
    //  "multilingualContent": "Título de mi componente",
    //  "projectName": "Mi proyecto"
    // }
    
    const intlayer = getIntlayer("hello-world", Locales.FRENCH);
    
    console.log(JSON.stringify(intlayer, null, 2));
    // Resultado:
    // {
    //  "multilingualContent": "Titre de mon composant",
    //  "projectName": "Mi proyecto"
    // }
    

    Generación Automática de Traducciones

    Utilice el intlayer CLI para completar automáticamente las traducciones faltantes según sus servicios preferidos.