Autor:
    Data utworzenia:2024-08-13Ostatnia aktualizacja:2026-08-22

    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 { syncJSON } from "@intlayer/sync-json-plugin";
    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",
    
        /**
         * Włącza proxy routingu lokalizacji Intlayer (middleware).
         * Obsługuje wykrywanie lokalizacji, przekierowania i przepisywanie w dev, preview i SSR.
         * - nieustawione (auto): serwery dev i preview utrzymują routing sterowany adresem URL,
         *   ignorując lokalizację zapisaną w ciasteczkach i nagłówkach. Prefiksy nadal są
         *   rozwiązywane, lokalizacja nadal jest zapisywana, a wykrywanie Accept-Language
         *   nadal działa. W produkcji zachowuje się jak `true`.
         * - true: pełne zachowanie w każdym środowisku.
         * - false: brak routingu lokalizacji.
         * Domyślnie: undefined (auto)
         */
        enableProxy: undefined,
    
        /**
         * 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,
      },
    
      /**
       * Konfiguracja analityki (analytics).
       */
      analytics: {
        /**
         * Czy zbieranie danych analitycznych jest włączone (odsłony strony, ekspozycje treści, zdarzenia A/B).
         * Wymaga zainstalowanego pakietu `@intlayer/analytics` oraz ustawienia `editor.clientId` na potrzeby atrybucji.
         * Domyślnie: true
         */
        enabled: true,
    
        /**
         * Milisekundy między automatycznymi zbiorczymi wysyłkami do backendu.
         * Domyślnie: 20000
         */
        flushInterval: 20000,
    
        /**
         * Ułamek sesji do rejestrowania, od 0 (brak) do 1 (wszystkie).
         * Domyślnie: 1
         */
        sampleRate: 1,
      },
    
      /**
       * 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', 'moonshotai'
         * 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 (build time) 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 bundle'a.
         * 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,
    
        /**
         * Grupuj fragmenty słownika dla poszczególnych języków według granicy podziału
         * kodu, która ich używa, aby leniwie ładowana strona pobierała swoją treść w
         * jednym żądaniu.
         * Domyślnie: true
         *
         * Uwaga:
         * - Dotyczy tylko słowników używających `importMode: 'dynamic'`.
         */
        chunkGrouping: true,
    
        /**
         * Ładuj słownik razem z fragmentem, który go używa, zamiast pobierać go po
         * wyrenderowaniu tego fragmentu. Odczyty renderują się synchronicznie zamiast
         * zawieszać, więc nawigacja nie miga już stanem ładowania.
         * Domyślnie: true
         *
         * Uwaga:
         * - Oczekiwany jest tylko rozwiązany język, więc strona pobiera wyłącznie
         *   język, który wyświetla.
         */
        dictionariesPreload: 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 (build time).
         * 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 słownika.
       */
      dictionary: {
        /**
         * Kontroluje sposób importowania słowników.
         * - "static": Importowane statycznie podczas budowania.
         * - "dynamic": Importowane dynamicznie przy użyciu Suspense.
         * - "fetch": Pobierane dynamicznie przez API synchronizacji na żywo.
         */
        importMode: "static",
    
        /**
         * Domyślny format komunikatów dla wszystkich słowników w projekcie.
         * - 'intlayer': Natywny format intlayer (domyślny).
         * - 'icu': Format komunikatów ICU.
         * - 'i18next': Format i18next.
         * - 'vue-i18n': Format Vue I18n.
         * - 'po': Format GNU Gettext PO.
         */
        format: "icu",
      },
    
      /**
       * Konfiguracja wtyczek.
       */
      plugins: [
        syncJSON({
          format: "icu",
          source: ({ locale }) => `./messages/${locale}.json`,
        }),
      ],
    };
    
    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.

    PoleOpisTypDomyślniePrzykładUwagi
    localesLista obsługiwanych lokali w aplikacji.string[][Locales.ENGLISH]['en', 'fr', 'es']
    requiredLocalesLista 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.
    strictModeZapewnia 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.
    defaultLocaleDomyślne locale używane jako zapasowe, gdy żądane locale nie zostanie znalezione.stringLocales.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.

    PoleOpisTypDomyślniePrzykładUwagi
    applicationURLURL Twojej aplikacji.stringundefined'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.
    portPort serwera edytora wizualnego.number8000
    editorURLURL 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.
    cmsURLURL Intlayer CMS.string'https://app.intlayer.org''https://app.intlayer.org'
    backendURLURL serwera backendu.stringhttps://back.intlayer.orghttp://localhost:4000
    enabledCzy aplikacja powinna wchodzić w interakcję z edytorem wizualnym.booleanfalseprocess.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.
    clientIdPozwala pakietom intlayer na uwierzytelnianie w backendzie za pomocą oAuth2. Przejdź do intlayer.org/project, aby uzyskać token dostępu.string |
    undefined
    undefinedMusi pozostać tajne; używaj zmiennych środowiskowych.
    clientSecretPozwala pakietom intlayer na uwierzytelnianie w backendzie za pomocą oAuth2. Przejdź do intlayer.org/project, aby uzyskać token dostępu.string |
    undefined
    undefinedMusi pozostać tajne; używaj zmiennych środowiskowych.
    dictionaryPriorityStrategyStrategia 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.
    liveSyncCzy serwer aplikacji powinien natychmiast przeładowywać treść po wykryciu zmian w
    CMS
    edytorze wizualnym
    serwerze backendu.
    booleantruetrue• 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.
    liveSyncPortPort serwera Live Sync.number40004000
    liveSyncURLURL serwera Live Sync.string'http://localhost:{liveSyncPort}''https://example.com'Domyślnie wskazuje na localhost; można zmienić na zdalny serwer Live Sync.

    Konfiguracja analityki (Analytics)

    Definiuje ustawienia związane z analityką Intlayer: zbieranie informacji o tym, jakie treści są faktycznie wyświetlane użytkownikom (odsłony strony, ekspozycje treści) oraz obsługę testów A/B treści.

    Analityka działa na zasadzie opt-out: jest włączona domyślnie i zaczyna zbierać dane, gdy tylko pakiet @intlayer/analytics jest zainstalowany i skonfigurowano klucz projektu (editor.clientId) na potrzeby atrybucji. Ustaw analytics.enabled na false — albo nie instaluj pakietu — a cała integracja analityczna zostanie usunięta z pakietu aplikacji (dead-code elimination).

    PoleOpisTypDomyślniePrzykładUwaga
    enabledWłącza zbieranie danych analitycznych (odsłony strony, ekspozycje treści, zdarzenia A/B).booleantruefalseWymaga zainstalowanego pakietu @intlayer/analytics oraz ustawienia editor.clientId na potrzeby atrybucji; w przeciwnym razie analityka pozostaje wyłączona, nawet jeśli enabled wynosi true.
    flushIntervalMilisekundy między automatycznymi zbiorczymi wysyłkami do backendu.number2000010000
    sampleRateUłamek sesji do rejestrowania, od 0 (brak) do 1 (wszystkie).number10.5Próbkowanie jest deterministyczne dla sesji, więc zarejestrowana sesja raportuje wszystkie swoje zdarzenia (bez częściowych lejków).

    Konfiguracja routingu (Routing)

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

    PoleOpisTypDomyślniePrzykładUwagi
    modeTryb 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=frNie wpływa na zarządzanie plikami cookie ani pamięcią lokalną.
    enableProxyWłącza proxy routingu lokalizacji Intlayer (middleware).boolean |
    undefined
    undefined (auto)true• Nieustawione (auto): serwery dev i preview ignorują lokalizację zapisaną w ciasteczkach/nagłówkach jako źródło przekierowania; prefiksy, zapisywanie i wykrywanie Accept-Language nadal działają. W produkcji zachowuje się jak true.
    true: pełne zachowanie wszędzie.
    false: brak routingu lokalizacji. W Next.js middleware intlayerProxy staje się przezroczysty.
    storageKonfiguracja 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.
    basePathBazowa ś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.
    rewriteWł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>>undefinedZobacz 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.
    domainsMapuje 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śćUwagiOpis
    '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:

    PoleOpisTyp
    nameNazwa pliku cookie. Domyślnie: 'INTLAYER_LOCALE'string
    domainDomena pliku cookie. Domyślnie: undefinedstring
    pathŚcieżka pliku cookie. Domyślnie: undefinedstring
    secureWymagane HTTPS. Domyślnie: undefinedboolean
    httpOnlyFlaga HTTP-only. Domyślnie: undefinedboolean
    sameSitePolityka SameSite.'strict' |
    'lax' |
    'none'
    expiresLiczba oznacza dni od momentu utworzenia; data (lub ciąg daty ISO) to bezwzględna data wygaśnięcia. Domyślnie: undefinedDate |
    number |
    string
    maxAgeCzas życia w sekundach od momentu utworzenia. Ma pierwszeństwo przed expires. Domyślnie: undefinednumber

    Atrybuty przechowywania (Storage Attributes)

    Przy użyciu localStorage lub sessionStorage:

    PoleOpisTyp
    typeTyp przechowywania.'localStorage' |
    'sessionStorage'
    nameNazwa 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.ts
    const 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.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;
    

    Tryb parametrów wyszukiwania (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;
    

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

    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;
    

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

    typescript
    // intlayer.config.ts
    import { 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.

    PoleOpisTypDomyślniePrzykładUwagi
    watchWskazuje, czy Intlayer powinien śledzić zmiany w plikach deklaracji treści w celu regeneracji słowników.booleantrue
    fileExtensionsRozszerzenia 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ść.
    excludedPathKatalogi, 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ść.
    formatCommandPolecenie do formatowania plików treści, gdy Intlayer zapisuje je lokalnie.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}} zostanie zastąpione ścieżką do pliku.
    • Jeśli niezdefiniowane, Intlayer spróbuje automatycznie wykryć (testuje prettier, biome, eslint).

    Konfiguracja systemu

    Ustawienia związane ze ścieżkami wewnętrznymi i wynikami wyjściowymi Intlayer. Te ustawienia są zazwyczaj wewnętrzne i nie powinny być modyfikowane przez użytkownika.

    FieldDescriptionTypeDefaultExampleNote
    baseDirKatalog bazowy dla projektu.stringprocess.cwd()'/path/to/project'Używany do rozwiązywania wszystkich katalogów związanych z Intlayer.
    dictionariesDirŚcieżka katalogu do przechowywania słowników lokalizacyjnych.string'.intlayer/dictionary'
    moduleAugmentationDirKatalog dla rozszerzenia modułów, umożliwiający lepsze sugestie IDE i sprawdzanie typów.string'.intlayer/types''intlayer-types'Upewnij się, że jest to uwzględnione w tsconfig.json.
    unmergedDictionariesDirKatalog do przechowywania niescalonych słowników.string'.intlayer/unmerged_dictionary'
    typesDirKatalog do przechowywania typów słowników.string'.intlayer/types'
    mainDirKatalog, w którym przechowywane są główne pliki aplikacji.string'.intlayer/main'
    configDirKatalog, w którym przechowywane są pliki konfiguracyjne.string'.intlayer/config'
    cacheDirKatalog, w którym przechowywane są pliki cache'u.string'.intlayer/cache'

    Konfiguracja słownika (Dictionary)

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

    Ta konfiguracja słownika służy dwóm głównym celom:

    1. Wartości domyślne: Zdefiniuj wartości domyślne podczas tworzenia plików deklaracji treści
    2. Zachowanie awaryjne: Podaj wartości awaryjne, gdy określone pola nie są zdefiniowane, co pozwala na globalnego zdefiniowania zachowania operacji słownika

    Aby uzyskać więcej informacji o plikach deklaracji zawartości i sposobie zastosowania wartości konfiguracji, zobacz Dokumentację pliku zawartości.

    PoleOpisTypDomyślniePrzykładUwagi
    fillKontroluje 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.
    descriptionPomaga edytorowi i CMS zrozumieć przeznaczenie słownika. Używane również jako kontekst do generowania tłumaczeń przez AI.stringundefined'User profile section'
    localePrzełą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ń.LocalesValuesundefined'en'Używaj tego, jeśli słownik jest przeznaczony dla konkretnego języka, a nie zawiera wielu tłumaczeń.
    contentAutoTransformationCzy 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 }
    falsetrue• Markdown : ### Titlemd('### Title') .
    • HTML : <div>Title</div>html('<div>Title</div>') .
    • Wstawki : Hello {{name}}insert('Hello {{name}}') .
    locationWskazuje 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.
    importModeKontroluje 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.
    formatDomyślny format komunikatów dla wszystkich słowników w projekcie.'intlayer' |
    'icu' |
    'i18next' |
    'vue-i18n' |
    'po'
    'intlayer''icu''intlayer': Natywny format intlayer.
    'icu': Format komunikatów ICU.
    'i18next': Format i18next.
    'vue-i18n': Format Vue I18n.
    'po': Format GNU Gettext PO.
    priorityPriorytet słownika. Przy rozwiązywaniu konfliktów między słownikami wyższa wartość ma pierwszeństwo przed niższą.numberundefined1
    liveZDEPRECJONOWANE - używaj importMode: 'fetch'. Wcześniej wskazywało, czy należy pobierać treść słownika dynamicznie przez API Live Sync.booleanundefinedPrzemianowano na importMode: 'fetch' w v8.0.0.
    schemaGenerowane automatycznie przez Intlayer do walidacji schematu JSON.'https://intlayer.org/schema.json'AutomatyczneNie edytuj ręcznie.
    titlePomaga identyfikować słowniki w edytorze i CMS.stringundefined'User Profile'
    tagsKlasyfikuje słowniki i dostarcza kontekst lub instrukcje dla edytora i AI.string[]undefined['user', 'profile']
    versionWersja zdalnego słownika; pomaga śledzić używaną obecnie wersję.stringundefined'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.

    PoleOpisTypDomyślniePrzykładUwagi
    modeWskazuje tryb loggera.'default' |
    'verbose' |
    'disabled'
    'default''verbose''verbose': Zapisuje więcej informacji do debugowania.
    'disabled': Całkowicie wyłącza loggera.
    prefixPrefiks 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
    PoleOpisTypDomyślniePrzykładUwagi
    providerDostawca, 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' |
    'moonshotai'
    undefined'anthropic'Różni dostawcy wymagają różnych kluczy API i mają różne cenniki.
    modelModel AI do użycia w funkcjach AI.stringBrak'gpt-4o-2024-11-20'Konkretne modele zależą od dostawcy.
    temperatureKontroluje losowość odpowiedzi AI.numberBrak0.1Wyższa temperatura = bardziej kreatywne, ale mniej niezawodne odpowiedzi.
    apiKeyTwój klucz API dla wybranego dostawcy.stringBrakprocess.env.OPENAI_API_KEYMusi pozostać tajny; używaj zmiennych środowiskowych.
    applicationContextDodatkowy kontekst o Twojej aplikacji, aby pomóc AI generować dokładniejsze tłumaczenia (domena, grupa docelowa, ton, terminologia).stringBrak'mój własny kontekst aplikacji'Można użyć do dodania zasad (np.: "Nie powinieneś tłumaczyć swoich URL" ).
    baseURLBazowy URL dla API AI.stringBrak'https://api.openai.com/v1'
    'http://localhost:5000'
    Może wskazywać na lokalne lub własne punkty końcowe API AI.
    dataSerializationFormat 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.
    PoleOpisTypDomyślniePrzykładUwagi
    modeKontroluje tryb wykonywania budowania.'auto' |
    'manual'
    'auto''manual''auto': Budowanie jest automatycznie wyzwalane podczas budowania (build time) 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).
    optimizeKontroluje, czy optymalizacja budowania jest wykonywana.booleanundefinedprocess.env.NODE_ENV === 'production'• Jeśli niezdefiniowane, optymalizacja jest wyzwalana podczas budowania (build time) 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.
    minifyMinimalizuj słowniki, aby zmniejszyć rozmiar bundle'a.booleanfalse• 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.
    purgeUsuń nieużywane klucze w słownikach.booleanfalse• Określa, czy pakiet ma zostać wyczyszczony.
    • Domyślnie: true w produkcji.
    • Ta opcja zostanie zignorowana, jeśli optimize jest wyłączone.
    checkTypesWskazuje, czy budowanie powinno sprawdzać typy TypeScript i logować błędy.booleanfalseMoże spowolnić proces budowania.
    chunkGroupingOkreśla, czy fragmenty słownika dla poszczególnych języków mają być grupowane według granicy podziału kodu, która ich używa.booleantrue• Bez grupowania strona złożona z wielu komponentów wysyła jedno żądanie na słownik.
    • Słowniki osiągane z kilku granic trafiają do wspólnego fragmentu, więc żadna strona nie dostarcza treści innej strony.
    • Dotyczy tylko słowników używających importMode: 'dynamic'.
    • Dotyczy tylko builda klienta i tylko podczas bundlowania (nie w trybie dev).
    dictionariesPreloadOkreśla, czy słownik ma być ładowany razem z fragmentem, który go używa, zamiast być pobierany po wyrenderowaniu tego fragmentu.booleantrue• Wygenerowany punkt wejścia oczekuje na język przeglądania na najwyższym poziomie, więc leniwie ładowana trasa nie jest uznawana za załadowaną, dopóki jej treść nie jest dostępna.
    • Odczyty renderują się synchronicznie zamiast zawieszać, więc nawigacja nie miga już stanem ładowania.
    • Oczekiwany jest tylko rozwiązany język, więc strona pobiera wyłącznie język, który wyświetla.
    • Dotyczy tylko słowników używających importMode: 'dynamic', w buildzie klienta.
    • Wymaga bundlera obsługującego top-level await (Vite, esbuild).
    outputFormatKontroluje format wyjściowy słowników.('esm' | 'cjs')[]['esm', 'cjs']['cjs']
    traversePatternWzorzec 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 kompilatora (Compiler)

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

    PoleOpisTypDomyślniePrzykładUwagi
    enabledWskazuje, 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.
    dictionaryKeyPrefixPrefiks dla zebranych kluczy słowników.string'''my-prefix-'Dodawany przed wygenerowanym kluczem (opartym na nazwie pliku), aby uniknąć konfliktów.
    saveComponentsCzy zapisać komponenty po ich przekształceniu.booleanfalse• Jeśli true, oryginalne pliki zostaną nadpisane przekształconymi wersjami.
    • Pozwala na jednorazowe uruchomienie kompilatora, a następnie jego usunięcie.
    outputDefiniuje ś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.
    noMetadataJeśli true, kompilator usuwa metadane słownika (klucz, content wrapper) z wyniku.booleanfalsefalse{"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.
    dictionaryKeyPrefixPrefiks klucza słownikastring''Dodaje opcjonalny prefiks do wyodrębnionych kluczy słownika

    Własne schematy (Custom Schemas)

    PoleOpisTyp
    schemasPozwala definiować schematy Zod do walidacji struktury Twoich słowników.Record<string, ZodSchema>

    Wtyczki (Plugins)

    PoleOpisTyp
    pluginsLista wtyczek Intlayer, które mają być dołączone.IntlayerPlugin[]

    Często Zadawane Pytania

    W katalogu głównym projektu, obok package.json. Intlayer przeszukuje katalog roboczy i jego katalogi nadrzędne w poszukiwaniu intlayer.config.ts, intlayer.config.js, intlayer.config.mjs lub intlayer.config.cjs. Możesz również wskazać niestandardową ścieżkę za pomocą flagi --config w poleceniach CLI.

    Znacznie mniej niż rozwiązania oparte na przestrzeniach nazw, ponieważ strona nigdy nie pobiera katalogu, którego nie renderuje. Znaczniki renderowane po stronie serwera rozwiązują treść na serwerze, a kompilator czasu budowy zastępuje wywołania useIntlayer dokładnymi wpisami, których używa komponent, dzięki czemu nieużywane klucze i nieużywane języki są usuwane. Słowniki dynamiczne dzielą resztę na poszczególne języki. W porównaniu z typowymi alternatywami, Intlayer zmniejsza rozmiar bundle'a i strony nawet o 50%. Zobacz optymalizację bundle'a oraz benchmark.

    Tak, i są dwie drogi. Możesz migrować treść stopniowo za pomocą przewodnika migracji z i18next lub przewodnika migracji z next-intl. Możesz także zachować obecne API w całości: adaptery kompatybilności udostępniają dokładnie to samo API co i18next, react-i18next, next-intl, next-i18next, react-intl, use-intl, vue-i18n i Lingui, ale zasilane słownikami Intlayer, więc zmieniają się importy, a kod komponentów pozostaje nienaruszony.

    Tak. Wtyczka sync JSON utrzymuje Twoje pliki /messages/{locale}/{namespace}.json jako źródło prawdy i generuje z nich słowniki Intlayer w obu kierunkach. Wtyczka sync PO robi to samo dla katalogów gettext, a pliki per locale pozwalają rozdzielić zawartość według języka zamiast grupować lokalizacje w jednym pliku.

    Nie. Uruchom npx intlayer extract, a Intlayer odczyta Twoje pliki źródłowe, wyodrębni ciągi widoczne dla użytkownika i utworzy plik .content obok każdego z nich, dzięki czemu przeglądasz diff zamiast ręcznie kopiować ciągi do katalogu pojedynczo. Zobacz polecenie extract.

    W przypadku w pełni zautomatyzowanego procesu Intlayer Compiler robi to samo w czasie budowania w kodzie JSX, TSX, Vue i Svelte, generując słowniki przy każdej zmianie, dzięki czemu nie ma potrzeby ręcznego zarządzania kluczami. Działa on w oparciu o analizę statyczną, więc ciągi istniejące tylko w czasie wykonywania pozostają poza jego zasięgiem i wymaga kilku adnotacji do odróżnienia tekstu dla użytkownika od logiki aplikacji.

    Pięć narzędzi, wszystkie opcjonalne:

    • Rozszerzenie VS Code: przejście od klucza useIntlayer do pliku treści, który go deklaruje, wyodrębnianie treści z komponentu oraz uruchamianie build, fill, test, push i pull z palety poleceń lub dedykowanej karty Intlayer.
    • Serwer LSP: taka sama świadomość w dowolnym edytorze obsługującym LSP, z funkcjami przejdź do definicji (go to definition), znajdź wszystkie referencje, podglądem przetłumaczonej wartości po najechaniu kursorem, autouzupełnianiem kluczy i pól oraz ostrzeżeniem, gdy klucz nie jest nigdzie zadeklarowany. Rozpoznaje również wywołania i18next, react-i18next, next-intl i use-intl, co ułatwia migrację.
    • Serwer MCP: udostępnia dokumentację i CLI Intlayer dla Cursor, VS Code, Claude Desktop, Claude Code i ChatGPT, dzięki czemu asystent odpowiada na podstawie aktualnej dokumentacji zamiast zgadywać i może samodzielnie wykonywać polecenia, takie jak intlayer fill.
    • Umiejętności agenta (Agent skills): wyspecjalizowane umiejętności, takie jak intlayer-config, intlayer-cli i intlayer-content, oraz po jednej dla każdego frameworka, które uczą agenta konfiguracji routingu i typów węzłów treści.
    • Wtyczka ESLint: reguła no-raw-text oznacza zakodowane na stałe ciągi tekstowe, z dodatkowymi regułami dla statycznych kluczy słownika i nieużywanej zawartości.