Autor:
    Data utworzenia:2025-04-18Ostatnia aktualizacja:2026-05-31

    Przetłumacz swoją aplikację Analog (Angular) za pomocą Intlayer | Internacjonalizacja (i18n)

    ide.intlayer.org
    intlayer-analog-template.vercel.app

    Spis treści

    Dlaczego Interlayer zamiast alternatyw?

    W porównaniu do głównych rozwiązań, takich jak ngx-translate czy angular-l10n, Intlayer jest rozwiązaniem wyposażonym w zintegrowane optymalizacje, takie jak:

    Intlayer jest zoptymalizowany do doskonałej współpracy z Analogiem, oferując wielojęzyczny routing, obsługę SSR i wszystkie funkcje potrzebne do skalowania internacjonalizacji (i18n).

    Zamiast ładować ogromne pliki JSON na swoje strony, ładuj tylko niezbędną treść. Intlayer pomaga zmniejszyć rozmiary bundle'a i stron nawet o 50%.

    Określanie zakresu zawartości aplikacji ułatwia konserwację aplikacji na dużą skalę. Możesz powielić lub usunąć pojedynczy folder funkcji bez obciążania psychicznego koniecznością przeglądania całej bazy kodu zawartości. Dodatkowo Inlayer jest w pełni napisany, aby zapewnić dokładność treści.

    Wspólna lokalizacja treści zmniejsza potrzebny kontekst dzięki modelom dużego języka (LLM). Intlayer zawiera także zestaw narzędzi, taki jak CLI do sprawdzania brakujących tłumaczeńLSP, MCP i agent skills, aby praca programisty (DX) była jeszcze płynniejsza dla agentów AI.

    Korzystaj z automatyzacji, aby tłumaczyć w swoim potoku CI/CD przy użyciu wybranego LLM na koszt dostawcy sztucznej inteligencji. Intlayer oferuje także kompilator do automatyzacji ekstrakcji treści, a także [platformę internetową] (/pl/doc/concept/cms), która pomaga tłumaczyć w tle.

    Łączenie ogromnych plików JSON z komponentami może prowadzić do problemów z wydajnością i reaktywnością. Inlayer optymalizuje ładowanie treści w czasie kompilacji.

    Więcej niż tylko rozwiązanie i18n, Intlayer zapewnia samodzielny edytor wizualny i pełny CMS, który pomoże Ci zarządzać wielojęzyczną treścią w w czasie rzeczywistym, dzięki czemu współpraca z tłumaczami, copywriterami i innymi członkami zespołu będzie płynna. Treść może być przechowywana lokalnie i/lub zdalnie.

    Przewodnik krok po kroku, jak skonfigurować Intlayer w aplikacji Analog

    Zobacz Szablon aplikacji na GitHubie.

    1. Instalacja zależności

      Zainstaluj niezbędne pakiety za pomocą npm:

      bash
      npx intlayer init --interactive
      
      flaga --interactive jest opcjonalna. Użyj intlayer-cli init, jeśli jesteś agentem AI.
      To polecenie wykryje Twoje środowisko i zainstaluje wymagane pakiety. Na przykład:
      bash
      npm install intlayer angular-intlayer vite-intlayer
      
      • intlayer

        Główny pakiet dostarczający narzędzia i18n do zarządzania konfiguracją, tłumaczenia, deklaracji treści, transpilacji oraz poleceń CLI.

      • angular-intlayer Pakiet integrujący Intlayer z aplikacją Angular. Dostarcza dostawców kontekstu (context providers) i hooki dla internacjonalizacji Angulara.

      • vite-intlayer Pakiet integrujący Intlayer z Vite. Dostarcza wtyczkę (plugin) do obsługi plików deklaracji treści i ustawia aliasy dla optymalnej wydajności.

    2. Konfiguracja projektu

      Utwórz plik konfiguracyjny, aby skonfigurować języki swojej aplikacji:

      intlayer.config.ts
      import { Locales, type IntlayerConfig } from "intlayer";
      
      const config: IntlayerConfig = {
        internationalization: {
          locales: [
            Locales.ENGLISH,
            Locales.FRENCH,
            Locales.SPANISH,
            // Twoje inne języki
          ],
          defaultLocale: Locales.ENGLISH,
        },
      };
      
      export default config;
      
      Za pomocą tego pliku konfiguracyjnego możesz ustawić zlokalizowane adresy URL, przekierowania middleware, nazwy ciasteczek, lokalizację i rozszerzenie deklaracji treści, wyłączyć logi Intlayer w konsoli i wiele więcej. Pełną listę dostępnych parametrów znajdziesz w dokumentacji konfiguracji.
    3. Zintegruj Intlayer w konfiguracji Vite

      Aby zintegrować Intlayer z Analog, musisz użyć wtyczki vite-intlayer.

      Zmodyfikuj plik vite.config.ts:

      vite.config.ts
      import { defineConfig } from "vite";
      import { intlayer } from "vite-intlayer";
      import analog from "@analogjs/platform";
      
      // https://vitejs.dev/config/
      export default defineConfig(() => ({
        plugins: [
          analog(),
          intlayer({
            proxy: {
              ignore: (req) => req.url?.startsWith("/api"),
            },
          }),
        ],
      }));
      
      Wtyczka intlayer() konfiguruje Vite do pracy z Intlayer. Obsługuje pliki deklaracji treści i ustawia aliasy dla optymalnej wydajności.
    4. Zadeklaruj swoją treść

      Twórz i zarządzaj deklaracjami treści, aby przechowywać tłumaczenia:

      Deklaracje treści mogą być definiowane w dowolnym miejscu aplikacji, o ile znajdują się w katalogu contentDir (domyślnie ./src) i pasują do rozszerzenia pliku deklaracji treści (domyślnie .content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
      Więcej szczegółów znajdziesz w dokumentacji deklaracji treści.
    5. Użyj Intlayer w kodzie

      Aby korzystać z funkcji internacjonalizacji Intlayer w całej aplikacji Analog, musisz dodać Intlayer do konfiguracji aplikacji.

      src/app/app.config.ts
      import { ApplicationConfig } from "@angular/core";
      import { provideIntlayer } from "angular-intlayer";
      
      export const appConfig: ApplicationConfig = {
        providers: [
          provideIntlayer(), // Dodaj tutaj dostawcę Intlayer
        ],
      };
      

      Następnie możesz użyć funkcji useIntlayer w dowolnym komponencie.

      src/app/pages/index.page.ts
      import { Component } from "@angular/core";
      import { useIntlayer } from "angular-intlayer";
      
      @Component({
        selector: "app-home",
        standalone: true,
        template: `
          <div class="content">
            <h1>{{ content().title }}</h1>
            <p>{{ content().congratulations }}</p>
          </div>
        `,
      })
      export default class HomeComponent {
        content = useIntlayer("app");
      }
      

      Treść Intlayer jest zwracana jako Signal, więc dostęp do wartości uzyskujesz wywołując sygnał: content().title.

    6. Zmiana języka treści

      Opcjonalne

      Aby zmienić język treści, możesz użyć funkcji setLocale dostarczonej przez funkcję useLocale. Pozwala to ustawić język aplikacji i odpowiednio zaktualizować treść.

      Utwórz komponent do przełączania języków:

      src/app/locale-switcher.component.ts
      import { Component } from "@angular/core";
      import { CommonModule } from "@angular/common";
      import { useLocale } from "angular-intlayer";
      
      @Component({
        selector: "app-locale-switcher",
        standalone: true,
        imports: [CommonModule],
        template: `
          <div class="locale-switcher">
            <select
              [value]="locale()"
              (change)="setLocale($any($event.target).value)"
            >
              @for (loc of availableLocales; track loc) {
                <option [value]="loc">{{ loc }}</option>
              }
            </select>
          </div>
        `,
      })
      export class LocaleSwitcherComponent {
        localeCtx = useLocale();
      
        locale = this.localeCtx.locale;
        availableLocales = this.localeCtx.availableLocales;
        setLocale = this.localeCtx.setLocale;
      }
      

      Następnie użyj tego komponentu na swoich stronach:

      src/app/pages/index.page.ts
      import { Component } from "@angular/core";
      import { useIntlayer } from "angular-intlayer";
      import { LocaleSwitcherComponent } from "../locale-switcher.component";
      
      @Component({
        selector: "app-home",
        standalone: true,
        imports: [LocaleSwitcherComponent],
        template: `
          <app-locale-switcher></app-locale-switcher>
          <div class="content">
            <h1>{{ content().title }}</h1>
            <p>{{ content().congratulations }}</p>
          </div>
        `,
      })
      export default class HomeComponent {
        content = useIntlayer("app");
      }
      

    Konfiguracja TypeScript

    Intlayer wykorzystuje rozszerzanie modułów (module augmentation), aby czerpać korzyści z TypeScript i wzmocnić bazę kodu.

    Autouzupełnianie

    Błąd tłumaczenia

    Upewnij się, że Twoja konfiguracja TypeScript zawiera automatycznie generowane typy.

    tsconfig.json
    {
      // ... Twoje istniejące konfiguracje TypeScript
      "include": [
        // ... Twoje istniejące konfiguracje TypeScript
        ".intlayer/**/*.ts", // Uwzględnij automatycznie generowane typy
      ],
    }
    

    Konfiguracja Git

    Zaleca się ignorowanie plików generowanych przez Intlayer. Pozwala to uniknąć ich zatwierdzania w repozytorium Git.

    Aby to zrobić, dodaj następujące instrukcje do pliku .gitignore:

    bash
    #  Ignoruj pliki generowane przez Intlayer
    .intlayer
    

    Rozszerzenie VS Code

    Aby usprawnić proces programowania z Intlayer, możesz zainstalować oficjalne rozszerzenie Intlayer dla VS Code.

    Zainstaluj z VS Code Marketplace

    To rozszerzenie zapewnia:

    • Autouzupełnianie kluczy tłumaczeń.
    • Wykrywanie błędów w czasie rzeczywistym dla brakujących tłumaczeń.
    • Podgląd inline przetłumaczonej treści.
    • Szybkie akcje ułatwiające tworzenie i aktualizację tłumaczeń.

    Więcej szczegółów na temat korzystania z rozszerzenia znajdziesz w dokumentacji rozszerzenia Intlayer dla VS Code.

    Dowiedz się więcej

    Aby pójść dalej, możesz zaimplementować edytor wizualny lub wyeksportować treść do zewnętrznego systemu za pomocą CMS.

    Często Zadawane Pytania

    Analog to meta-framework dla Angulara zbudowany na bazie Vite, więc dziedziczy opcje Angulara i dodaje te z Vite:

    • ngx-translate lub Transloco: biblioteki runtime dla Angulara, wymagające manualnej konfiguracji pod kątem SSR Analog.
    • Intlayer: najbardziej zaawansowane rozwiązanie. Treści deklarowane w dowolnym miejscu bazy kodu (obok każdego komponentu lub centralnie) i kompilowane przez wtyczkę Vite w czasie budowy, w pełni typowane, ze wsparciem dla SSR, tłumaczeniem AI, edytorem wizualnym i systemem CMS.

    W Analog Intlayer łączy architekturę Vite, SSR i routing oparty na systemie plików w spójną całość. Zobacz dlaczego Intlayer.

    Znacznie mniej niż rozwiązania oparte na przestrzeniach nazw, ponieważ strona nigdy nie pobiera katalogu, którego nie renderuje. Kompilator czasu budowy zastępuje odwołania do treści dokładnymi wpisami, których używa komponent, a 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.

    W znacznej mierze tak. Postępuj zgodnie z przeglądem adapterów kompatybilności. Możesz także migrować stopniowo: wtyczka synchronizacji JSON utrzymuje Twoje pliki JSON jako źródło prawdy i generuje z nich słowniki Intlayer.

    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.

    W przypadku w pełni zautomatyzowanego procesu Intlayer Compiler robi to samo w czasie budowania: generuje słowniki przy każdej zmianie, eliminując konieczność ręcznego utrzymywania kluczy.

    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.