Автор:
    Создание:2024-08-13Последнее обновление:2026-09-27

    Документация по конфигурации Intlayer

    Обзор

    Файлы конфигурации Intlayer позволяют настраивать различные аспекты плагина, такие как интернационализация, middleware и управление контентом. Этот документ содержит подробное описание каждого свойства в конфигурации.

    Содержание

    Поддержка форматов конфигурационных файлов

    Intlayer принимает форматы файлов конфигурации JSON, JS, MJS и TS:

    • intlayer.config.ts
    • intlayer.config.js
    • intlayer.config.json
    • intlayer.config.json5
    • intlayer.config.jsonc
    • intlayer.config.cjs
    • intlayer.config.mjs
    • .intlayerrc

    Пример конфигурационного файла

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    import { nextjsRewrite } from "intlayer/routing";
    import { syncJSON } from "@intlayer/sync-json-plugin";
    import { z } from "zod";
    
    /**
     * Пример конфигурационного файла Intlayer со всеми доступными опциями.
     */
    const config: IntlayerConfig = {
      /**
       * Конфигурация настроек интернационализации.
       */
      internationalization: {
        /**
         * Список поддерживаемых языков в приложении.
         * По умолчанию: [Locales.ENGLISH]
         */
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
    
        /**
         * Список обязательных языков, которые должны быть определены в каждом словаре.
         * Если пусто, все языки обязательны в режиме `strict`.
         * По умолчанию: []
         */
        requiredLocales: [Locales.ENGLISH],
    
        /**
         * Уровень строгости для интернационализированного контента.
         * - "strict": Ошибка, если объявленный язык отсутствует или не объявлен.
         * - "inclusive": Предупреждение, если объявленный язык отсутствует.
         * - "loose": Принимает любой существующий язык.
         * По умолчанию: "inclusive"
         */
        strictMode: "inclusive",
    
        /**
         * Язык по умолчанию, используемый как запасной, если запрошенный язык не найден.
         * По умолчанию: Locales.ENGLISH
         */
        defaultLocale: Locales.ENGLISH,
      },
    
      /**
       * Настройки, управляющие операциями со словарями и поведением при отсутствии перевода.
       */
      dictionary: {
        /**
         * Управляет способом импорта словарей.
         * - "static": Статический импорт во время сборки (build time).
         * - "dynamic": Динамический импорт с использованием Suspense.
         * - "fetch": Динамическое получение через API Live Sync.
         * По умолчанию: "static"
         */
        importMode: "static",
    
        /**
         * Стратегия автоматического заполнения недостающих переводов с помощью ИИ.
         * Может быть логическим значением или шаблоном пути для хранения заполненного контента.
         * По умолчанию: true
         */
        fill: true,
    
        /**
         * Физическое расположение файлов словарей.
         * - "local": Хранятся в локальной файловой системе.
         * - "remote": Хранятся в Intlayer CMS.
         * - "hybrid": Хранятся и локально, и в Intlayer CMS.
         * - "plugin" (или любая кастомная строка): Предоставляется плагином или кастомным источником.
         * По умолчанию: "local"
         */
        location: "local",
    
        /**
         * Нужно ли автоматически преобразовывать контент (например, Markdown в HTML).
         * По умолчанию: false
         */
        contentAutoTransformation: false,
      },
    
      /**
       * Конфигурация маршрутизации и middleware.
       */
      routing: {
        /**
         * Стратегия маршрутизации по языкам.
         * - "prefix-no-default": Префикс для всех языков, кроме основного (например, /dashboard, /fr/dashboard).
         * - "prefix-all": Префикс для всех языков (например, /en/dashboard, /fr/dashboard).
         * - "no-prefix": Отсутствие языка в URL.
         * - "search-params": Использование ?locale=...
         * По умолчанию: "prefix-no-default"
         */
        mode: "prefix-no-default",
    
        /**
         * Включает прокси маршрутизации локалей Intlayer (middleware).
         * Отвечает за определение локали, редиректы и перезапись URL в dev, preview и SSR.
         * - не задано (auto): серверы dev и preview сохраняют маршрутизацию по URL,
         *   игнорируя локаль, сохранённую в cookie и заголовках. Префиксы по-прежнему
         *   разрешаются, локаль по-прежнему сохраняется, а определение Accept-Language
         *   по-прежнему действует. В продакшене ведёт себя как `true`.
         * - true: полное поведение во всех окружениях.
         * - false: маршрутизация локалей отключена.
         * По умолчанию: undefined (auto)
         */
        enableProxy: undefined,
    
        /**
         * Где хранить выбранный пользователем язык.
         * Опции: 'cookie', 'localStorage', 'sessionStorage', 'header' или их массив.
         * По умолчанию: ['cookie', 'header']
         */
        storage: ["cookie", "header"],
    
        /**
         * Базовый путь для URL-адресов приложения.
         * По умолчанию: ""
         */
        basePath: "",
    
        /**
         * Пользовательские правила перезаписи URL для путей на конкретных языках.
         */
        rewrite: nextjsRewrite({
          "/[locale]/about": {
            en: "/[locale]/about",
            fr: "/[locale]/a-propos",
          },
        }),
    
        /**
         * Сопоставляет локали с именами хостов доменов для маршрутизации на основе доменов.
         * URL-адреса для этих локалей будут абсолютными (например, https://intlayer.cn/).
         * Домен подразумевает локаль, поэтому к пути не добавляется префикс локали.
         * По умолчанию: undefined
         */
        domains: {
          en: "intlayer.org",
          zh: "intlayer.cn",
        },
      },
    
      /**
       * Настройки поиска и обработки файлов контента.
       */
      content: {
        /**
         * Расширения файлов для сканирования словарей.
         * По умолчанию: ['.content.ts', '.content.js', '.content.json' и т.д.]
         */
        fileExtensions: [".content.ts", ".content.js", ".content.json"],
    
        /**
         * Директории, где находятся файлы .content.
         * По умолчанию: ["."]
         */
        contentDir: ["src"],
    
        /**
         * Директория с исходным кодом.
         * Используется для оптимизации сборки и преобразования кода.
         * По умолчанию: ["."]
         */
        codeDir: ["src"],
    
        /**
         * Шаблоны для исключения из сканирования.
         * По умолчанию: ['node_modules', '.intlayer' и т.д.]
         */
        excludedPath: ["node_modules"],
    
        /**
         * Нужно ли отслеживать изменения и пересобирать словари во время разработки.
         * По умолчанию: true в режиме разработки
         */
        watch: true,
    
        /**
         * Команда для форматирования вновь созданных / обновленных файлов .content.
         */
        formatCommand: 'npx prettier --write "{{file}}"',
      },
    
      /**
       * Конфигурация визуального редактора.
       */
      editor: {
        /**
         * Включен ли визуальный редактор.
         * По умолчанию: false
         */
        enabled: true,
    
        /**
         * URL вашего приложения для валидации источника (origin).
         * По умолчанию: ""
         */
        applicationURL: "http://localhost:3000",
    
        /**
         * Порт для локального сервера редактора.
         * По умолчанию: 8000
         */
        port: 8000,
    
        /**
         * Публичный URL для редактора.
         * По умолчанию: "http://localhost:8000"
         */
        editorURL: "http://localhost:8000",
    
        /**
         * URL Intlayer CMS.
         * По умолчанию: "https://app.intlayer.org"
         */
        cmsURL: "https://app.intlayer.org",
    
        /**
         * URL серверного API.
         * По умолчанию: "https://back.intlayer.org"
         */
        backendURL: "https://back.intlayer.org",
    
        /**
         * Нужно ли включать синхронизацию контента в реальном времени.
         * По умолчанию: false
         */
        liveSync: true,
      },
    
      /**
       * Конфигурация аналитики (analytics).
       */
      analytics: {
        /**
         * Включён ли сбор аналитики (просмотры страниц, показы контента, события A/B).
         * Требует установленного пакета `@intlayer/analytics` и заданного `editor.clientId` для атрибуции.
         * По умолчанию: true
         */
        enabled: true,
    
        /**
         * Миллисекунды между автоматическими пакетными отправками на бэкенд.
         * По умолчанию: 20000
         */
        flushInterval: 20000,
    
        /**
         * Доля сессий для записи, от 0 (ни одной) до 1 (все).
         * По умолчанию: 1
         */
        sampleRate: 1,
      },
    
      /**
       * Настройки переводов и генерации с помощью ИИ.
       */
      ai: {
        /**
         * Используемый ИИ-провайдер.
         * Опции: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio', 'moonshotai'
         * По умолчанию: 'openai'
         */
        provider: "openai",
    
        /**
         * Используемая модель выбранного провайдера.
         */
        model: "gpt-4o",
    
        /**
         * API-ключ провайдера.
         */
        apiKey: process.env.OPENAI_API_KEY,
    
        /**
         * Глобальный контекст для направления ИИ при генерации переводов.
         */
        applicationContext: "Это приложение для бронирования путешествий.",
    
        /**
         * Базовый URL для ИИ API.
         */
        baseURL: "http://localhost:3000",
    
        /**
         * Сериализация данных
         *
         * Опции:
         * - "json": По умолчанию, надежно; потребляет больше токенов.
         * - "toon": Меньше токенов, менее стабильно, чем JSON.
         *
         * По умолчанию: "json"
         */
        dataSerialization: "json",
      },
    
      /**
       * Настройки сборки и оптимизации.
       */
      build: {
        /**
         * Режим выполнения сборки.
         * - "auto": Автоматическая сборка во время сборки (build time) приложения.
         * - "manual": Требуется явная команда сборки.
         * По умолчанию: "auto"
         */
        mode: "auto",
    
        /**
         * Нужно ли оптимизировать итоговый бандл, удаляя неиспользуемые словари.
         * По умолчанию: true в продакшене
         */
        optimize: true,
    
        /**
         * Минимизировать словари для уменьшения размера бандла.
         * По умолчанию: false
         *
         * Примечание:
         * - Эта опция будет проигнорирована, если `optimize` отключена.
         * - Эта опция будет проигнорирована, если `editor.enabled` имеет значение true.
         */
        minify: true,
    
        /**
         * Удалить неиспользуемые ключи в словарях.
         * По умолчанию: false
         *
         * Примечание:
         * - Эта опция будет проигнорирована, если `optimize` отключена.
         */
        purge: true,
    
        /**
         * Группировать чанки словарей по локали в соответствии с границей разделения
         * кода, которая их использует, чтобы лениво загружаемая страница получала своё
         * содержимое одним запросом.
         * По умолчанию: true
         *
         * Примечание:
         * - Применяется только к словарям с `importMode: 'dynamic'`.
         */
        chunkGrouping: true,
    
        /**
         * Загружать словарь вместе с чанком, который его использует, вместо получения
         * после отрисовки этого чанка. Чтения отрисовываются синхронно вместо
         * приостановки, поэтому при навигации больше не мелькает состояние загрузки.
         * По умолчанию: true
         *
         * Примечание:
         * - Ожидается только разрешённая локаль, поэтому страница загружает лишь тот
         *   язык, который отображает.
         */
        dictionariesPreload: true,
    
        /**
         * Формат вывода для сгенерированных файлов словарей.
         * По умолчанию: ['cjs', 'esm']
         */
        outputFormat: ["cjs", "esm"],
    
        /**
         * Должна ли сборка проверять типы TypeScript.
         * По умолчанию: false
         */
        checkTypes: false,
      },
    
      /**
       * Конфигурация логгера.
       */
      log: {
        /**
         * Уровень логирования.
         * - "default": Стандартное логирование.
         * - "verbose": Подробное отладочное логирование.
         * - "disabled": Без логирования.
         * По умолчанию: "default"
         */
        mode: "default",
    
        /**
         * Префикс для всех сообщений лога.
         * По умолчанию: "[intlayer]"
         */
        prefix: "[intlayer]",
      },
    
      /**
       * Конфигурация системы (продвинутые случаи использования)
       */
      system: {
        /**
         * Директория для хранения локализованных словарей.
         */
        dictionariesDir: ".intlayer/dictionary",
    
        /**
         * Директория для расширения модулей (module augmentation).
         */
        moduleAugmentationDir: ".intlayer/types",
    
        /**
         * Директория для хранения неслитых (unmerged) словарей.
         */
        unmergedDictionariesDir: ".intlayer/unmerged_dictionary",
    
        /**
         * Директория для хранения типов словарей.
         */
        typesDir: ".intlayer/types",
    
        /**
         * Директория, где хранятся основные файлы приложения.
         */
        mainDir: ".intlayer/main",
    
        /**
         * Директория, где хранятся скомпилированные файлы конфигурации.
         */
        configDir: ".intlayer/config",
    
        /**
         * Директория для файлов кэша.
         */
        cacheDir: ".intlayer/cache",
      },
    
      /**
       * Конфигурация компилятора (продвинутые случаи использования)
       */
      compiler: {
        /**
         * Нужно ли включать компилятор.
         *
         * - false: Отключить компилятор.
         * - true: Включить компилятор.
         * - "build-only": Пропускать компилятор при разработке для ускорения запуска.
         *
         * По умолчанию: false
         */
        enabled: true,
    
        /**
         * Определяет путь для выходных файлов. Заменяет `outputDir`.
         *
         * - Пути `./` разрешаются относительно директории компонента.
         * - Пути `/` разрешаются относительно корня проекта (`baseDir`).
         *
         * - Наличие переменной `{{locale}}` в пути активирует генерацию отдельных словарей для каждого языка.
         *
         * Пример:
         * ```ts
         * {
         *   // Создавать многоязычные файлы .content.ts рядом с компонентом
         *   output: ({ fileName, extension }) => `./${fileName}${extension}`,
         *
         *   // output: './{{fileName}}{{extension}}', // Эквивалентно через шаблонную строку
         * }
         * ```
         *
         * ```ts
         * {
         *   // Создавать централизованные JSON по языкам в корне проекта
         *   output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
         *
         *   // output: '/locales/{{locale}}/{{key}}.content.json', // Эквивалентно через шаблонную строку
         * }
         * ```
         *
         * Список переменных:
         *   - `fileName`: Имя файла.
         *   - `key`: Ключ контента.
         *   - `locale`: Язык контента (locale).
         *   - `extension`: Расширение файла.
         *   - `componentFileName`: Имя файла компонента.
         *   - `componentExtension`: Расширение файла компонента.
         *   - `format`: Формат словаря.
         *   - `componentFormat`: Формат словаря компонента.
         *   - `componentDirPath`: Путь к директории компонента.
         */
        output: ({ locale, key }) => `compiler/${locale}/${key}.json`,
    
        /**
         * Сохранять ли компоненты после их преобразования.
         * Таким образом, компилятор можно запустить один раз для преобразования приложения, а затем удалить.
         */
        saveComponents: false,
    
        /**
         * Вставлять в сгенерированный файл только контент. Полезно для вывода в формате i18next или ICU MessageFormat JSON по языкам.
         */
        noMetadata: false,
    
        /**
         * Префикс ключа словаря
         */
        dictionaryKeyPrefix: "", // Добавить опциональный префикс для извлеченных ключей словарей
      },
    
      /**
       * Пользовательские схемы для валидации содержимого словарей.
       */
      schemas: {
        "my-schema": z.object({
          title: z.string(),
        }),
      },
    
      /**
       * Конфигурация словаря.
       */
      dictionary: {
        /**
         * Управляет способом импорта словарей.
         * - "static": Статически импортируется во время сборки.
         * - "dynamic": Динамически импортируется с помощью Suspense.
         * - "fetch": Динамически загружается через API живой синхронизации.
         */
        importMode: "static",
    
        /**
         * Формат сообщений по умолчанию для всех словарей в проекте.
         * - 'intlayer': Собственный формат intlayer (по умолчанию).
         * - 'icu': Формат сообщений ICU.
         * - 'i18next': Формат i18next.
         * - 'vue-i18n': Формат Vue I18n.
         * - 'po': Формат GNU Gettext PO.
         */
        format: "icu",
      },
    
      /**
       * Конфигурация плагинов.
       */
      plugins: [
        syncJSON({
          format: "icu",
          source: ({ locale }) => `./messages/${locale}.json`,
        }),
      ],
    };
    
    export default config;
    

    Справочник по конфигурации

    Ниже описаны различные параметры конфигурации, доступные в Intlayer.

    Конфигурация интернационализации (Internationalization)

    Определяет настройки, связанные с интернационализацией, включая доступные языки и язык по умолчанию.

    ПолеОписаниеТипПо умолчаниюПримерПримечание
    localesСписок языков, поддерживаемых в приложении.string[][Locales.ENGLISH]['en', 'fr', 'es']
    requiredLocalesСписок обязательных языков в приложении.string[][][]• Если пусто, все языки обязательны в режиме strict.
    • Убедитесь, что обязательные языки также определены в поле locales.
    strictModeОбеспечивает надежную реализацию интернационализированного контента с помощью TypeScript.string'inclusive'• Если "strict": функция t требует определения каждого объявленного языка - вызывает ошибку, если какой-то отсутствует или не объявлен.
    • Если "inclusive": предупреждает об отсутствующих языках, но разрешает использование существующих необъявленных.
    • Если "loose": принимает любой существующий язык.
    defaultLocaleЯзык по умолчанию, используемый как запасной, если запрошенный язык не найден.stringLocales.ENGLISH'en'Используется для определения языка, когда он не указан в URL, куки или заголовке.

    Конфигурация редактора (Editor)

    Определяет настройки для встроенного визуального редактора, включая порт сервера и статус включения.

    ПолеОписаниеТипПо умолчаниюПримерПримечание
    applicationURLURL приложения.stringundefined'http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • Используется для ограничения источника (origin) редактора из соображений безопасности.
    • Если установлено в '*', редактор доступен из любого источника.
    portПорт, используемый сервером визуального редактора.number8000
    editorURLURL сервера редактора.string'http://localhost:8000''http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • Используется для ограничения источников, которые могут взаимодействовать с приложением.
    • Если установлено в '*', доступно из любого источника.
    • Должно быть установлено, если изменен порт или редактор хостится на другом домене.
    cmsURLURL Intlayer CMS.string'https://app.intlayer.org''https://app.intlayer.org'
    backendURLURL бэкенд-сервера.stringhttps://back.intlayer.orghttp://localhost:4000
    enabledДолжно ли приложение взаимодействовать с визуальным редактором.booleanfalseprocess.env.NODE_ENV !== 'production'• Если false, редактор не может взаимодействовать с приложением.
    • Отключение для определенных окружений повышает безопасность.
    clientIdПозволяет пакетам intlayer аутентифицироваться на бэкенде через oAuth2. Чтобы получить токен доступа, перейдите на intlayer.org/project.string |
    undefined
    undefinedДолжно храниться в секрете; используйте переменные окружения.
    clientSecretПозволяет пакетам intlayer аутентифицироваться на бэкенде через oAuth2. Чтобы получить токен доступа, перейдите на intlayer.org/project.string |
    undefined
    undefinedДолжно храниться в секрете; используйте переменные окружения.
    dictionaryPriorityStrategyСтратегия приоритета словарей при наличии и локальных, и удаленных словарей.string'local_first''distant_first'• 'distant_first': приоритет удаленных словарей над локальными.
    • 'local_first': приоритет локальных словарей над удаленными.
    liveSyncДолжен ли сервер приложения мгновенно перезагружать контент при обнаружении изменений в CMS
    Визуальном редакторе
    Бэкенде.
    booleantruetrue• При добавлении/обновлении словаря приложение обновляет контент страницы.
    • Live Sync выносит контент на другой сервер, что может немного влиять на производительность.
    • Рекомендуется хостить оба на одной машине.
    liveSyncPortПорт сервера live sync.number40004000
    liveSyncURLURL сервера live sync.string'http://localhost:{liveSyncPort}''https://example.com'По умолчанию указывает на localhost; может быть изменен на удаленный сервер live sync.

    Конфигурация аналитики (Analytics)

    Определяет настройки, связанные с аналитикой Intlayer: сбор данных о том, какой контент действительно показывается пользователям (просмотры страниц, показы контента), и поддержку A/B-тестирования контента.

    Аналитика работает по принципу opt-out: она включена по умолчанию и начинает собирать данные, как только установлен пакет @intlayer/analytics и настроен ключ проекта (editor.clientId) для атрибуции. Установите analytics.enabled в false, или не устанавливайте пакет, и вся интеграция аналитики будет удалена из сборки вашего приложения (dead-code elimination).

    ПолеОписаниеТипПо умолчаниюПримерПримечание
    enabledВключает сбор аналитики (просмотры страниц, показы контента, события A/B).booleantruefalseТребует установленного пакета @intlayer/analytics и заданного editor.clientId для атрибуции; иначе аналитика остаётся отключённой, даже если enabled равно true.
    flushIntervalМиллисекунды между автоматическими пакетными отправками на бэкенд.number2000010000
    sampleRateДоля сессий для записи, от 0 (ни одной) до 1 (все).number10.5Выборка детерминирована для каждой сессии, поэтому записанная сессия сообщает обо всех своих событиях (без частичных воронок).

    Конфигурация маршрутизации (Routing)

    Настройки, управляющие поведением маршрутизации, включая структуру URL, хранение языков и управление middleware.

    ПолеОписаниеТипПо умолчаниюПримерПримечание
    modeРежим маршрутизации URL для управления языками.'prefix-no-default' |
    'prefix-all' |
    'no-prefix' |
    'search-params'
    'prefix-no-default''prefix-no-default': /dashboard (en) или /fr/dashboard (fr). 'prefix-all': /en/dashboard. 'no-prefix': язык управляется другими способами. 'search-params': /dashboard?locale=frНе влияет на управление куками или хранилищем языков.
    enableProxyВключает прокси маршрутизации локалей Intlayer (middleware).boolean |
    undefined
    undefined (auto)true• Не задано (auto): серверы dev и preview игнорируют локаль из cookie/заголовков как источник редиректа; префиксы, сохранение локали и определение Accept-Language продолжают работать. В продакшене ведёт себя как true.
    • true: полное поведение везде.
    • false: маршрутизация локалей отключена. В Next.js middleware intlayerProxy становится сквозным.
    storageКонфигурация хранения языка на клиенте.false |
    'cookie' |
    'localStorage' |
    'sessionStorage' |
    'header' |
    CookiesAttributes |
    StorageAttributes |
    Array
    ['cookie', 'header']'localStorage'
    [{ type: 'cookie', name: 'custom-locale', secure: true }]
    См. таблицу параметров хранения ниже.
    basePathБазовый путь для URL-адресов приложения.string'''/my-app'Если приложение находится по адресу https://example.com/my-app, basePath - '/my-app', а URL становятся https://example.com/my-app/en.
    rewriteПользовательские правила перезаписи URL, которые переопределяют режим маршрутизации по умолчанию для определенных путей. Поддерживает динамические параметры [param].Record<string, StrictModeLocaleMap<string>>undefinedСм. пример ниже• Правила перезаписи имеют приоритет над mode.
    • Работает с Next.js и Vite.
    • getLocalizedUrl() автоматически применяет соответствующие правила.
    • См. Пользовательские перезаписи URL.
    domainsСопоставляет локали с именами хостов доменов для маршрутизации на основе доменов. Когда установлено, URL-адреса для локали используют этот домен в качестве базы (абсолютный URL), и к пути не добавляется префикс локали.Partial<Record<Locale, string>>undefined{ zh: 'intlayer.zh', fr: 'intlayer.org' }• Протокол по умолчанию - https://, если он не указан в имени хоста.
    • Сам домен идентифицирует локаль, поэтому префикс /zh/ не добавляется.
    • getLocalizedUrl('/', 'zh') возвращает https://intlayer.zh/.

    Пример rewrite:

    typescript
    routing: {
      mode: "prefix-no-default", // Запасная стратегия
      rewrite: nextjsRewrite({
        "/about": {
          en: "/about",
          fr: "/a-propos",
        },
        "/product/[slug]": {
          en: "/product/[slug]",
          fr: "/produit/[slug]",
        },
        "/blog/[category]/[id]": {
          en: "/blog/[category]/[id]",
          fr: "/journal/[category]/[id]",
        },
      }),
    }
    

    Параметры хранения (Storage)

    ЗначениеПримечаниеОписание
    'cookie'• Для соответствия GDPR обеспечьте надлежащее согласие пользователя.
    • Настраивается через CookiesAttributes ({ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }).
    Хранит язык в куках - доступно как на клиенте, так и на сервере.
    'localStorage'• Не истекает, если не будет явно очищено.
    • Прокси Intlayer не может получить к этому доступ.
    • Настраивается через StorageAttributes ({ type: 'localStorage', name: 'custom-locale' }).
    Хранит язык в браузере без ограничения срока - только на стороне клиента.
    'sessionStorage'• Очищается при закрытии вкладки/окна.
    • Прокси Intlayer не может получить к этому доступ.
    • Настраивается через StorageAttributes ({ type: 'sessionStorage', name: 'custom-locale' }).
    Хранит язык на время сессии страницы - только на стороне клиента.
    'header'• Полезно для вызовов API.
    • Сторона клиента не может получить доступ.
    • Настраивается через StorageAttributes ({ type: 'header', name: 'custom-locale' }).
    Хранит или передает язык через HTTP-заголовки - только на стороне сервера.

    Атрибуты куки (Cookies Attributes)

    При использовании хранения в куках можно настроить дополнительные атрибуты:

    ПолеОписаниеТип
    nameИмя куки. По умолчанию: 'INTLAYER_LOCALE'string
    domainДомен куки. По умолчанию: undefinedstring
    pathПуть куки. По умолчанию: undefinedstring
    secureТребовать HTTPS. По умолчанию: undefinedboolean
    httpOnlyФлаг HTTP-only. По умолчанию: undefinedboolean
    sameSiteПолитика SameSite.'strict' |
    'lax' |
    'none'
    expiresЧисло представляет дни с момента создания; дата (или строка в формате ISO) является абсолютной датой истечения. По умолчанию: undefinedDate |
    number |
    string
    maxAgeВремя жизни в секундах с момента создания. Имеет приоритет над expires. По умолчанию: undefinednumber

    Атрибуты хранилища (Storage Attributes)

    При использовании localStorage или sessionStorage:

    ПолеОписаниеТип
    typeТип хранилища.'localStorage' |
    'sessionStorage'
    nameИмя ключа в хранилище. По умолчанию: 'INTLAYER_LOCALE'string

    Примеры конфигурации

    Вот несколько распространенных примеров конфигурации для новой структуры маршрутизации v7:

    Базовая конфигурация (по умолчанию):

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default",
        storage: "localStorage",
        basePath: "",
      },
    };
    
    export default config;
    

    Конфигурация с соблюдением GDPR:

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default",
        storage: [
          {
            type: "localStorage",
            name: "user-locale",
          },
          {
            type: "cookie",
            name: "user-locale",
            secure: true,
            sameSite: "strict",
            httpOnly: false,
          },
        ],
        basePath: "",
      },
    };
    
    export default config;
    

    Режим параметров поиска (Search Params):

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "search-params",
        storage: "localStorage",
        basePath: "",
      },
    };
    
    export default config;
    

    Режим без префикса с кастомным хранилищем:

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "no-prefix",
        storage: {
          type: "sessionStorage",
          name: "app-locale",
        },
        basePath: "/my-app",
      },
    };
    
    export default config;
    

    Пользовательская перезапись URL с динамическими путями:

    typescript
    // intlayer.config.ts
    import { nextjsRewrite } from "intlayer/routing";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default", // Запасной вариант для неперезаписанных путей
        storage: "cookie",
        rewrite: nextjsRewrite({
          "/about": {
            en: "/about",
            fr: "/a-propos",
          },
          "/product/[slug]": {
            en: "/product/[slug]",
            fr: "/produit/[slug]",
          },
          "/blog/[category]/[id]": {
            en: "/blog/[category]/[id]",
            fr: "/journal/[category]/[id]",
          },
        }),
      },
    };
    
    export default config;
    

    Конфигурация контента (Content)

    Настройки, связанные с тем, как контент управляется в приложении, включая имена директорий, расширения файлов и производные конфигурации.

    ПолеОписаниеТипПо умолчаниюПримерПримечание
    watchУказывает, должен ли Intlayer отслеживать изменения в файлах декларации контента для пересборки словарей.booleantrue
    fileExtensionsРасширения файлов для сканирования при компиляции словарей.string[]['.content.ts', '.content.js', '.content.cjs', '.content.mjs', '.content.json', '.content.json5', '.content.jsonc', '.content.tsx', '.content.jsx']['.data.ts', '.data.js', '.data.json']Настройка поможет избежать конфликтов.
    contentDirПуть к директории, где хранятся файлы определения контента (.content.*).string[]['.']['src', '../../ui-library', require.resolve("@my-package/content"), '@my-package/content']Используется для отслеживания файлов контента и пересборки словарей.
    codeDirПуть к директории, где хранится код, относительно базовой директории.string[]['.']['src', '../../ui-library']• Используется для отслеживания файлов кода для преобразования (удаление лишнего, оптимизация).
    • Отделение от contentDir может повысить производительность.
    excludedPathДиректории, исключенные из сканирования контента.string[]['**/node_modules/**', '**/dist/**', '**/build/**', '**/.intlayer/**', '**/.next/**', '**/.nuxt/**', '**/.expo/**', '**/.vercel/**', '**/.turbo/**', '**/.tanstack/**']Пока не используется; планируется в будущем.
    formatCommandКоманда для форматирования файлов контента при их локальной записи Intlayer.stringundefined'npx prettier --write "{{file}}" --log-level silent' (Prettier), 'npx biome format "{{file}}" --write --log-level none' (Biome), 'npx eslint --fix "{{file}}" --quiet' (ESLint)• {{file}} будет заменено на путь к файлу.
    • Если не определено, Intlayer определит автоматически (тестирует prettier, biome, eslint).

    Конфигурация системы

    Параметры, связанные с внутренними путями и результатами вывода Intlayer. Эти параметры обычно являются внутренними и не должны требовать изменения пользователем.

    FieldDescriptionTypeDefaultExampleNote
    baseDirБазовая директория для проекта.stringprocess.cwd()'/path/to/project'Используется для разрешения всех директорий, связанных с Intlayer.
    dictionariesDirПуть директории для хранения словарей локализации.string'.intlayer/dictionary'
    moduleAugmentationDirДиректория для расширения модулей, обеспечивающая лучшие предложения IDE и проверку типов.string'.intlayer/types''intlayer-types'Убедитесь, что это включено в tsconfig.json.
    unmergedDictionariesDirДиректория для хранения неслитых словарей.string'.intlayer/unmerged_dictionary'
    typesDirДиректория для хранения типов словарей.string'.intlayer/types'
    mainDirДиректория, где хранятся основные файлы приложения.string'.intlayer/main'
    configDirДиректория, где хранятся файлы конфигурации.string'.intlayer/config'
    cacheDirДиректория, где хранятся файлы кеша.string'.intlayer/cache'

    Конфигурация словарей (Dictionary)

    Параметры, управляющие операциями со словарями, включая поведение автоматического заполнения и генерацию контента.

    Эта конфигурация словаря служит двум основным целям:

    1. Default Values: Определите значения по умолчанию при создании файлов объявления контента
    2. Fallback Behavior: Предоставьте резервные значения, когда определенные поля не определены, позволяя вам глобально определить поведение операций словаря

    Для получения дополнительной информации о файлах объявления контента и способе применения значений конфигурации см. Документацию по файлам контента.

    ПолеОписаниеТипПо умолчаниюПримерПримечание
    fillУправляет тем, как генерируются выходные файлы автозаполнения (ИИ-перевод).boolean |
    FilePathPattern |
    Partial<Record<Locale, boolean | FilePathPattern>>
    true{ en: '/locales/en/{{key}}.json', fr: ({ key }) => '/locales/fr/${key}.json', es: false }• true: путь по умолчанию (тот же файл, что и источник).
    • false: отключить.
    • Шаблон строка/функция генерирует файлы по языкам.
    • Объект по языкам: каждый язык соответствует своему шаблону; false игнорирует этот язык.
    • Включение {{locale}} активирует генерацию по языкам.
    • fill на уровне словаря всегда имеет приоритет над этой глобальной настройкой.
    descriptionПомогает редактору и CMS понять назначение словаря. Также используется как контекст для генерации переводов с помощью ИИ.stringundefined'User profile section'
    localeПреобразует словарь в формат для конкретного языка. Каждое объявленное поле становится узлом перевода. Если отсутствует, словарь считается многоязычным.LocalesValuesundefined'en'Используйте это, если словарь предназначен для одного конкретного языка, а не содержит переводы для нескольких.
    contentAutoTransformationАвтоматически преобразует строки контента в типизированные узлы (markdown, HTML или вставка).boolean |
    { markdown?: boolean; html?: boolean; insertion?: boolean }
    falsetrue• Markdown : ### Title → md('### Title').
    • HTML : <div>Title</div> → html('<div>Title</div>').
    • Вставка : Hello {{name}} → insert('Hello {{name}}').
    locationУказывает, где хранятся файлы словарей и как они синхронизируются с CMS.'local' |
    'remote' |
    'hybrid' |
    'plugin' |
    string
    'local''hybrid'• 'local': управление только локально.
    • 'remote': управление только удаленно (CMS).
    • 'hybrid': управление и локально, и удаленно.
    • 'plugin' или кастомная строка: управление плагином или кастомным источником.
    importModeУправляет способом импорта словарей.'static' |
    'dynamic' |
    'fetch'
    'static''dynamic'• 'static': статический импорт.
    • 'dynamic': динамический импорт через Suspense.
    • 'fetch': получение через Live Sync API; откат к 'dynamic' при неудаче.
    • Требует плагины @intlayer/babel и @intlayer/swc.
    • Ключи должны быть объявлены статически.
    • Игнорируется, если optimize выключен.
    • Не влияет на getIntlayer, getDictionary и т.д.
    formatФормат сообщений по умолчанию для всех словарей в проекте.'intlayer' |
    'icu' |
    'i18next' |
    'vue-i18n' |
    'po'
    'intlayer''icu'• 'intlayer': Собственный формат intlayer.
    • 'icu': Формат сообщений ICU.
    • 'i18next': Формат i18next.
    • 'vue-i18n': Формат Vue I18n.
    • 'po': Формат GNU Gettext PO.
    priorityПриоритет словаря. Более высокие значения побеждают более низкие при разрешении конфликтов между словарями.numberundefined1
    liveУстарело - используйте importMode: 'fetch'. Указывало, должен ли контент словаря получаться динамически через Live Sync API.booleanundefinedПереименовано в importMode: 'fetch' в v8.0.0.
    schemaГенерируется автоматически Intlayer для валидации JSON-схемы.'https://intlayer.org/schema.json'авто-генерацияНе редактируйте вручную.
    titleПомогает идентифицировать словарь в редакторе и CMS.stringundefined'User Profile'
    tagsКатегоризирует словари и предоставляет контекст или инструкции для редактора и ИИ.string[]undefined['user', 'profile']
    versionВерсия удаленного словаря; помогает отслеживать текущую используемую версию.stringundefined'1.0.0'• Управляется в CMS.
    • Не редактируйте локально.

    Пример fill:

    ts
    dictionary: {
      fill: {
        en: "/locales/en/{{key}}.content.json",
        fr: ({ key }) => `/locales/fr/${key}.content.json`,
        es: false,
      },
    };
    

    Конфигурация логгера (Log)

    Параметры для настройки вывода логов Intlayer.

    ПолеОписаниеТипПо умолчаниюПримерПримечание
    modeУказывает режим логгера.'default' |
    'verbose' |
    'disabled'
    'default''verbose'• 'verbose': логирует больше информации для отладки.
    • 'disabled': полностью отключает логгер.
    prefixПрефикс для всех сообщений в логе.string'[intlayer] ''[my prefix] '

    Конфигурация ИИ (AI)

    Настройки, управляющие ИИ-функциями Intlayer, включая провайдера, модель и API-ключ.

    Эта конфигурация опциональна, если вы зарегистрированы в Intlayer Dashboard с ключом доступа. Intlayer будет автоматически управлять наиболее эффективным и экономичным решением ИИ для ваших нужд. Использование параметров по умолчанию гарантирует лучшую долгосрочную поддержку, так как Intlayer постоянно обновляется для использования наиболее актуальных моделей.

    Если вы предпочитаете использовать собственный API-ключ или конкретную модель, вы можете определить свою конфигурацию ИИ. Эта конфигурация ИИ будет использоваться глобально в вашей среде Intlayer. Команды CLI будут использовать эти настройки по умолчанию для таких команд, как fill, так же как и SDK, визуальный редактор и CMS. Вы можете переопределить эти значения по умолчанию для конкретных случаев использования через параметры команд.

    Intlayer поддерживает несколько ИИ-провайдеров для максимальной гибкости. На данный момент поддерживаются следующие провайдеры:

    • OpenAI (По умолчанию)
    • Anthropic Claude
    • Mistral AI
    • DeepSeek
    • Google Gemini
    • Google AI Studio
    • Google Vertex
    • Meta Llama
    • Ollama
    • OpenRouter
    • Alibaba Cloud
    • Fireworks
    • Hugging Face
    • Groq
    • Amazon Bedrock
    • Together.ai
    • LM Studio
    ПолеОписаниеТипПо умолчаниюПримерПримечание
    providerПровайдер, используемый для ИИ-функций Intlayer.'openai' |
    'anthropic' |
    'mistral' |
    'deepseek' |
    'gemini' |
    'ollama' |
    'openrouter' |
    'alibaba' |
    'fireworks' |
    'groq' |
    'huggingface' |
    'bedrock' |
    'googleaistudio' |
    'googlevertex' |
    'togetherai' |
    'lmstudio' |
    'moonshotai'
    undefined'anthropic'Разные провайдеры требуют разные API-ключи и имеют разную стоимость.
    modelМодель, используемая для ИИ-функций.stringНет'gpt-4o-2024-11-20'Конкретная модель зависит от провайдера.
    temperatureУправляет случайностью ответов ИИ.numberНет0.1Выше температура = более креативно и менее предсказуемо.
    apiKeyВаш API-ключ для выбранного провайдера.stringНетprocess.env.OPENAI_API_KEYДолжно храниться в секрете; используйте переменные окружения.
    applicationContextДополнительный контекст о вашем приложении, чтобы помочь ИИ генерировать более точные переводы (домен, целевая аудитория, тон, терминология).stringНет'My own application context'Можно использовать для добавления правил (например: "You should not transform URLs").
    baseURLБазовый URL для ИИ API.stringНет'https://api.openai.com/v1'
    'http://localhost:5000'
    Может указывать на локальный или кастомный эндпоинт ИИ API.
    dataSerializationФормат сериализации данных для ИИ-функций.'json' |
    'toon'
    undefined'toon'• 'json': по умолчанию, надежно; потребляет больше токенов.
    • 'toon': меньше токенов, менее стабильно.
    • Дополнительные параметры передаются в модель как контекст (усилия рассуждения и т.д.).

    Конфигурация сборки (Build)

    Параметры, управляющие тем, как Intlayer оптимизирует и компилирует интернационализацию вашего приложения.

    Опции сборки применяются к плагинам @intlayer/babel и @intlayer/swc.

    В режиме разработки Intlayer использует статический импорт словарей для упрощения процесса разработки.
    Во время оптимизации Intlayer заменит вызовы словарей для оптимизации чанкинга (chunking), чтобы итоговый бандл импортировал только те словари, которые действительно используются.
    ПолеОписаниеТипПо умолчаниюПримерПримечание
    modeУправляет режимом сборки.'auto' |
    'manual'
    'auto''manual'• 'auto': сборка запускается автоматически при сборке приложения.
    • 'manual': выполняется только при явном вызове команды сборки.
    • Можно использовать для отключения сборки словарей (например, чтобы избежать выполнения в средах Node.js).
    optimizeУправляет тем, должна ли выполняться оптимизация сборки.booleanundefinedprocess.env.NODE_ENV === 'production'• Если не определено, оптимизация запускается при сборке фреймворка (Vite/Next.js).
    • true форсирует оптимизацию даже в dev режиме.
    • false отключает ее.
    • Если включено, заменяет вызовы словарей для оптимизации чанкинга.
    • Требует плагины @intlayer/babel и @intlayer/swc.
    minifyМинимизировать словари для уменьшения размера бандла.booleanfalse• Указывает, должен ли бандл быть минифицирован.
    • По умолчанию: true в продакшене.
    • Эта опция будет проигнорирована, если optimize отключена.
    • Эта опция будет проигнорирована, если editor.enabled имеет значение true.
    purgeУдалить неиспользуемые ключи в словарях.booleanfalse• Указывает, должен ли бандл быть очищен.
    • По умолчанию: true в продакшене.
    • Эта опция будет проигнорирована, если optimize отключена.
    checkTypesУказывает, должна ли сборка проверять типы TypeScript и логировать ошибки.booleanfalseМожет замедлить процесс сборки.
    chunkGroupingОпределяет, следует ли группировать чанки словарей по локали в соответствии с границей разделения кода, которая их использует.booleantrue• Без группировки страница, собранная из множества компонентов, отправляет по одному запросу на каждый словарь.
    • Словари, достижимые из нескольких границ, переносятся в общий чанк, поэтому ни одна страница не содержит контент другой.
    • Применяется только к словарям с importMode: 'dynamic'.
    • Применяется только к клиентской сборке и только при бандлинге (не в режиме разработки).
    dictionariesPreloadОпределяет, должен ли словарь загружаться вместе с чанком, который его использует, вместо получения после отрисовки этого чанка.booleantrue• Сгенерированная точка входа ожидает локаль просмотра на верхнем уровне, поэтому лениво загружаемый маршрут не считается загруженным, пока его содержимое не готово.
    • Чтения отрисовываются синхронно вместо приостановки, поэтому при навигации больше не мелькает состояние загрузки.
    • Ожидается только разрешённая локаль, поэтому страница загружает лишь тот язык, который отображает.
    • Применяется только к словарям с importMode: 'dynamic' в клиентской сборке.
    • Требуется сборщик с поддержкой top-level await (Vite, esbuild).
    outputFormatУправляет выходным форматом словарей.('esm' | 'cjs')[]['esm', 'cjs']['cjs']
    traversePatternШаблоны, определяющие, какие файлы сканировать во время оптимизации.string[]['**/*.{tsx,ts,js,mjs,cjs,jsx,vue,svelte,svte}', '!**/node_modules/**', '!**/dist/**', '!**/.intlayer/**', '!**/*.config.*', '!**/*.test.*', '!**/*.spec.*', '!**/*.stories.*']['src/**/*.{ts,tsx}', '../ui-library/**/*.{ts,tsx}', '!**/node_modules/**']• Ограничьте оптимизацию релевантными файлами для повышения производительности сборки.
    • Игнорирует, если optimize выключен.
    • Использует шаблоны glob.

    Конфигурация компилятора (Compiler)

    Настройки, управляющие компилятором Intlayer, который извлекает словари напрямую из ваших компонентов.

    ПолеОписаниеТипПо умолчаниюПримерПримечание
    enabledУказывает, должен ли компилятор быть включен для извлечения словарей.boolean |
    'build-only'
    true'build-only''build-only' пропускает компилятор при разработке для ускорения сборки; выполняется только при командах сборки.
    dictionaryKeyPrefixПрефикс для извлеченных ключей словарей.string'''my-prefix-'Добавляется к сгенерированному ключу (на основе имени файла) для предотвращения конфликтов.
    saveComponentsДолжны ли компоненты сохраняться после их преобразования.booleanfalse• Если true, перезаписывает исходные файлы их преобразованными версиями.
    • Компилятор можно удалить после одного запуска.
    outputОпределяет путь для выходных файлов. Заменяет outputDir. Поддерживает переменные шаблона: {{fileName}},
    {{key}},
    {{locale}},
    {{extension}},
    {{componentFileName}},
    {{componentExtension}},
    {{format}},
    {{componentFormat}},
    {{componentDirPath}}.
    boolean |
    FilePathPattern |
    Partial<Record<Locale, boolean | FilePathPattern>>
    undefined'./{{fileName}}{{extension}}'
    '/locales/{{locale}}/{{key}}.json'
    { en: ({ key }) => './locales/en/${key}.json', fr: '...', es: false }
    • Пути ./ разрешаются относительно директории компонента.
    • Пути / относительно корня.
    • {{locale}} включает генерацию по языкам.
    • Поддерживает объектную нотацию для каждого языка.
    noMetadataЕсли true, компилятор опускает метаданные словаря (ключ, обертку контента) из вывода.booleanfalsefalse → {"key":"my-key","content":{"key":"value"}}
    true → {"key":"value"}
    • Полезно для вывода в формате i18next или ICU MessageFormat JSON.
    • Хорошо работает с плагином loadJSON.
    dictionaryKeyPrefixПрефикс ключа словаряstring''Добавить опциональный префикс для извлеченных ключей словарей

    Пользовательские схемы (Custom Schemas)

    ПолеОписаниеТип
    schemasПозволяет определять схемы Zod для валидации структуры ваших словарей.Record<string, ZodSchema>

    Плагины (Plugins)

    ПолеОписаниеТип
    pluginsСписок плагинов Intlayer для включения.IntlayerPlugin[]

    Часто задаваемые вопросы

    В корне вашего проекта, рядом с package.json. Intlayer также принимает intlayer.config.js, intlayer.config.mjs, intlayer.config.cjs и JSON, поэтому файл соответствует той модульной системе, которую использует ваш проект.

    Гораздо меньше, чем при подходе на основе пространств имён, потому что страница никогда не загружает каталог, который не отображает. Разметка, отрендеренная на сервере, разрешает свой контент на сервере, и компилятор во время сборки заменяет вызовы useIntlayer точными записями словаря, которые использует компонент, поэтому неиспользуемые ключи и неиспользуемые языки отбрасываются. Динамические словари разделяют остальное по локалям. По сравнению с обычными альтернативами Intlayer сокращает размер бандла и страницы до 50%. См. оптимизацию бандла и бенчмарк.

    Да, и есть два пути. Вы можете мигрировать контент постепенно с помощью руководства по миграции с i18next или руководства по миграции с next-intl. Или вы можете полностью сохранить свой текущий API: адаптеры совместимости предоставляют точно такой же API, как i18next, react-i18next, next-intl, next-i18next, react-intl, use-intl, vue-i18n и Lingui, но обслуживаемый словарями Intlayer, поэтому меняются импорты, а код компонентов - нет.

    Да. Плагин синхронизации JSON сохраняет ваши файлы /messages/{locale}/{namespace}.json как источник истины и генерирует из них словари Intlayer, в обоих направлениях. Плагин синхронизации PO делает то же самое для каталогов gettext, а файлы по локали позволяют разделить контент по языкам вместо группировки локалей в одном файле.

    Нет. Запустите npx intlayer extract, и Intlayer прочитает ваши исходные файлы, извлечёт строки, видимые пользователю, и запишет файл .content рядом с каждым из них, так что вы просматриваете diff вместо копирования строк в каталог по одной. См. команду extract.

    Для полностью автоматизированного конвейера Компилятор Intlayer делает то же самое во время сборки на исходном коде JSX, TSX, Vue и Svelte, генерируя словари при каждом изменении, поэтому нет ключей, которые нужно поддерживать вручную. Он работает через статический анализ, поэтому строки, существующие только во время выполнения, остаются недоступными, и ему нужно несколько аннотаций, чтобы отличать текст, видимый пользователю, от логики приложения.

    Пять компонентов, все опциональные:

    • Расширение для VS Code: переход от ключа useIntlayer к файлу контента, который его объявляет, извлечение контента из компонента и запуск build, fill, test, push и pull из палитры команд или отдельной вкладки Intlayer.
    • LSP-сервер: та же осведомлённость в любом редакторе, который говорит на LSP, с переходом к определению, поиском всех ссылок, предпросмотром переведённого значения при наведении, автодополнением ключей и полей и предупреждением, когда ключ нигде не объявлен. Он также разрешает вызовы i18next, react-i18next, next-intl и use-intl, что помогает при миграции.
    • MCP-сервер: предоставляет документацию и CLI Intlayer для Cursor, VS Code, Claude Desktop, Claude Code и ChatGPT, чтобы ассистент отвечал по актуальной документации, а не гадал, и мог сам запускать команды вроде intlayer fill.
    • Навыки агентов: сфокусированные навыки, такие как intlayer-config, intlayer-cli и intlayer-content, плюс по одному на фреймворк, которые обучают агента вашей настройке маршрутизации и типам узлов контента.
    • Плагин ESLint: no-raw-text помечает жёстко закодированные строки, с дополнительными правилами для статических ключей словаря и неиспользуемого контента.