Автор:
    Дата створення:2024-08-13Останнє оновлення:2026-08-22

    Документація з конфігурації Intlayer

    Огляд

    Конфігураційні файли Intlayer дозволяють налаштовувати різні аспекти плагіна, такі як інтернаціоналізація (i18n), проміжне ПЗ та керування контентом. Цей документ містить детальний опис кожної властивості в конфігурації.

    Зміст

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

    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": Статичний імпорт під час збірки.
         * - "dynamic": Динамічний імпорт за допомогою Suspense.
         * - "fetch": Динамічне отримання через Live Sync API.
         * За замовчуванням: "static"
         */
        importMode: "static",
    
        /**
         * Стратегія автоматичного заповнення відсутніх перекладів за допомогою AI.
         * Може бути логічним значенням або шаблоном шляху для збереження заповненого контенту.
         * За замовчуванням: true
         */
        fill: true,
    
        /**
         * Фізичне місце розташування файлів словників.
         * - "local": Зберігаються у локальній файловій системі.
         * - "remote": Зберігаються в Intlayer CMS.
         * - "hybrid": Зберігаються і локально, і в Intlayer CMS.
         * - "plugin" (або будь-який рядок): Надаються плагіном або власним джерелом.
         * За замовчуванням: "local"
         */
        location: "local",
    
        /**
         * Чи слід автоматично перетворювати контент (наприклад, Markdown у HTML).
         * За замовчуванням: false
         */
        contentAutoTransformation: false,
      },
    
      /**
       * Конфігурація маршрутизації та проміжного ПЗ.
       */
      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 вашого додатка для перевірки джерела.
         * За замовчуванням: ""
         */
        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.
       */
      ai: {
        /**
         * Використовуваний провайдер 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,
    
        /**
         * Глобальний контекст для допомоги AI під час генерації перекладів.
         */
        applicationContext: "Це додаток для бронювання подорожей.",
    
        /**
         * Базовий URL для AI API.
         */
        baseURL: "http://localhost:3000",
    
        /**
         * Серіалізація даних (Data Serialization)
         *
         * Варіанти:
         * - "json": за замовчуванням, надійний; використовує більше токенів.
         * - "toon": швидше, менше токенів, менш стабільний за JSON.
         *
         * За замовчуванням: "json"
         */
        dataSerialization: "json",
      },
    
      /**
       * Налаштування збірки та оптимізації.
       */
      build: {
        /**
         * Режим виконання збірки.
         * - "auto": Автоматична збірка під час збірки додатка.
         * - "manual": Потрібна явна команда для збірки.
         * За замовчуванням: "auto"
         */
        mode: "auto",
    
        /**
         * Чи слід оптимізувати пакет додатка шляхом видалення невикористовуваних словників.
         * За замовчуванням: true у виробничому середовищі
         */
        optimize: true,
    
        /**
         * Мініфікувати словники для зменшення розміру бандла.
         * За замовчуванням: true
         *
         * Примітка:
         * - Цей параметр буде ігноруватися, якщо `optimize` вимкнено.
         * - Цей параметр буде ігноруватися, якщо `editor.enabled` має значення true.
         */
        minify: true,
    
        /**
         * Видалити невикористовувані ключі в словниках.
         * За замовчуванням: true
         *
         * Примітка:
         * - Цей параметр буде ігноруватися, якщо `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",
    
        /**
         * Директорія для незлитих словників.
         */
        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`: Локаль контенту.
         *   - `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, файлах cookie або заголовку.

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

    Визначає налаштування для візуального редактора, включаючи порт сервера та статус активації.

    ПолеОписТипЗа замовчуваннямПрикладПримітки
    applicationURLURL вашого додатка.stringundefined'http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • Використовується для обмеження джерела редактора з міркувань безпеки.
    • Якщо встановлено '*', редактор доступний з будь-якого джерела.
    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, зберігання локалі та керування проміжним ПЗ.

    ПолеОписТипЗа замовчуваннямПрикладПримітки
    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Не впливає на керування файлами cookie або локальне сховище.
    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 }).
    Зберігає локаль у файлі cookie - доступно і на клієнті, і на сервері.
    'localStorage'• Термін дії не закінчується, поки не буде видалено явно.
    • Intlayer Proxy не має доступу до нього.
    • Можна налаштувати через StorageAttributes ({ type: 'localStorage', name: 'custom-locale' }).
    Зберігає локаль у браузері без терміну дії - лише клієнтська частина.
    'sessionStorage'• Видаляється при закритті вкладки/вікна браузера.
    • Intlayer Proxy не має доступу до нього.
    • Можна налаштувати через StorageAttributes ({ type: 'sessionStorage', name: 'custom-locale' }).
    Зберігає локаль на час сесії сторінки - лише клієнтська частина.
    'header'• Корисно для викликів API.
    • Клієнтська частина не має доступу до нього.
    • Можна налаштувати через StorageAttributes ({ type: 'header', name: 'custom-locale' }).
    Зберігає або передає локаль через HTTP-заголовки - лише серверна частина.

    При використанні зберігання у файлах cookie можна задати додаткові атрибути:

    ПолеОписТип
    nameНазва файлу cookie. За замовчуванням: 'INTLAYER_LOCALE'string
    domainДомен файлу cookie. За замовчуванням: undefinedstring
    pathШлях файлу cookie. За замовчуванням: 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;
    

    Режим без префікса (No-Prefix) з власним сховищем:

    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. Значення за замовчуванням: Визначте значення за замовчуванням під час створення файлів оголошення вмісту
    2. Поведінка при відсутності значення: Надайте резервні значення, коли певні поля не визначені, що дозволяє вам визначити поведінку операцій словника глобально

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

    ПолеОписТипЗа замовчуваннямПрикладПримітки
    fillКерує генерацією вихідних файлів автоматичного заповнення (перекладів AI).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 зрозуміти призначення словника. Також використовується як контекст для генерації перекладів за допомогою AI.stringundefined'User profile section'
    localeПеретворює словник у формат для конкретної локалі. Кожне оголошене поле стає вузлом перекладу. Якщо відсутнє, словник вважається багатомовним.LocalesValuesundefined'en'Використовуйте це, якщо словник призначений для конкретної мови, а не містить кілька перекладів.
    contentAutoTransformationЧи слід автоматично перетворювати рядки контенту в типізовані вузли (Markdown, HTML або вставки).boolean |
    { markdown?: boolean; html?: boolean; insertion?: boolean }
    falsetrue• Markdown : ### Titlemd('### 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Класифікує словники та надає контекст або інструкції для редактора та AI.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] ''[мій префікс] '

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

    Налаштування для управління можливостями AI в Intlayer, включаючи провайдера, модель та API-ключ.

    Ця конфігурація є необов'язковою, якщо ви реєструєтеся з ключем доступу в Intlayer Dashboard. Intlayer автоматично керуватиме найбільш економічно вигідним та ефективним рішенням AI для ваших потреб. Використання стандартних налаштувань забезпечує найкращу довгострокову підтримку, оскільки Intlayer постійно оновлюється для використання останніх моделей.

    Якщо ви віддаєте перевагу використанню власного API-ключа або конкретної моделі, ви можете визначити власну конфігурацію AI. Ця конфігурація AI використовуватиметься глобально у вашому середовищі Intlayer. Команди CLI, такі як fill, використовуватимуть ці налаштування за замовчуванням, так само як SDK, візуальний редактор та CMS. Ви можете перевизначити ці значення за замовчуванням у конкретних випадках за допомогою параметрів команд.

    Intlayer підтримує широкий спектр провайдерів AI для забезпечення максимальної гнучкості. Наразі підтримуються такі провайдери:

    • 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Провайдер, який використовуватиметься для функцій AI в Intlayer.'openai' |
    'anthropic' |
    'mistral' |
    'deepseek' |
    'gemini' |
    'ollama' |
    'openrouter' |
    'alibaba' |
    'fireworks' |
    'groq' |
    'huggingface' |
    'bedrock' |
    'googleaistudio' |
    'googlevertex' |
    'togetherai' |
    'lmstudio' |
    'moonshotai'
    undefined'anthropic'Різні провайдери вимагають різних API-ключів та мають різні ціни.
    modelМодель AI, яка використовуватиметься для функцій AI.stringНемає'gpt-4o-2024-11-20'Конкретні моделі залежать від провайдера.
    temperatureКонтролює випадковість відповідей AI.numberНемає0.1Вища температура = креативніші та менш надійні відповіді.
    apiKeyВаш API-ключ для вибраного провайдера.stringНемаєprocess.env.OPENAI_API_KEYПовинно зберігатися в секреті; використовуйте змінні середовища.
    applicationContextДодатковий контекст про ваш додаток, щоб допомогти AI генерувати точніші переклади (домен, цільова аудиторія, тон, термінологія).stringНемає'мій власний контекст додатка'Може використовуватися для додавання правил (наприклад: "Ви не повинні перекладати свої URL" ).
    baseURLБазовий URL для AI API.stringНемає'https://api.openai.com/v1'
    'http://localhost:5000'
    Може вказувати на локальні або власні кінцеві точки AI API.
    dataSerializationФормат серіалізації даних для функцій AI.'json' |
    'toon'
    undefined'toon''json': за замовчуванням, надійний; використовує більше токенів.
    'toon': менше токенів, менш стабільно.
    • Передає моделі контекст як додатковий параметр (reasoning effort тощо).

    Конфігурація збірки (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 форсує оптимізацію навіть у режимі розробки.
    false вимикає її.
    • Якщо ввімкнено, замінює виклики словників для оптимізації chunking.
    • Потрібні плагіни @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, компілятор видаляє метадані словника (ключ, content wrapper) з виводу.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.ts, intlayer.config.js, intlayer.config.mjs або intlayer.config.cjs. Ви також можете передати власний шлях через прапорець --config у командах CLI.

    Значно менше, ніж рішення на основі просторів імен (namespaces), оскільки сторінка ніколи не завантажує каталог, який вона не рендерить. Розмітка, що рендериться на сервері, отримує свій контент безпосередньо на сервері, а компілятор під час збирання замінює виклики useIntlayer точними записами словника, які використовує компонент, тому невикористані ключі та мови видаляються. Динамічні словники розділяють залишок за окремими локалями. У порівнянні зі звичними альтернативами Intlayer зменшує розмір бандла та сторінки до 50%. Див. оптимізацію бандла та бенчмарк.

    Так, і для цього є два шляхи. Ви можете переносити контент поступово, користуючись посібником з міграції з i18next або посібником з міграції з next-intl. Або ви можете повністю зберегти свій поточний API: адаптери сумісності надають абсолютно той самий інтерфейс, що й i18next, react-i18next, next-intl, next-i18next, react-intl, use-intl, vue-i18n та Lingui, але дані беруться зі словників Intlayer, завдяки чому змінюються лише імпорти, а код компонентів залишається незмінним.

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

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

    Для повністю автоматизованого робочого процесу Intlayer Compiler робить те саме під час збирання у коді 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.
    • Навички агента (Agent skills): спеціалізовані навички intlayer-config, intlayer-cli та intlayer-content.
    • Плагін ESLint: правило no-raw-text відстежує жорстко закодовані рядки.