Creation:2024-08-13Last update:2026-05-12

    Dokumentacja konfiguracji Intlayer

    Przegląd

    Pliki konfiguracyjne Intlayer pozwalają na dostosowanie różnych aspektów wtyczki, takich jak internacjonalizacja (i18n), middleware i zarządzanie treścią. Ten dokument zawiera szczegółowy opis każdej właściwości w konfiguracji.


    Spis treści


    Obsługa plików konfiguracyjnych

    Intlayer akceptuje formaty plików konfiguracyjnych JSON, JS, MJS i TS:

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

    Przykładowy plik konfiguracyjny

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";import { nextjsRewrite } from "intlayer/routing";import { z } from "zod";/** * Przykład pliku konfiguracyjnego Intlayer pokazujący wszystkie dostępne opcje. */const config: IntlayerConfig = {  /**   * Konfiguracja ustawień internacjonalizacji.   */  internationalization: {    /**     * Lista obsługiwanych lokali w aplikacji.     * Domyślnie: [Locales.ENGLISH]     */    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    /**     * Lista wymaganych lokali, które muszą być zdefiniowane w każdym słowniku.     * Jeśli pusta, wszystkie locale są wymagane w trybie `strict`.     * Domyślnie: []     */    requiredLocales: [Locales.ENGLISH],    /**     * Poziom rygoru dla treści zinternacjonalizowanej.     * - "strict": Błąd, jeśli brakuje zadeklarowanych lokali lub używane są niezadeklarowane locale.     * - "inclusive": Ostrzeżenia, jeśli brakuje zadeklarowanych lokali.     * - "loose": Akceptuje każde istniejące locale.     * Domyślnie: "inclusive"     */    strictMode: "inclusive",    /**     * Domyślne locale używane jako zapasowe, gdy żądane locale nie zostanie znalezione.     * Domyślnie: Locales.ENGLISH     */    defaultLocale: Locales.ENGLISH,  },  /**   * Ustawienia kontrolujące operacje na słownikach i zachowanie zapasowe.   */  dictionary: {    /**     * Kontroluje sposób importowania słowników.     * - "static": Importowane statycznie w czasie budowania.     * - "dynamic": Importowane dynamicznie za pomocą Suspense.     * - "fetch": Pobierane dynamicznie przez API Live Sync.     * Domyślnie: "static"     */    importMode: "static",    /**     * Strategia automatycznego uzupełniania brakujących tłumaczeń za pomocą AI.     * Może być wartością logiczną lub wzorcem ścieżki do zapisywania uzupełnionej treści.     * Domyślnie: true     */    fill: true,    /**     * Fizyczna lokalizacja plików słowników.     * - "local": Przechowywane w lokalnym systemie plików.     * - "remote": Przechowywane w Intlayer CMS.     * - "hybrid": Przechowywane zarówno lokalnie, jak i w Intlayer CMS.     * - "plugin" (lub dowolny ciąg znaków): Dostarczane przez wtyczkę lub niestandardowe źródło.     * Domyślnie: "local"     */    location: "local",    /**     * Czy automatycznie przekształcać treść (np. Markdown do HTML).     * Domyślnie: false     */    contentAutoTransformation: false,  },  /**   * Konfiguracja routingu i middleware.   */  routing: {    /**     * Strategia routingu lokali.     * - "prefix-no-default": Prefiks dla wszystkich języków z wyjątkiem domyślnego (np. /dashboard, /fr/dashboard).     * - "prefix-all": Prefiks dla wszystkich języków (np. /en/dashboard, /fr/dashboard).     * - "no-prefix": Locale nie jest widoczne w adresie URL.     * - "search-params": Użycie ?locale=...     * Domyślnie: "prefix-no-default"     */    mode: "prefix-no-default",    /**     * Miejsce przechowywania locale wybranego przez użytkownika.     * Opcje: 'cookie', 'localStorage', 'sessionStorage', 'header' lub ich tablica.     * Domyślnie: ['cookie', 'header']     */    storage: ["cookie", "header"],    /**     * Bazowa ścieżka dla adresów URL aplikacji.     * Domyślnie: ""     */    basePath: "",    /**     * Własne reguły przepisywania URL dla określonych ścieżek zlokalizowanych.     */    rewrite: nextjsRewrite({      "/[locale]/about": {        en: "/[locale]/about",        fr: "/[locale]/a-propos",      },    }),    /**     * Mapuje locale na nazwy hostów domen dla routingu opartego na domenach.     * Adresy URL dla tych lokali będą absolutne (np. https://intlayer.cn/).     * Domena implikuje locale, więc do ścieżki nie jest dodawany żaden prefiks locale.     * Domyślnie: undefined     */    domains: {      en: "intlayer.org",      zh: "intlayer.cn",    },  },  /**   * Ustawienia wyszukiwania i przetwarzania plików treści.   */  content: {    /**     * Rozszerzenia plików do skanowania w poszukiwaniu słowników.     * Domyślnie: ['.content.ts', '.content.js', '.content.json' itp.]     */    fileExtensions: [".content.ts", ".content.js", ".content.json"],    /**     * Katalogi, w których znajdują się pliki .content.     * Domyślnie: ["."]     */    contentDir: ["src"],    /**     * Katalog kodu źródłowego.     * Używany do optymalizacji budowania i przekształceń kodu.     * Domyślnie: ["."]     */    codeDir: ["src"],    /**     * Wzorce do wykluczenia ze skanowania.     * Domyślnie: ['node_modules', '.intlayer' itp.]     */    excludedPath: ["node_modules"],    /**     * Czy śledzić zmiany i regenerować słowniki podczas deweloperki.     * Domyślnie: true w trybie deweloperskim     */    watch: true,    /**     * Polecenie do formatowania nowo utworzonych / zaktualizowanych plików .content.     */    formatCommand: 'npx prettier --write "{{file}}"',  },  /**   * Konfiguracja edytora wizualnego.   */  editor: {    /**     * Czy edytor wizualny jest włączony.     * Domyślnie: false     */    enabled: true,    /**     * URL Twojej aplikacji do walidacji źródła.     * Domyślnie: ""     */    applicationURL: "http://localhost:3000",    /**     * Port lokalnego serwera edytora.     * Domyślnie: 8000     */    port: 8000,    /**     * Publiczny URL edytora.     * Domyślnie: "http://localhost:8000"     */    editorURL: "http://localhost:8000",    /**     * URL Intlayer CMS.     * Domyślnie: "https://app.intlayer.org"     */    cmsURL: "https://app.intlayer.org",    /**     * URL serwera API backendu.     * Domyślnie: "https://back.intlayer.org"     */    backendURL: "https://back.intlayer.org",    /**     * Czy włączyć synchronizację treści w czasie rzeczywistym.     * Domyślnie: false     */    liveSync: true,  },  /**   * Ustawienia tłumaczenia i generowania opartego na AI.   */  ai: {    /**     * Wybrany dostawca AI.     * Opcje: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'     * Domyślnie: 'openai'     */    provider: "openai",    /**     * Model dostawcy do użycia.     */    model: "gpt-4o",    /**     * Klucz API dostawcy.     */    apiKey: process.env.OPENAI_API_KEY,    /**     * Globalny kontekst ułatwiający AI generowanie tłumaczeń.     */    applicationContext: "To jest aplikacja do rezerwacji podróży.",    /**     * Bazowy URL dla API AI.     */    baseURL: "http://localhost:3000",    /**     * Serializacja danych (Data Serialization)     *     * Opcje:     * - "json": domyślnie, niezawodna; zużywa więcej tokenów.     * - "toon": szybciej, mniej tokenów, mniej spójna niż JSON.     *     * Domyślnie: "json"     */    dataSerialization: "json",  },  /**   * Ustawienia budowania i optymalizacji.   */  build: {    /**     * Tryb wykonywania budowania.     * - "auto": Automatyczne budowanie podczas budowania aplikacji.     * - "manual": Wymaga jawnego polecenia budowania.     * Domyślnie: "auto"     */    mode: "auto",    /**     * Czy optymalizować wynikowy pakiet poprzez usuwanie nieużywanych słowników.     * Domyślnie: true w środowisku produkcyjnym     */    optimize: true,    /**     * Minimalizuj słowniki, aby zmniejszyć rozmiar pakietu.     * Domyślnie: false     *     * Uwaga:     * - Ta opcja zostanie zignorowana, jeśli `optimize` jest wyłączone.     * - Ta opcja zostanie zignorowana, jeśli `editor.enabled` jest ustawione na true.     */    minify: true,    /**     * Usuń nieużywane klucze w słownikach.     * Domyślnie: false     *     * Uwaga:     * - Ta opcja zostanie zignorowana, jeśli `optimize` jest wyłączone.     */    purge: true,    /**     * Format wyjściowy generowanych plików słowników.     * Domyślnie: ['cjs', 'esm']     */    outputFormat: ["cjs", "esm"],    /**     * Czy przeprowadzać sprawdzanie typów TypeScript podczas budowania.     * Domyślnie: false     */    checkTypes: false,  },  /**   * Konfiguracja loggera.   */  log: {    /**     * Tryb logowania.     * - "default": Standardowe logowanie.     * - "verbose": Szczegółowe logowanie do debugowania.     * - "disabled": Wyłącz logowanie.     * Domyślnie: "default"     */    mode: "default",    /**     * Prefiks dla wszystkich wiadomości w logach.     * Domyślnie: "[intlayer]"     */    prefix: "[intlayer]",  },  /**   * Konfiguracja systemowa (do zaawansowanych zastosowań)   */  system: {    /**     * Katalog, w którym przechowywane są zlokalizowane słowniki.     */    dictionariesDir: ".intlayer/dictionary",    /**     * Katalog dla module augmentation.     */    moduleAugmentationDir: ".intlayer/types",    /**     * Katalog dla niepołączonych słowników.     */    unmergedDictionariesDir: ".intlayer/unmerged_dictionary",    /**     * Katalog typów słowników.     */    typesDir: ".intlayer/types",    /**     * Katalog głównych plików aplikacji.     */    mainDir: ".intlayer/main",    /**     * Katalog skompilowanych plików konfiguracyjnych.     */    configDir: ".intlayer/config",    /**     * Katalog plików cache.     */    cacheDir: ".intlayer/cache",  },  /**   * Konfiguracja kompilatora (do zaawansowanych zastosowań)   */  compiler: {    /**     * Czy kompilator jest włączony.     *     * - false: wyłącz kompilator.     * - true: włącz kompilator.     * - "build-only": pomiń kompilator podczas deweloperki dla szybszego startu.     *     * Domyślnie: false     */    enabled: true,    /**     * Definiuje ścieżkę do pliku wyjściowego. Zastępuje `outputDir`.     *     * - Ścieżki `./` są rozwiązywane względem katalogu komponentu.     * - Ścieżki `/` są rozwiązywane względem katalogu bazowego projektu (`baseDir`).     *     * - Obecność zmiennej `{{locale}}` w ścieżce wyzwala generowanie osobnych słowników na język.     *     * Przykłady:     * ```ts     * {     *   // Tworzy wielojęzyczne pliki .content.ts obok komponentu     *   output: ({ fileName, extension }) => `./${fileName}${extension}`,     *     *   // output: './{{fileName}}{{extension}}', // To samo poprzez ciąg szablonowy     * }     * ```     *     * ```ts     * {     *   // Tworzy scentralizowane pliki JSON na język w korzeniu projektu     *   output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,     *     *   // output: '/locales/{{locale}}/{{key}}.content.json', // To samo poprzez ciąg szablonowy     * }     * ```     *     * Lista zmiennych:     *   - `fileName`: Nazwa pliku.     *   - `key`: Klucz treści.     *   - `locale`: Locale treści.     *   - `extension`: Rozszerzenie pliku.     *   - `componentFileName`: Nazwa pliku komponentu.     *   - `componentExtension`: Rozszerzenie pliku komponentu.     *   - `format`: Format słownika.     *   - `componentFormat`: Format słownika komponentu.     *   - `componentDirPath`: Ścieżka do katalogu komponentu.     */    output: ({ locale, key }) => `compiler/${locale}/${key}.json`,    /**     * Czy zapisać komponenty po ich przekształceniu.     * W ten sposób można uruchomić kompilator raz, aby przekształcić aplikację, a następnie go usunąć.     */    saveComponents: false,    /**     * Pozostaw tylko treść w wygenerowanym pliku. Przydatne dla formatów i18next lub ICU MessageFormat JSON na język.     */    noMetadata: false,    /**     * Prefiks klucza słownika     */    dictionaryKeyPrefix: "", // Dodaje opcjonalny prefiks do wyodrębnionych kluczy słownika  },  /**   * Własne schematy do walidacji struktury słowników.   */  schemas: {    "my-schema": z.object({      title: z.string(),    }),  },  /**   * Konfiguracja wtyczek.   */  plugins: [],};export default config;

    Odniesienia do konfiguracji

    Poniższe sekcje szczegółowo opisują różne właściwości konfiguracji dostępne w Intlayer.


    Konfiguracja internacjonalizacji (Internationalization)

    Definiuje ustawienia związane z internacjonalizacją, w tym dostępne locale i domyślne locale.

    Pole Opis Typ Domyślnie Przykład Uwagi
    locales Lista obsługiwanych lokali w aplikacji. string[] [Locales.ENGLISH] ['en', 'fr', 'es']
    requiredLocales Lista wymaganych lokali w aplikacji. string[] [] [] • Jeśli pusta, wszystkie locale są wymagane w trybie strict.
    • Upewnij się, że wymagane locale są również zdefiniowane w polu locales.
    strictMode Zapewnia silną implementację zinternacjonalizowanej treści za pomocą TypeScript. string 'inclusive' • Jeśli "strict": Każde zadeklarowane locale musi być zdefiniowane dla funkcji t - błąd w przypadku braku lub niezadeklarowanego locale.
    • Jeśli "inclusive": Ostrzeżenie dla brakujących lokali, ale pozwala na użycie istniejących niezadeklarowanych lokali.
    • Jeśli "loose": Akceptuje każde istniejące locale.
    defaultLocale Domyślne locale używane jako zapasowe, gdy żądane locale nie zostanie znalezione. string Locales.ENGLISH 'en' Używane do określenia locale, jeśli żadne nie jest określone w URL, plikach cookie lub nagłówku.

    Konfiguracja edytora (Editor)

    Definiuje ustawienia edytora wizualnego, w tym port serwera i status aktywacji.

    Pole Opis Typ Domyślnie Przykład Uwagi
    applicationURL URL Twojej aplikacji. string undefined 'http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • Używane do ograniczania źródła edytora ze względów bezpieczeństwa.
    • Jeśli ustawione na '*', edytor jest dostępny z dowolnego źródła.
    port Port serwera edytora wizualnego. number 8000
    editorURL URL serwera edytora. string 'http://localhost:8000' 'http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • Używane do ograniczania źródeł, które mogą wchodzić w interakcję z aplikacją.
    • Jeśli ustawione na '*', dostępne z dowolnego źródła.
    • Należy to ustawić, jeśli port zostanie zmieniony lub edytor jest hostowany na innej domenie.
    cmsURL URL Intlayer CMS. string 'https://app.intlayer.org' 'https://app.intlayer.org'
    backendURL URL serwera backendu. string https://back.intlayer.org http://localhost:4000
    enabled Czy aplikacja powinna wchodzić w interakcję z edytorem wizualnym. boolean false process.env.NODE_ENV !== 'production' • Jeśli false, edytor nie będzie mógł wchodzić w interakcję z aplikacją.
    • Wyłączenie tego dla określonych środowisk zwiększa bezpieczeństwo.
    clientId Pozwala pakietom intlayer na uwierzytelnianie w backendzie za pomocą oAuth2. Przejdź do intlayer.org/project, aby uzyskać token dostępu. string |
    undefined
    undefined Musi pozostać tajne; używaj zmiennych środowiskowych.
    clientSecret Pozwala pakietom intlayer na uwierzytelnianie w backendzie za pomocą oAuth2. Przejdź do intlayer.org/project, aby uzyskać token dostępu. string |
    undefined
    undefined Musi pozostać tajne; używaj zmiennych środowiskowych.
    dictionaryPriorityStrategy Strategia priorytetu słowników, gdy obecne są zarówno słowniki lokalne, jak i zdalne. string 'local_first' 'distant_first' 'distant_first': Słowniki zdalne mają pierwszeństwo przed lokalnymi.
    'local_first': Słowniki lokalne mają pierwszeństwo przed zdalnymi.
    liveSync Czy serwer aplikacji powinien natychmiast przeładowywać treść po wykryciu zmian w
    CMS
    edytorze wizualnym
    serwerze backendu.
    boolean true true • Aktualizuje treść strony aplikacji po dodaniu/aktualizacji słowników.
    • Live Sync pobiera treść z innego serwera, co może nieznacznie wpłynąć na wydajność.
    • Zaleca się hostowanie obu na tej samej maszynie.
    liveSyncPort Port serwera Live Sync. number 4000 4000
    liveSyncURL URL serwera Live Sync. string 'http://localhost:{liveSyncPort}' 'https://example.com' Domyślnie wskazuje na localhost; można zmienić na zdalny serwer Live Sync.

    Konfiguracja routingu (Routing)

    Ustawienia kontrolujące zachowanie routingu, w tym strukturę URL, przechowywanie locale i obsługę middleware.

    Pole Opis Typ Domyślnie Przykład Uwagi
    mode Tryb struktury URL do zarządzania locale. 'prefix-no-default' |
    'prefix-all' |
    'no-prefix' |
    'search-params'
    'prefix-no-default' 'prefix-no-default': /dashboard (en) lub /fr/dashboard (fr). 'prefix-all': /en/dashboard. 'no-prefix': locale zarządzane inaczej. 'search-params': /dashboard?locale=fr Nie wpływa na zarządzanie plikami cookie ani pamięcią lokalną.
    storage Konfiguracja przechowywania locale u klienta. false |
    'cookie' |
    'localStorage' |
    'sessionStorage' |
    'header' |
    CookiesAttributes |
    StorageAttributes |
    Array
    ['cookie', 'header'] 'localStorage'
    [{ type: 'cookie', name: 'custom-locale', secure: true }]
    Zobacz tabelę opcji przechowywania poniżej.
    basePath Bazowa ścieżka dla adresów URL aplikacji. string '' '/my-app' Jeśli Twoja aplikacja znajduje się pod adresem https://example.com/my-app, basePath to '/my-app', co wskazuje na URL https://example.com/my-app/en.
    rewrite Własne reguły przepisywania URL w celu zmiany domyślnego trybu routingu dla określonych ścieżek. Obsługuje parametry dynamiczne [param]. Record<string, StrictModeLocaleMap<string>> undefined Zobacz przykład poniżej • Reguły routingu mają wyższy priorytet niż mode.
    • Działa z Next.js i Vite.
    getLocalizedUrl() automatycznie stosuje pasujące reguły.
    • Zobacz Własne przepisywanie URL.
    domains Mapuje locale na nazwy hostów domen dla routingu opartego na domenach. Gdy ustawione, adresy URL dla danego locale używają tej domeny jako bazy (absolutny URL) i do ścieżki nie jest dodawany prefiks locale. Partial<Record<Locale, string>> undefined { zh: 'intlayer.zh', fr: 'intlayer.org' } • Domyślnym protokołem jest https://, gdy nie jest zawarty w nazwie hosta.
    • Sama domena identyfikuje locale, więc prefiks /zh/ nie jest dodawany.
    getLocalizedUrl('/', 'zh') zwraca https://intlayer.zh/.

    Przykład rewrite:

    typescript
    routing: {  mode: "prefix-no-default", // Strategia zapasowa  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]",    },  }),}

    Opcje przechowywania (Storage)

    Wartość Uwagi Opis
    'cookie' • Zapewnij odpowiednią zgodę użytkownika zgodnie z RODO.
    • Można dostosować przez CookiesAttributes ({ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }).
    Przechowuje locale w pliku cookie - dostępne zarówno u klienta, jak i na serwerze.
    'localStorage' • Nie wygasa, dopóki nie zostanie usunięte jawnie.
    • Intlayer Proxy nie ma do niego dostępu.
    • Można dostosować przez StorageAttributes ({ type: 'localStorage', name: 'custom-locale' }).
    Przechowuje locale w przeglądarce bez daty wygaśnięcia - tylko klient.
    'sessionStorage' • Usuwane po zamknięciu karty/okna przeglądarki.
    • Intlayer Proxy nie ma do niego dostępu.
    • Można dostosować przez StorageAttributes ({ type: 'sessionStorage', name: 'custom-locale' }).
    Przechowuje locale na czas sesji strony - tylko klient.
    'header' • Przydatne przy wywołaniach API.
    • Klient nie ma do niego dostępu.
    • Można dostosować przez StorageAttributes ({ type: 'header', name: 'custom-locale' }).
    Przechowuje lub przekazuje locale przez nagłówki HTTP - tylko serwer.

    Przy użyciu przechowywania w plikach cookie można skonfigurować dodatkowe atrybuty:

    Pole Opis Typ
    name Nazwa pliku cookie. Domyślnie: 'INTLAYER_LOCALE' string
    domain Domena pliku cookie. Domyślnie: undefined string
    path Ścieżka pliku cookie. Domyślnie: undefined string
    secure Wymagane HTTPS. Domyślnie: undefined boolean
    httpOnly Flaga HTTP-only. Domyślnie: undefined boolean
    sameSite Polityka SameSite. 'strict' |
    'lax' |
    'none'
    expires Data wygaśnięcia lub liczba dni. Domyślnie: undefined Date |
    number

    Atrybuty przechowywania (Storage Attributes)

    Przy użyciu localStorage lub sessionStorage:

    Pole Opis Typ
    type Typ przechowywania. 'localStorage' |
    'sessionStorage'
    name Nazwa klucza w pamięci. Domyślnie: 'INTLAYER_LOCALE' string

    Przykłady konfiguracji

    Oto kilka typowych konfiguracji korzystających z nowej struktury routingu v7:

    Podstawowa konfiguracja (Standard):

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

    Konfiguracja zgodna z RODO:

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";// intlayer.config.tsconst 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;

    Tryb parametrów wyszukiwania (Search Params):

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

    Tryb bez prefiksu (No-Prefix) z własnym miejscem przechowywania:

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";// intlayer.config.tsconst 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;

    Własne przepisywanie URL ze ścieżkami dynamicznymi:

    typescript
    // intlayer.config.tsimport { nextjsRewrite } from "intlayer/routing";const config: IntlayerConfig = {  internationalization: {    locales: ["en", "fr"],    defaultLocale: "en",  },  routing: {    mode: "prefix-no-default", // Rezerwowa strategia dla nieprzepisanych ścieżek    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;

    Konfiguracja treści (Content)

    Ustawienia do zarządzania treścią w aplikacji, w tym nazwy katalogów, rozszerzenia plików i pochodne konfiguracje.

    Pole Opis Typ Domyślnie Przykład Uwagi
    watch Wskazuje, czy Intlayer powinien śledzić zmiany w plikach deklaracji treści w celu regeneracji słowników. boolean true
    fileExtensions Rozszerzenia plików do skanowania podczas kompilacji słowników. 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'] Może pomóc uniknąć konfliktów przy dostosowywaniu.
    contentDir Ścieżki do katalogów, w których znajdują się pliki definicji treści (.content.*). string[] ['.'] ['src', '../../ui-library', require.resolve("@my-package/content"), '@my-package/content'] Używane do śledzenia plików treści i regeneracji słowników.
    codeDir Ścieżka do katalogów, w których znajduje się kod, względem katalogu bazowego. string[] ['.'] ['src', '../../ui-library'] • Używane do śledzenia przekształceń plików kodu (usuwanie niepotrzebnych części, optymalizacja).
    • Oddzielenie od contentDir zwiększa wydajność.
    excludedPath Katalogi, które należy wykluczyć ze skanowania treści. string[] ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.intlayer/**', '**/.next/**', '**/.nuxt/**', '**/.expo/**', '**/.vercel/**', '**/.turbo/**', '**/.tanstack/**'] Obecnie nieużywane; zaplanowane na przyszłość.
    formatCommand Polecenie do formatowania plików treści, gdy Intlayer zapisuje je lokalnie. string undefined 'npx prettier --write "{{file}}" --log-level silent' (Prettier), 'npx biome format "{{file}}" --write --log-level none' (Biome), 'npx eslint --fix "{{file}}" --quiet' (ESLint) {{file}} zostanie zastąpione ścieżką do pliku.
    • Jeśli niezdefiniowane, Intlayer spróbuje automatycznie wykryć (testuje prettier, biome, eslint).

    Konfiguracja słownika (Dictionary)

    Opcje kontrolujące operacje na słownikach, w tym zachowanie automatycznego uzupełniania i generowanie treści.

    Pole Opis Typ Domyślnie Przykład Uwagi
    fill Kontroluje generowanie plików wyjściowych automatycznego uzupełniania (tłumaczenia AI). boolean |
    FilePathPattern |
    Partial<Record<Locale, boolean | FilePathPattern>>
    true { en: '/locales/en/{{key}}.json', fr: ({ key }) => '/locales/fr/${key}.json', es: false } true: Domyślna ścieżka (ten sam plik co źródło).
    false: Wyłączone.
    • Wzorzec ciągu/funkcji pozwala na generowanie na poziomie lokali.
    • Obiekt na poziomie lokali: Każde locale ma własny wzorzec; false wyklucza locale.
    • Uwzględnienie {{locale}} pozwala na generowanie na poziomie lokali.
    • Ustawienie fill na poziomie słownika zawsze ma priorytet nad tym globalnym ustawieniem.
    description Pomaga edytorowi i CMS zrozumieć przeznaczenie słownika. Używane również jako kontekst do generowania tłumaczeń przez AI. string undefined 'User profile section'
    locale Przełącza słownik na format specyficzny dla danego locale. Każde zadeklarowane pole staje się węzłem tłumaczenia. Jeśli brak, słownik jest uznawany za zawierający wiele tłumaczeń. LocalesValues undefined 'en' Używaj tego, jeśli słownik jest przeznaczony dla konkretnego języka, a nie zawiera wielu tłumaczeń.
    contentAutoTransformation Czy automatycznie przekształcać ciągi znaków treści w typowane węzły (Markdown, HTML lub wstawki). boolean |
    { markdown?: boolean; html?: boolean; insertion?: boolean }
    false true • Markdown : ### Titlemd('### Title') .
    • HTML : <div>Title</div>html('<div>Title</div>') .
    • Wstawki : Hello {{name}}insert('Hello {{name}}') .
    location Wskazuje na lokalizację przechowywania plików słowników oraz sposób ich synchronizacji z CMS. 'local' |
    'remote' |
    'hybrid' |
    'plugin' |
    string
    'local' 'hybrid' 'local': Tylko lokalne zarządzanie.
    'remote': Tylko zdalne zarządzanie (CMS).
    'hybrid': Zarządzanie zarówno lokalne, jak i zdalne.
    'plugin' lub własne ciągi: Zarządzanie przez wtyczkę lub własne źródło.
    importMode Kontroluje sposób importowania słowników. 'static' |
    'dynamic' |
    'fetch'
    'static' 'dynamic' 'static': Statyczny import.
    'dynamic': Dynamiczny import przez Suspense.
    'fetch': Pobieranie przez API Live Sync; rezerwowa opcja 'dynamic' w razie błędu.
    • Wymagane wtyczki @intlayer/babel i @intlayer/swc.
    • Klucze muszą być zadeklarowane statycznie.
    • Ignorowane, jeśli optimize jest wyłączone.
    • Nie wpływa na getIntlayer, getDictionary itp.
    priority Priorytet słownika. Przy rozwiązywaniu konfliktów między słownikami wyższa wartość ma pierwszeństwo przed niższą. number undefined 1
    live ZDEPRECJONOWANE - używaj importMode: 'fetch'. Wcześniej wskazywało, czy należy pobierać treść słownika dynamicznie przez API Live Sync. boolean undefined Przemianowano na importMode: 'fetch' w v8.0.0.
    schema Generowane automatycznie przez Intlayer do walidacji schematu JSON. 'https://intlayer.org/schema.json' Automatyczne Nie edytuj ręcznie.
    title Pomaga identyfikować słowniki w edytorze i CMS. string undefined 'User Profile'
    tags Klasyfikuje słowniki i dostarcza kontekst lub instrukcje dla edytora i AI. string[] undefined ['user', 'profile']
    version Wersja zdalnego słownika; pomaga śledzić używaną obecnie wersję. string undefined '1.0.0' • Zarządzane w CMS.
    • Nie edytuj lokalnie.

    Przykład fill:

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

    Konfiguracja loggera (Log)

    Ustawienia dostosowywania wyjścia logów Intlayer.

    Pole Opis Typ Domyślnie Przykład Uwagi
    mode Wskazuje tryb loggera. 'default' |
    'verbose' |
    'disabled'
    'default' 'verbose' 'verbose': Zapisuje więcej informacji do debugowania.
    'disabled': Całkowicie wyłącza loggera.
    prefix Prefiks dla wszystkich wiadomości w logach. string '[intlayer] ' '[mój prefiks] '

    Konfiguracja AI (AI)

    Ustawienia do zarządzania funkcjami AI w Intlayer, w tym dostawca, model i klucz API.

    Ta konfiguracja jest opcjonalna, jeśli zarejestrujesz się za pomocą klucza dostępu w Intlayer Dashboard. Intlayer automatycznie wybierze najbardziej opłacalne i wydajne rozwiązanie AI dla Twoich potrzeb. Korzystanie z domyślnych ustawień zapewnia najlepsze długoterminowe wsparcie, ponieważ Intlayer stale aktualizuje się, aby korzystać z najnowszych modeli.

    Jeśli wolisz korzystać z własnego klucza API lub konkretnego modelu, możesz zdefiniować własną konfigurację AI. Ta konfiguracja AI będzie używana globalnie w Twoim środowisku Intlayer. Komendy CLI, takie jak fill, będą domyślnie używać tych ustawień, podobnie jak SDK, edytor wizualny i CMS. Możesz nadpisać te wartości domyślne w konkretnych przypadkach za pomocą parametrów komend.

    Intlayer obsługuje szeroką gamę dostawców AI, aby zapewnić maksymalną elastyczność. Obecnie obsługiwani dostawcy to:

    • OpenAI (Domyślnie)
    • 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
    Pole Opis Typ Domyślnie Przykład Uwagi
    provider Dostawca, który będzie używany do funkcji AI w Intlayer. 'openai' |
    'anthropic' |
    'mistral' |
    'deepseek' |
    'gemini' |
    'ollama' |
    'openrouter' |
    'alibaba' |
    'fireworks' |
    'groq' |
    'huggingface' |
    'bedrock' |
    'googleaistudio' |
    'googlevertex' |
    'togetherai' |
    'lmstudio'
    undefined 'anthropic' Różni dostawcy wymagają różnych kluczy API i mają różne cenniki.
    model Model AI do użycia w funkcjach AI. string Brak 'gpt-4o-2024-11-20' Konkretne modele zależą od dostawcy.
    temperature Kontroluje losowość odpowiedzi AI. number Brak 0.1 Wyższa temperatura = bardziej kreatywne, ale mniej niezawodne odpowiedzi.
    apiKey Twój klucz API dla wybranego dostawcy. string Brak process.env.OPENAI_API_KEY Musi pozostać tajny; używaj zmiennych środowiskowych.
    applicationContext Dodatkowy kontekst o Twojej aplikacji, aby pomóc AI generować dokładniejsze tłumaczenia (domena, grupa docelowa, ton, terminologia). string Brak 'mój własny kontekst aplikacji' Można użyć do dodania zasad (np.: "Nie powinieneś tłumaczyć swoich URL" ).
    baseURL Bazowy URL dla API AI. string Brak 'https://api.openai.com/v1'
    'http://localhost:5000'
    Może wskazywać na lokalne lub własne punkty końcowe API AI.
    dataSerialization Format serializacji danych dla funkcji AI. 'json' |
    'toon'
    undefined 'toon' 'json': domyślnie, niezawodne; zużywa więcej tokenów.
    'toon': mniej tokenów, mniej stabilne.
    • Przekazuje modelowi kontekst jako dodatkowy parametr (reasoning effort itp.).

    Konfiguracja budowania (Build)

    Ustawienia kontrolujące sposób, w jaki Intlayer optymalizuje i kompiluje internacjonalizację aplikacji.

    Ustawienia budowania mają zastosowanie do wtyczek @intlayer/babel i @intlayer/swc.

    W trybie deweloperskim Intlayer używa statycznego importu słowników w celu ułatwienia procesu deweloperskiego.
    Podczas optymalizacji Intlayer zastępuje wywołania słowników optymalizacją dzielenia kodu (chunking), aby wynikowy pakiet importował tylko te słowniki, które są faktycznie używane.
    Pole Opis Typ Domyślnie Przykład Uwagi
    mode Kontroluje tryb wykonywania budowania. 'auto' |
    'manual'
    'auto' 'manual' 'auto': Budowanie jest automatycznie wyzwalane podczas budowania aplikacji.
    'manual': Uruchamiane tylko poprzez jawne polecenie budowania.
    • Może być użyte do zapobiegania budowaniu słowników (np. aby uniknąć uruchamiania w środowisku Node.js).
    optimize Kontroluje, czy optymalizacja budowania jest wykonywana. boolean undefined process.env.NODE_ENV === 'production' • Jeśli niezdefiniowane, optymalizacja jest wyzwalana podczas budowania frameworka (Vite/Next.js).
    true wymusza optymalizację nawet w trybie deweloperskim.
    false wyłącza ją.
    • Jeśli włączone, zastępuje wywołania słowników optymalizacją chunking.
    • Wymagane wtyczki @intlayer/babel i @intlayer/swc.
    minify Minimalizuj słowniki, aby zmniejszyć rozmiar pakietu. boolean false • Określa, czy pakiet ma zostać zminimalizowany.
    • Domyślnie: true w produkcji.
    • Ta opcja zostanie zignorowana, jeśli optimize jest wyłączone.
    • Ta opcja zostanie zignorowana, jeśli editor.enabled jest prawdziwe.
    purge Usuń nieużywane klucze w słownikach. boolean false • Określa, czy pakiet ma zostać wyczyszczony.
    • Domyślnie: true w produkcji.
    • Ta opcja zostanie zignorowana, jeśli optimize jest wyłączone.
    checkTypes Wskazuje, czy budowanie powinno sprawdzać typy TypeScript i logować błędy. boolean false Może spowolnić proces budowania.
    outputFormat Kontroluje format wyjściowy słowników. ('esm' | 'cjs')[] ['esm', 'cjs'] ['cjs']
    traversePattern Wzorzec dla plików, które mają być skanowane podczas optymalizacji. 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/**'] • Poprawia wydajność budowania poprzez ograniczenie optymalizacji do odpowiednich plików.
    • Ignorowane, jeśli optimize jest wyłączone.
    • Używa wzorców glob.

    Konfiguracja systemowa (System)

    Te ustawienia są przeznaczone dla zaawansowanych użytkowników i wewnętrznej konfiguracji Intlayer.

    Pole Opis Typ Domyślnie Przykład Uwagi
    dictionariesDir Katalog dla skompilowanych słowników. string '.intlayer/dictionary'
    moduleAugmentationDir Katalog dla module augmentation TypeScript. string '.intlayer/types'
    unmergedDictionariesDir Katalog dla niepołączonych słowników. string '.intlayer/unmerged_dictionary'
    typesDir Katalog dla wygenerowanych typów. string '.intlayer/types'
    mainDir Katalog głównych plików Intlayer. string '.intlayer/main'
    configDir Katalog skompilowanych plików konfiguracyjnych. string '.intlayer/config'
    cacheDir Katalog plików cache. string '.intlayer/cache'

    Konfiguracja kompilatora (Compiler)

    Kontroluje ustawienia kompilatora Intlayer, który kolekcjonuje słowniki bezpośrednio z Twoich komponentów.

    Pole Opis Typ Domyślnie Przykład Uwagi
    enabled Wskazuje, czy kompilator powinien być aktywny w celu kolekcjonowania słowników. boolean |
    'build-only'
    true 'build-only' 'build-only' pomija kompilator podczas deweloperki dla szybszego startu; uruchamia się tylko podczas poleceń budowania.
    dictionaryKeyPrefix Prefiks dla zebranych kluczy słowników. string '' 'my-prefix-' Dodawany przed wygenerowanym kluczem (opartym na nazwie pliku), aby uniknąć konfliktów.
    saveComponents Czy zapisać komponenty po ich przekształceniu. boolean false • Jeśli true, oryginalne pliki zostaną nadpisane przekształconymi wersjami.
    • Pozwala na jednorazowe uruchomienie kompilatora, a następnie jego usunięcie.
    output Definiuje ścieżkę do pliku wyjściowego. Zastępuje outputDir. Obsługuje zmienne szablonowe: {{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 }
    • Ścieżki ./ są obliczane względem katalogu komponentu.
    • Ścieżki / są obliczane względem korzenia projektu.
    {{locale}} pozwala na generowanie na poziomie lokali.
    • Obsługuje definicję przez obiekt na poziomie lokali.
    noMetadata Jeśli true, kompilator usuwa metadane słownika (klucz, content wrapper) z wyniku. boolean false false{"key":"my-key","content":{"key":"value"}}
    true{"key":"value"}
    • Przydatne dla formatów i18next lub ICU MessageFormat JSON na język.
    • Dobrze współpracuje z wtyczką loadJSON.
    dictionaryKeyPrefix Prefiks klucza słownika string '' Dodaje opcjonalny prefiks do wyodrębnionych kluczy słownika

    Własne schematy (Custom Schemas)

    Pole Opis Typ
    schemas Pozwala definiować schematy Zod do walidacji struktury Twoich słowników. Record<string, ZodSchema>

    Wtyczki (Plugins)

    Pole Opis Typ
    plugins Lista wtyczek Intlayer, które mają być dołączone. IntlayerPlugin[]