Автор:
    Создание:2025-04-18Последнее обновление:2025-06-29

    Объявление контента Per-Locale в Intlayer

    Intlayer поддерживает два способа объявления многоязычного контента:

    • Один файл со всеми переводами
    • Один файл на каждую локаль (формат per-locale)

    Эта гибкость позволяет:

    • Легкая миграция с других инструментов интернационализации (i18n)
    • Поддержка автоматизированных рабочих процессов перевода
    • Четкая организация переводов в отдельные файлы, специфичные для каждой локали

    Один файл с несколькими переводами

    Этот формат идеален для:

    • Быстрой итерации в коде.
    • Бесшовной интеграции с CMS.

    Это рекомендуемый подход для большинства случаев использования. Он централизует переводы, что облегчает итерации и интеграцию с 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;
    
    Рекомендуется: Этот формат лучше всего подходит при использовании визуального редактора Intlayer или управлении переводами непосредственно в коде.
    Примечание: В обоих случаях файл объявления содержимого должен следовать схеме именования *.content.{ts,tsx,js,jsx,mjs,cjs,json} для распознавания Intlayer. Суффикс .[locale] необязателен и используется только как соглашение об именовании.

    Глобальная конфигурация для per-locale файлов

    Вы можете настроить глобальную конфигурацию для per-locale файлов, добавив следующее в ваш файл intlayer.config.ts:

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

    При использовании этой конфигурации все per-locale файлы будут генерироваться с локалью по умолчанию, установленной на английский. Это также включает генерацию файлов .content с помощью команды extract и компилятора. (Смотрите Compiler или Extract для получения дополнительной информации.)

    Формат по локалям

    Этот формат полезен, когда:

    • Вы хотите версионировать или переопределять переводы независимо.
    • Вы интегрируете машинные или человеческие рабочие процессы перевода.

    Вы также можете разделить переводы на отдельные файлы для каждой локали, указав поле locale:

    hello-world.es.content.ts
    import { t, Locales, type Dictionary } from "intlayer";
    
    const helloWorldContent = {
      key: "hello-world",
      locale: Locales.SPANISH, // Важно
      content: { multilingualContent: "Título de mi componente" },
    } satisfies Dictionary;
    
    export default helloWorldContent;
    
    Важно: Убедитесь, что поле locale определено. Оно сообщает Intlayer, на каком языке представлен файл.

    Смешивание форматов

    Вы можете комбинировать оба подхода объявления для одного и того же ключа контента. Например:

    • Объявите базовый контент статически в файле, таком как index.content.ts.
    • Добавьте или переопределите конкретные переводы в отдельных файлах, таких как index.fr.content.ts или index.content.json.

    Эта настройка особенно полезна, когда:

    • Вы хотите определить начальную структуру контента в коде.
    • Планируете позже дополнить или завершить переводы с помощью CMS или автоматизированных инструментов.
    bash
    .
    └── Components
        └── MyComponent
            ├── index.content.ts
            ├── index.content.json
            └── index.ts
    

    Пример

    Вот файл объявления многоязычного контента:

    Components/MyComponent/index.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const helloWorldContent = {
      key: "hello-world",
      locale: Locales.ENGLISH,
      content: {
        multilingualContent: "Заголовок моего компонента",
        projectName: "Мой проект",
      },
    } 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 автоматически объединяет мультиязычные и локализованные файлы.

    Components/MyComponent/index.ts
    import { getIntlayer, Locales } from "intlayer";
    
    const intlayer = getIntlayer("hello-world"); // Локаль по умолчанию - ENGLISH, поэтому будет возвращено содержимое на английском
    
    console.log(JSON.stringify(intlayer, null, 2));
    // Результат:
    // {
    //  "multilingualContent": "Заголовок моего компонента",
    //  "projectName": "Мой проект"
    // }
    
    const intlayer = getIntlayer("hello-world", Locales.SPANISH);
    
    console.log(JSON.stringify(intlayer, null, 2));
    // Результат:
    // {
    //  "multilingualContent": "Título de mi componente",
    //  "projectName": "Мой проект"
    // }
    
    const intlayer = getIntlayer("hello-world", Locales.FRENCH);
    
    console.log(JSON.stringify(intlayer, null, 2));
    // Результат:
    // {
    //  "multilingualContent": "Titre de mon composant",
    //  "projectName": "Мой проект"
    // }
    

    Автоматическая генерация переводов

    Используйте intlayer CLI для автоматического заполнения отсутствующих переводов на основе ваших предпочтительных сервисов.