Autor:
    Data utworzenia:2024-08-14Ostatnia aktualizacja:2026-09-27

    Dlaczego warto rozważyć Intlayer?

    Czym jest Intlayer?

    Intlayer to biblioteka umiędzynarodowienia (i18n) zaprojektowana specjalnie dla programistów JavaScript. Umożliwia ona deklarowanie treści w dowolnym miejscu w kodzie. Konwertuje deklaracje treści wielojęzycznych na strukturyzowane słowniki, które można łatwo zintegrować z kodem. Dzięki użyciu TypeScript, Intlayer czyni Twój proces programowania silniejszym i bardziej wydajnym.

    Dlaczego Intlayer zamiast alternatyw?

    W porównaniu do głównych rozwiązań, takich jak next-intl czy i18next, Intlayer jest rozwiązaniem, które oferuje wbudowane optymalizacje, takie jak:

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

    Ograniczenie zakresu treści aplikacji do poziomu komponentów ułatwia konserwację w przypadku aplikacji na dużą skalę. Możesz zduplikować lub usunąć pojedynczy folder z funkcjonalnością bez obciążenia psychicznego związanego z przeglądaniem całego kodu treści. Dodatkowo Intlayer jest w pełni typowany, aby zapewnić dokładność Twoich treści.

    Umieszczenie treści bezpośrednio przy komponentach (co-location) zmniejsza kontekst wymagany przez duże modele językowe (LLM). Intlayer jest również wyposażony w zestaw narzędzi, takich jak CLI do testowania brakujących tłumaczeń, LSP, MCP oraz agent skills, aby uczynić środowisko programistyczne (DX) jeszcze bardziej płynnym dla agentów AI.

    Skorzystaj z automatyzacji tłumaczeń w swoim rurociągu CI/CD, używając wybranego modelu LLM po kosztach bezpośrednich u Twojego dostawcy AI. Intlayer oferuje również kompilator do automatycznego wyodrębniania treści, a także platformę internetową wspierającą tłumaczenie w tle.

    Podłączanie potężnych plików JSON do komponentów może prowadzić do problemów z wydajnością i reaktywnością. Intlayer optymalizuje ładowanie treści już na etapie budowania (build).

    Intlayer to coś więcej niż tylko rozwiązanie i18n, udostępnia on wizualny edytor z możliwością własnego hostowania oraz pełny CMS, który ułatwia zarządzanie wielojęzyczną treścią w czasie rzeczywistym. Dzięki temu współpraca z tłumaczami, copywriterami i innymi członkami zespołu jest bezproblemowa. Treści mogą być przechowywane lokalnie i/lub zdalnie.

    Jeśli używasz różnych frameworków dla różnych części swojej aplikacji (np. React, React-native, Vue, Angular, Svelte itp.), Intlayer zapewnia sposób na stosowanie wspólnej składni i implementacji we wszystkich głównych frameworkach frontendowych. Będziesz także mógł udostępniać swoje deklaracje treści w swoim design systemie, aplikacjach, backendzie itd.

    Dlaczego powstał Intlayer?

    Intlayer powstał, aby rozwiązać powszechny problem dotykający wszystkie popularne biblioteki i18n, takie jak next-intl, react-i18next, react-intl, next-i18next, react-intl oraz vue-i18n.

    Wszystkie te rozwiązania stosują scentralizowane podejście do listowania i zarządzania treściami. Na przykład:

    bash
    .
    ├── locales
    │   ├── en.json
    │   ├── es.json
    │   └── fr.json
    ├── i18n.ts
    └── src
        └── components
            └── MyComponent
                └── index.tsx
    

    Lub tutaj przy użyciu przestrzeni nazw (namespaces):

    bash
    .
    ├── locales
    │   ├── en
    │   │  ├── footer.json
    │   │  └── navbar.json
    │   ├── fr
    │   │  ├── footer.json
    │   │  └── navbar.json
    │   └── es
    │      ├── footer.json
    │      └── navbar.json
    ├── i18n.ts
    └── src
        └── components
            └── MyComponent
                └── index.tsx
    

    Tego typu architektura spowalnia proces programowania i komplikuje utrzymanie kodu z kilku powodów:

    1. Dla każdego nowo tworzonego komponentu musisz:

      • Utworzyć nowy zasób/przestrzeń nazw w folderze locales
      • Pamiętać o zaimportowaniu nowej przestrzeni nazw na swojej stronie
      • Przetłumaczyć treść (często robione ręcznie przez kopiowanie/wklejanie z narzędzi AI)
    2. Dla każdej zmiany wprowadzanej w komponentach musisz:

      • Wyszukać powiązany zasób/przestrzeń nazw (daleko od komponentu)
      • Przetłumaczyć treść
      • Upewnić się, że Twoja treść jest aktualna dla wszystkich języków (locales)
      • Zweryfikować, czy przestrzeń nazw nie zawiera nieużywanych kluczy/wartości
      • Upewnić się, że struktura plików JSON jest taka sama dla wszystkich języków

    W profesjonalnych projektach korzystających z tych rozwiązań często stosuje się platformy lokalizacyjne, aby ułatwić zarządzanie tłumaczeniem treści. Może to jednak szybko stać się kosztowne w przypadku dużych projektów.

    Aby rozwiązać ten problem, Intlayer przyjmuje podejście, które ogranicza zakres treści do poziomu pojedynczego komponentu i trzyma treść blisko niego, podobnie jak często robimy to z CSS (styled-components), typami, dokumentacją (storybook) czy testami jednostkowymi (jest).

    bash
    .
    └── components
        └── MyComponent
            ├── index.content.ts
            ├── index.test.tsx
            ├── index.stories.tsx
            └── index.tsx
    
    ./components/MyComponent/index.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const componentExampleContent = {
      key: "component-example",
      content: {
        myTranslatedContent: t({
          en: "Hello World",
          es: "Hola Mundo",
          fr: "Bonjour le monde",
        }),
      },
    } satisfies Dictionary;
    
    export default componentExampleContent;
    
    ./components/MyComponent/index.tsx
    import { useIntlayer } from "react-intlayer";
    
    export const ComponentExample = () => {
      const { myTranslatedContent } = useIntlayer("component-example");
    
      return <span>{myTranslatedContent}</span>;
    };
    

    Takie podejście pozwala na:

    1. Zwiększenie szybkości programowania

      • Pliki .content.{ts|js|mjs|cjs|json|tsx|jsx|md|mdx|yaml|yml} mogą być tworzone przy użyciu rozszerzenia VSCode
      • Narzędzia do automatycznego uzupełniania AI w Twoim IDE (takie jak GitHub Copilot) mogą pomóc w deklarowaniu treści, ograniczając kopiowanie/wklejanie
    2. Uporządkowanie bazy kodu

      • Zmniejszenie złożoności
      • Zwiększenie łatwości konserwacji
    3. Łatwiejsze duplikowanie komponentów i powiązanych z nimi treści (np. komponenty logowania/rejestracji itp.)

      • Ograniczając ryzyko wpłynięcia na treść innych komponentów
      • Kopiując i wklejając treść z jednej aplikacji do drugiej bez zewnętrznych zależności
    4. Unikanie zaśmiecania bazy kodu nieużywanymi kluczami/wartościami dla nieużywanych komponentów

      • Jeśli nie używasz komponentu, Intlayer nie zaimportuje powiązanej z nim treści
      • Jeśli usuniesz komponent, łatwiej zapamiętasz o usunięciu powiązanej treści, ponieważ będzie się ona znajdować w tym samym folderze
    5. Zmniejszenie kosztów wnioskowania dla agentów AI przy deklarowaniu treści wielojęzycznych

      • Agent AI nie będzie musiał skanować całej bazy kodu, aby dowiedzieć się, gdzie zaimplementować Twoją treść
      • Tłumaczenia mogą być łatwo wykonywane przez narzędzia AI do automatycznego uzupełniania w Twoim IDE (takie jak GitHub Copilot)
    6. Optymalizację wydajności ładowania

      • Jeśli komponent jest ładowany leniwie (lazy-loaded), powiązana z nim treść zostanie załadowana w tym samym momencie
    Aby zrozumieć, skąd wzięły się te biblioteki, przeczytaj historię i18n w JavaScript.

    Dodatkowe funkcje Intlayer

    FunkcjaOpis
    FeatureObsługa wielu frameworków

    Intlayer jest kompatybilny ze wszystkimi głównymi frameworkami i bibliotekami, w tym Next.js, React, Vite, Vue.js, Nuxt, Preact, Express i innymi.
    FeatureZarządzanie treścią oparte na JavaScript

    Wykorzystaj elastyczność JavaScript do wydajnego definiowania i zarządzania treściami.

    - Deklaracja treści
    FeatureKompilator

    Kompilator Intlayer automatycznie wyodrębnia treść z komponentów i generuje pliki słowników.

    - Kompilator
    FeaturePlik deklaracji treści dla konkretnego języka

    Przyspiesz proces tworzenia, deklarując treść raz, przed automatycznym generowaniem.

    - Plik deklaracji treści dla konkretnego języka
    FeatureŚrodowisko bezpieczne pod kątem typów

    Skorzystaj z TypeScript, aby upewnić się, że definicje treści i kod są wolne od błędów, jednocześnie czerpiąc korzyści z autouzupełniania w IDE.

    - Konfiguracja TypeScript
    FeatureUproszczona konfiguracja

    Szybko rozpocznij pracę przy minimalnej konfiguracji. Z łatwością dostosuj ustawienia lokalizacji, routingu, sztucznej inteligencji, budowania i obsługi treści.

    - Poznaj integrację z Next.js
    FeatureUproszczone pobieranie treści

    Nie musisz wywoływać funkcji t dla każdego elementu treści. Pobierz całą zawartość bezpośrednio za pomocą jednego hooka.

    - Integracja z React
    FeatureSpójna implementacja komponentów serwerowych

    Idealnie nadaje się do komponentów serwerowych Next.js, użyj tej samej implementacji dla komponentów klienckich i serwerowych, bez konieczności przekazywania funkcji t przez drzewo komponentów.

    - Komponenty serwerowe
    FeatureUporządkowana baza kodu

    Utrzymuj bazę kodu w większym porządku: 1 komponent = 1 słownik w tym samym folderze. Tłumaczenia blisko powiązanych komponentów zwiększają łatwość konserwacji i przejrzystość.

    - Jak działa Intlayer
    FeatureUlepszony routing

    Pełna obsługa routingu aplikacji, płynnie dostosowująca się do złożonych struktur aplikacji dla Next.js, React, Vite, Vue.js itp.

    - Poznaj integrację z Next.js
    FeatureObsługa Markdown

    Importuj i interpretuj pliki lokalne oraz zdalny Markdown dla treści wielojęzycznych, takich jak polityki prywatności, dokumentacja itp. Interpretuj i udostępniaj metadane Markdown w swoim kodzie.

    - Pliki treści
    FeatureDarmowy edytor wizualny i CMS

    Darmowy edytor wizualny i CMS są dostępne dla twórców treści, co eliminuje potrzebę korzystania z zewnętrznej platformy lokalizacyjnej. Utrzymuj synchronizację treści za pomocą Git lub całkowicie bądź częściowo przenieś zarządzanie do CMS.

    - Edytor Intlayer
    - CMS Intlayer
    FeatureZawartość podlegająca eliminacji nieużywanego kodu (Tree-shakable)

    Zawartość podlegająca tree-shakingowi, zmniejszająca rozmiar ostatecznej paczki. Ładuje treść dla poszczególnych komponentów, wykluczając nieużywane elementy z paczki. Obsługuje leniwe ładowanie w celu zwiększenia wydajności aplikacji.

    - Optymalizacja budowania aplikacji
    FeatureRenderowanie statyczne

    Nie blokuje renderowania statycznego.

    - Integracja z Next.js
    FeatureTłumaczenie wspomagane przez AI

    Przetłumacz swoją witrynę na 231 języków jednym kliknięciem, korzystając z zaawansowanych narzędzi tłumaczeniowych Intlayer opartych na sztucznej inteligencji, korzystając z własnego dostawcy AI/klucza API.

    - Integracja CI/CD
    - Intlayer CLI
    - Autouzupełnianie
    FeatureIntegracja z serwerem MCP

    Udostępnia serwer MCP (Model Context Protocol) do automatyzacji IDE, umożliwiając bezproblemowe zarządzanie treścią i przepływy pracy i18n bezpośrednio w środowisku programistycznym.

    - Serwer MCP
    FeatureRozszerzenie VSCode

    Intlayer udostępnia rozszerzenie do VSCode, które pomaga zarządzać treścią i tłumaczeniami, budować słowniki, tłumaczyć zawartość i nie tylko.

    - Rozszerzenie VSCode
    FeatureInteroperacyjność

    Umożliwia interoperacyjność z react-i18next, next-i18next, next-intl i react-intl.

    - Intlayer i react-intl
    - Intlayer i next-intl
    - Intlayer i next-i18next
    - Adaptery kompatybilności Intlayer
    Testowanie brakujących tłumaczeń (CLI/CI)✅ CLI: npx intlayer content test (audyt przyjazny dla CI)

    Porównanie Intlayer z innymi rozwiązaniami

    Cechaintlayerreact-i18nextreact-intl (FormatJS)linguinext-intlnext-i18nextvue-i18n
    Tłumaczenia blisko komponentów✅ Tak, treść powiązana z każdym komponentem❌ Nie❌ Nie❌ Nie❌ Nie❌ Nie✅ Tak, przy użyciu Single File Components (SFC)
    Integracja z TypeScript✅ Zaawansowane, automatycznie generowane ścisłe typy⚠️ Podstawowa; dodatkowa konfiguracja dla bezpieczeństwa✅ Dobra, ale mniej rygorystyczna⚠️ Typowanie wymaga konfiguracji✅ Dobra⚠️ Podstawowa✅ Dobra (typy są dostępne; bezpieczeństwo kluczy wymaga konfiguracji)
    Wykrywanie brakujących tłumaczeń✅ Wyróżnianie błędów w TypeScript oraz błąd/ostrzeżenie podczas budowania⚠️ Głównie ciągi rezerwowe (fallback) w czasie rzeczywistym⚠️ Ciągi rezerwowe⚠️ Wymaga dodatkowej konfiguracji⚠️ Rezerwa w czasie rzeczywistym⚠️ Rezerwa w czasie rzeczywistym⚠️ Rezerwa/ostrzeżenia w czasie rzeczywistym (konfigurowalne)
    Bogata zawartość (JSX/Markdown/komponenty)✅ Bezpośrednie wsparcie⚠️ Ograniczone / tylko interpolacja⚠️ Składnia ICU, nie rzeczywisty JSX⚠️ Ograniczone❌ Nie zaprojektowane dla złożonych węzłów⚠️ Ograniczone⚠️ Ograniczone (komponenty przez <i18n-t>, Markdown przez wtyczki)
    Tłumaczenie wspomagane przez AI✅ Tak, obsługuje wielu dostawców AI. Możliwość korzystania z własnych kluczy API. Uwzględnia kontekst aplikacji i zakres treści❌ Nie❌ Nie❌ Nie❌ Nie❌ Nie❌ Nie
    Edytor wizualny✅ Tak, lokalny edytor wizualny + opcjonalny CMS; możliwość wyeksportowania treści bazy kodu; osadzalny❌ Nie / dostępne za pośrednictwem zewnętrznych platform lokalizacyjnych❌ Nie / dostępne za pośrednictwem zewnętrznych platform lokalizacyjnych❌ Nie / dostępne za pośrednictwem zewnętrznych platform lokalizacyjnych❌ Nie / dostępne za pośrednictwem zewnętrznych platform lokalizacyjnych❌ Nie / dostępne za pośrednictwem zewnętrznych platform lokalizacyjnych❌ Nie / dostępne za pośrednictwem zewnętrznych platform lokalizacyjnych
    Zlokalizowany routing✅ Tak, obsługuje zlokalizowane ścieżki od samego początku (działa z Next.js i Vite)⚠️ Brak wbudowanego wsparcia, wymaga wtyczek (np. next-i18next) lub niestandardowej konfiguracji routera❌ Nie, tylko formatowanie komunikatów, routing musi być ręczny⚠️ Brak wbudowanego wsparcia, wymaga wtyczek lub konfiguracji ręcznej✅ Wbudowany, App Router obsługuje segment [locale]✅ Wbudowany✅ Wbudowany
    Dynamiczne generowanie tras✅ Tak⚠️ Wtyczka/ekosystem lub konfiguracja ręczna❌ Nie dostarczono⚠️ Wtyczka/ręcznie✅ Tak✅ Tak❌ Nie dostarczono (Nuxt i18n udostępnia)
    Pluralizacja✅ Wzorce oparte na wyliczeniach✅ Konfigurowalne (wtyczki takie jak i18next-icu)✅ (ICU)✅ (ICU/messageformat)✅ Dobra✅ Dobra✅ Wbudowane reguły liczby mnogiej
    Formatowanie (daty, liczby, waluty)✅ Zoptymalizowane formatowania (Intl pod maską)⚠️ Za pomocą wtyczek lub niestandardowego użycia Intl✅ Formatowania ICU✅ Pomocnicy ICU/CLI✅ Dobra (pomocnicy Intl)✅ Dobra (pomocnicy Intl)✅ Wbudowane formatowania daty/liczby (Intl)
    Format zawartości✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml w trakcie opracowywania)⚠️ .json✅ .json, .js⚠️ .po, .json✅ .json, .js, .ts⚠️ .json✅ .json, .js
    Obsługa ICU⚠️ WIP⚠️ Za pomocą wtyczki (i18next-icu)✅ Tak✅ Tak✅ Tak⚠️ Za pomocą wtyczki (i18next-icu)⚠️ Za pomocą niestandardowego formatowania/kompilatora
    Pomocnicy SEO (hreflang, sitemap)✅ Wbudowane narzędzia: pomocnicy dla sitemap, robots.txt, metadanych⚠️ Wtyczki społeczności/ręcznie❌ Nie jest rdzeniem❌ Nie jest rdzeniem✅ Dobra✅ Dobra❌ Nie jest rdzeniem (Nuxt i18n udostępnia pomocników)
    Ekosystem / Społeczność⚠️ Mniejsza, ale szybko rosnąca i bardzo responsywna✅ Największa i dojrzała✅ Duża⚠️ Mniejsza✅ Średniej wielkości, skupiona na Next.js✅ Średniej wielkości, skupiona na Next.js✅ Duża w ekosystemie Vue
    Renderowanie po stronie serwera i komponenty serwerowe✅ Tak, zoptymalizowane pod kątem SSR / React Server Components⚠️ Obsługiwane na poziomie strony, ale wymaga przekazania funkcji t w drzewie komponentów do podrzędnych komponentów serwerowych⚠️ Obsługiwane na poziomie strony z dodatkową konfiguracją, ale wymaga przekazania funkcji t w drzewie komponentów do podrzędnych komponentów serwerowych✅ Obsługiwane, wymagana konfiguracja⚠️ Obsługiwane na poziomie strony, ale wymaga przekazania funkcji t w drzewie komponentów do podrzędnych komponentów serwerowych⚠️ Obsługiwane na poziomie strony, ale wymaga przekazania funkcji t w drzewie komponentów do podrzędnych komponentów serwerowych✅ SSR przez Nuxt/Vue SSR (brak RSC)
    Tree-shaking (ładowanie tylko używanych treści)✅ Tak, na poziomie komponentu podczas budowania za pomocą wtyczek Babel/SWC⚠️ Zazwyczaj ładuje wszystko (można poprawić za pomocą przestrzeni nazw/dzielenia kodu)⚠️ Zazwyczaj ładuje wszystko❌ Nie jest domyślne⚠️ Częściowy⚠️ Częściowy⚠️ Częściowy (z dzieleniem kodu/konfiguracją ręczną)
    Leniwe ładowanie (Lazy loading)✅ Tak, na język / na słownik✅ Tak (np. backendy/namespaces na żądanie)✅ Tak (dzielone paczki językowe)✅ Tak (dynamiczne importowanie katalogów)✅ Tak (na trasę/na język), wymaga zarządzania przestrzeniami nazw✅ Tak (na trasę/na język), wymaga zarządzania przestrzeniami nazw✅ Tak (asynchroniczne wiadomości językowe)
    Usuwanie nieużywanych treści✅ Tak, na słownik podczas budowania❌ Nie, tylko poprzez ręczną segmentację przestrzeni nazw❌ Nie, wszystkie zadeklarowane wiadomości są pakowane✅ Tak, nieużywane klucze są wykrywane i usuwane podczas budowania❌ Nie, można zarządzać ręcznie za pomocą przestrzeni nazw❌ Nie, można zarządzać ręcznie za pomocą przestrzeni nazw❌ Nie, możliwe tylko poprzez ręczne leniwe ładowanie
    Zarządzanie dużymi projektami✅ Wspiera modułowość, doskonałe dla systemów projektowych⚠️ Wymaga dobrej dyscypliny w plikach⚠️ Centralne katalogi mogą stać się duże⚠️ Może stać się złożone✅ Modułowe z konfiguracją✅ Modułowe z konfiguracją✅ Modułowe z konfiguracją Vue Router/Nuxt i18n

    Gwiazdki na GitHubie

    Gwiazdki na GitHubie są silnym wskaźnikiem popularności projektu, zaufania społeczności i długoterminowej trajektorii. Choć nie są bezpośrednią miarą jakości technicznej, odzwierciedlają liczbę programistów, którzy uważają projekt za przydatny, śledzą jego postępy i prawdopodobnie go wdrożą. Do szacowania wartości projektu gwiazdki pomagają porównać atrakcyjność alternatyw i dostarczają wglądu w rozwój ekosystemu.

    Star History Chart

    Aktywność commitów

    Gwiazdki pokazują popularność. Commity pokazują, ile pracy włożono w projekt. W chwili pisania Intlayer ma około 7 500 commitów, więcej niż większość porównywanych tu bibliotek i mniej więcej 5 razy więcej niż next-intl czy next-i18next.

    • aymericzip/intlayer
    • formatjs/formatjs
    • i18next/i18next
    • lingui/js-lingui
    • amannn/next-intl
    • intlify/vue-i18n
    • codingcommons/typesafe-i18n
    • opral/paraglide-js

    Commity na domyślnej gałęzi, źródło: GitHub API.

    Intlayer to monorepo, więc ta liczba obejmuje każdy pakiet dla frameworków, CLI i dokumentację. Traktuj commity jako sygnał aktywności, a nie jakości.

    Pobrania z npm

    • intlayer
    • i18next
    • react-intl
    • @lingui/core
    • next-intl
    • vue-i18n
    • typesafe-i18n
    • @inlang/paraglide-js

    Źródło: API pobrań rejestru npm.

    Liczba pobrań nagradza najstarsze rozwiązania, a nie najlepsze. Biblioteka wydana lata temu wciąż jest instalowana przez każdy projekt, który ją wtedy wybrał, przez każde uruchomienie CI i przez każdy pakiet, który od niej zależy. Ta liczba mierzy bezwładność bardziej niż świadomy wybór.

    Asystenci AI wzmacniają ten efekt. next-intl, i18next i vue-i18n są wszędzie w kodzie, na którym ich trenowano, więc proponują je domyślnie, bez porównywania alternatyw. Każda sugestia dodaje pobrań, które napędzają kolejną sugestię. Porównuj na podstawie benchmarku, a nie liczby pobrań.

    Interoperacyjność

    intlayer może również pomóc w zarządzaniu przestrzeniami nazw react-intl, react-i18next, next-intl, next-i18next i vue-i18n.

    Używając intlayer, możesz zadeklarować treść w formacie swojej ulubionej biblioteki i18n, a intlayer wygeneruje przestrzenie nazw w wybranej przez Ciebie lokalizacji (przykład: /messages/{{locale}}/{{namespace}}.json).

    Jeśli chcesz nadal korzystać z API swojej obecnej biblioteki i18n, intlayer udostępnia również adaptery kompatybilności (compat adapters): pakiety wystawiające dokładnie to samo API co react-i18next, next-intl, react-intl, vue-i18n i inne, ale zasilane słownikami Intlayer. Dzięki temu możesz migrować stopniowo, bez przepisywania kodu. Zobacz dokumentację adapterów kompatybilności.

    Często Zadawane Pytania

    Współistnieją trzy generacje:

    • Biblioteki katalogów w czasie działania (runtime): i18next, react-i18next, next-i18next, vue-i18n, ngx-translate. Wiadomości znajdują się w przestrzeniach nazw JSON ładowanych w runtime.
    • Biblioteki wiadomości w czasie kompilacji: Lingui, Paraglide, react-intl oraz next-intl z etapem ekstrakcji.
    • Biblioteki z warstwą treści (Content layer): Intlayer. Treść deklarowana obok komponentu, tree-shaking, typowanie TypeScript, tłumaczenie AI i edytor wizualny.

    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.