Autor:
    Data utworzenia:2025-04-18Ostatnia aktualizacja:2025-06-29

    Deklaracja zawartości Per-Locale w Intlayer

    Intlayer obsługuje dwa sposoby deklarowania wielojęzycznej zawartości:

    • Jeden plik ze wszystkimi tłumaczeniami
    • Jeden plik na locale (format per-locale)

    Ta elastyczność umożliwia:

    • Łatwą migrację z innych narzędzi i18n
    • Wsparcie dla zautomatyzowanych procesów tłumaczeniowych
    • Jasna organizacja tłumaczeń w oddzielnych plikach specyficznych dla locale

    Jeden plik z wieloma tłumaczeniami

    Ten format jest idealny dla:

    • Szybkiej iteracji w kodzie.
    • Bezproblemowej integracji z CMS.

    Jest to zalecane podejście dla większości przypadków użycia. Centralizuje tłumaczenia, co ułatwia iterację i integrację z CMS.

    hello-world.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const helloWorldContent = {
      key: "hello-world",
      content: {
        multilingualContent: t({
          en: "Title of my component",
          es: "Título de mi componente",
        }),
      },
    } satisfies Dictionary;
    
    export default helloWorldContent;
    
    Zalecane: Ten format jest najlepszy podczas korzystania z wizualnego edytora Intlayer lub zarządzania tłumaczeniami bezpośrednio w kodzie.
    Uwaga: W obu przypadkach plik deklaracji zawartości musi być zgodny ze wzorem nazewnictwa *.content.{ts,tsx,js,jsx,mjs,cjs,json}, aby być rozpoznany przez Intlayer. Sufiks .[locale] jest opcjonalny i używany tylko jako konwencja nazewnictwa.

    Globalna konfiguracja dla plików dla poszczególnych lokali

    Możesz skonfigurować globalną konfigurację dla plików dla poszczególnych lokali, dodając poniższą treść do pliku intlayer.config.ts:

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

    Korzystając z tej konfiguracji, wszystkie pliki dla poszczególnych lokali będą generowane z domyślnym lokalem ustawionym na angielski. Obejmuje to również generowanie plików .content za pomocą polecenia extract oraz kompilatora. (Zobacz Compiler lub Extract, aby uzyskać więcej informacji.)

    Format per-locale

    Ten format jest przydatny, gdy:

    • Chcesz wersjonować lub nadpisywać tłumaczenia niezależnie.
    • Integrujesz procesy tłumaczeń maszynowych lub ludzkich.

    Możesz również podzielić tłumaczenia na indywidualne pliki dla poszczególnych lokalizacji, określając pole locale:

    hello-world.es.content.ts
    import { t, Locales, type Dictionary } from "intlayer";
    
    const helloWorldContent = {
      key: "hello-world",
      locale: Locales.SPANISH, // Ważne
      content: { multilingualContent: "Título de mi componente" },
    } satisfies Dictionary;
    
    export default helloWorldContent;
    
    Ważne: Upewnij się, że pole locale jest zdefiniowane. Informuje Intlayer, jakiego języka dotyczy plik.

    Mieszanie formatów

    Możesz łączyć oba podejścia deklaracji dla tego samego klucza zawartości. Na przykład:

    • Zadeklaruj swoją bazową zawartość statycznie w pliku takim jak index.content.ts.
    • Dodaj lub nadpisz konkretne tłumaczenia w osobnych plikach, takich jak index.fr.content.ts lub index.content.json.

    To rozwiązanie jest szczególnie przydatne, gdy:

    • Chcesz zdefiniować początkową strukturę zawartości w kodzie.
    • Planujesz wzbogacić lub uzupełnić tłumaczenia później, korzystając z CMS lub narzędzi automatycznych.
    bash
    .
    └── Components
        └── MyComponent
            ├── index.content.ts
            ├── index.content.json
            └── index.ts
    

    Przykład

    Oto plik deklaracji zawartości wielojęzycznej:

    Components/MyComponent/index.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const helloWorldContent = {
      key: "hello-world",
      locale: Locales.ENGLISH,
      content: {
        multilingualContent: "Tytuł mojego komponentu",
        projectName: "Mój projekt",
      },
    } satisfies Dictionary;
    
    export default helloWorldContent;
    
    Components/MyComponent/index.content.json
    {
      "$schema": "https://intlayer.org/schema.json",
      "key": "hello-world",
      "content": {
        "multilingualContent": {
          "nodeType": "translation",
          "translation": {
            "fr": "Titre de mon composant",
            "es": "Título de mi componente"
          }
        }
      }
    }
    

    Intlayer automatycznie łączy pliki wielojęzyczne i per-locale.

    Components/MyComponent/index.ts
    import { getIntlayer, Locales } from "intlayer";
    
    const intlayer = getIntlayer("hello-world"); // Domyślny język to ENGLISH, więc zwróci zawartość w języku angielskim
    
    console.log(JSON.stringify(intlayer, null, 2));
    // Wynik:
    // {
    //  "multilingualContent": "Tytuł mojego komponentu",
    //  "projectName": "Mój projekt"
    // }
    
    const intlayer = getIntlayer("hello-world", Locales.SPANISH);
    
    console.log(JSON.stringify(intlayer, null, 2));
    // Wynik:
    // {
    //  "multilingualContent": "Título de mi componente",
    //  "projectName": "Mój projekt"
    // }
    
    const intlayer = getIntlayer("hello-world", Locales.FRENCH);
    
    console.log(JSON.stringify(intlayer, null, 2));
    // Wynik:
    // {
    //  "multilingualContent": "Titre de mon composant",
    //  "projectName": "Mój projekt"
    // }
    

    Automatyczne generowanie tłumaczeń

    Użyj intlayer CLI, aby automatycznie uzupełnić brakujące tłumaczenia na podstawie wybranych usług.