Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Historia wersji
- "Aktualizacja użycia API useIntlayer w Solid do bezpośredniego dostępu do właściwości"v8.9.04.05.2026
- "Dodaj polecenie init"v7.5.930.12.2025
- "Przekształcenie funkcji `withIntlayer()` na funkcję opartą na promise"v5.6.06.07.2025
- "Inicjalizacja historii"v5.5.1029.06.2025
Treść tej strony została przetłumaczona przy użyciu sztucznej inteligencji.
Zobacz ostatnią wersję oryginalnej treści w języku angielskimJeśli masz pomysł na ulepszenie tej dokumentacji, zachęcamy do przesłania pull requesta na GitHubie.
Link do dokumentacji na GitHubieKopiuj dokument Markdown do schowka
Przetłumacz swoją stronę Next.js i Page Router za pomocą Intlayer | Internacjonalizacja (i18n)
Spis treści
Dlaczego Interlayer zamiast alternatyw?
W porównaniu do głównych rozwiązań, takich jak next-intl czy i18next, Intlayer jest rozwiązaniem wyposażonym w zintegrowane optymalizacje, takie jak:
Intlayer jest zoptymalizowany do współpracy z Server Components w celu wydajnego renderowania i jest w pełni kompatybilny z Turbopack. Nie blokuje renderowania statycznego i oferuje oprogramowanie pośredniczące oraz wszystkie funkcje potrzebne do skalowania internacjonalizacji (i18n).
Intlayer jest kompatybilny z Next.js 12, 13, 14, 15 i 16. Jeśli używasz routera Next.js Pages Router, możesz zapoznać się z tym [przewodnikiem] (/pl/doc/environment/nextjs/next-with-page-router). Routing lokalny jest przydatny ze względu na SEO, rozmiar bundle'a i wydajność. Jeśli go nie potrzebujesz, możesz zapoznać się z tym przewodnikiem. W przypadku Next.js 12, 13, 14 i 15 z App Router zapoznaj się z tym [przewodnikiem] (/pl/doc/environment/nextjs/14).
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: Konfiguracja Intlayer w aplikacji Next.js z użyciem Page Router
Instalacja zależności
Zainstaluj niezbędne pakiety, używając preferowanego menedżera pakietów:
bashKopiuj kodSkopiuj kod do schowka
flaga
--interactivejest opcjonalna. Użyjintlayer-cli init, jeśli jesteś agentem AI.To polecenie wykryje Twoje środowisko i zainstaluje wymagane pakiety. Na przykład:
bashKopiuj kodSkopiuj kod do schowka
intlayer
Główny pakiet, który dostarcza narzędzia do internacjonalizacji dla zarządzania konfiguracją, tłumaczeń, deklaracji treści, transpilecji oraz poleceń CLI.
next-intlayer
Pakiet integrujący Intlayer z Next.js. Zapewnia dostawców kontekstu oraz hooki do internacjonalizacji w Next.js. Dodatkowo zawiera wtyczkę Next.js do integracji Intlayer z Webpack lub Turbopack, a także middleware do wykrywania preferowanego języka użytkownika, zarządzania ciasteczkami oraz obsługi przekierowań URL.
Skonfiguruj swój projekt
Utwórz plik konfiguracyjny, aby zdefiniować języki obsługiwane przez Twoją aplikację:
intlayer.config.tsKopiuj kodSkopiuj kod do schowka
import { Locales, type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // Dodaj tutaj inne swoje lokalizacje ], defaultLocale: Locales.ENGLISH, }, }; export default config;Za pomocą tego pliku konfiguracyjnego możesz ustawić lokalizowane adresy URL, przekierowania w middleware, nazwy ciasteczek, lokalizację i rozszerzenie deklaracji zawartości, wyłączyć logi Intlayer w konsoli i wiele więcej. Pełną listę dostępnych parametrów znajdziesz w dokumentacji konfiguracyjnej.
Integracja Intlayer z konfiguracją Next.js
Zmodyfikuj konfigurację Next.js, aby włączyć Intlayer:
next.config.mjsKopiuj kodSkopiuj kod do schowka
Wtyczka Next.js
withIntlayer()służy do integracji Intlayer z Next.js. Zapewnia budowanie plików deklaracji zawartości oraz monitoruje je w trybie deweloperskim. Definiuje zmienne środowiskowe Intlayer w środowiskach Webpack lub Turbopack. Dodatkowo udostępnia aliasy optymalizujące wydajność oraz zapewnia kompatybilność z komponentami serwerowymi.Funkcja
withIntlayer()jest funkcją zwracającą promise. Jeśli chcesz użyć jej z innymi wtyczkami, możesz ją awaitować. Przykład:tsxKopiuj kodSkopiuj kod do schowka
Skonfiguruj Middleware do wykrywania lokalizacji
Skonfiguruj middleware, aby automatycznie wykrywać i obsługiwać preferowaną lokalizację użytkownika:
Od wersji Intlayer v9 to oprogramowanie pośredniczące (middleware) respektuje opcję
routing.enableProxy(truedomyślnie). Ustawrouting.enableProxy: falsew swojej konfiguracji, aby przekształcić je w pass-through bez usuwania tego pliku. Zobacz informacje o wydaniu v9.src/middleware.tsKopiuj kodSkopiuj kod do schowka
export { intlayerProxy as middleware } from "next-intlayer/middleware"; export const config = { matcher: "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)", };Dostosuj parametr
matcher, aby odpowiadał trasom Twojej aplikacji. Więcej informacji znajdziesz w dokumentacji Next.js dotyczącej konfigurowania matcher.Zdefiniuj dynamiczne trasy lokalizacji
Zaimplementuj dynamiczne routowanie, aby serwować zlokalizowane treści w zależności od lokalizacji użytkownika.
Utwórz strony specyficzne dla lokalizacji:
Zmień nazwę głównego pliku strony, aby zawierał dynamiczny segment
[locale].bashKopiuj kodSkopiuj kod do schowka
Zaktualizuj
_app.tsx, aby obsługiwał lokalizację:Zmodyfikuj swój plik
_app.tsx, aby uwzględnić providery Intlayer.Skonfiguruj
getStaticPathsigetStaticProps:W pliku
[locale]/index.tsxzdefiniuj ścieżki i propsy, aby obsłużyć różne lokalizacje.
src/pages/[locale]/index.tsxKopiuj kodSkopiuj kod do schowka
getStaticPathsigetStaticPropszapewniają, że Twoja aplikacja w Next.js Page Router wstępnie buduje niezbędne strony dla wszystkich lokalizacji. Takie podejście zmniejsza obciążenie podczas działania aplikacji i prowadzi do lepszego doświadczenia użytkownika. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją Next.js dotyczącągetStaticPathsorazgetStaticProps.Zadeklaruj swoją zawartość
Utwórz i zarządzaj deklaracjami zawartości, aby przechowywać tłumaczenia.
src/pages/[locale]/home.content.tsKopiuj kodSkopiuj kod do schowka
import { t, type Dictionary } from "intlayer"; const homeContent = { key: "home", content: { title: t({ en: "Welcome to My Website", fr: "Bienvenue sur mon site Web", es: "Bienvenido a mi sitio web", }), description: t({ en: "Get started by editing this page.", fr: "Commencez par éditer cette page.", es: "Comience por editar esta página.", }), }, } satisfies Dictionary; export default homeContent;Aby uzyskać więcej informacji na temat deklarowania zawartości, zapoznaj się z przewodnikiem po deklaracji zawartości.
Wykorzystaj zawartość w swoim kodzie
Uzyskaj dostęp do swoich słowników zawartości w całej aplikacji, aby wyświetlać przetłumaczoną zawartość.
src/pages/[locale]/index.tsxKopiuj kodSkopiuj kod do schowka
import type { FC } from "react"; import { useIntlayer } from "next-intlayer"; import { ComponentExample } from "@components/ComponentExample"; const HomePage: FC = () => { const content = useIntlayer("home"); return ( <div> <h1>{content.title}</h1> <p>{content.description}</p> <ComponentExample /> {/* Dodatkowe komponenty */} </div> ); }; // ... Reszta kodu, w tym getStaticPaths i getStaticProps export default HomePage;src/components/ComponentExample.tsxKopiuj kodSkopiuj kod do schowka
import type { FC } from "react"; import { useIntlayer } from "next-intlayer"; export const ComponentExample: FC = () => { const content = useIntlayer("component-example"); // Upewnij się, że masz odpowiadającą deklarację zawartości return ( <div> <h2>{content.title}</h2> <p>{content.content}</p> </div> ); };Podczas używania tłumaczeń w atrybutach typu
string(np.alt,title,href,aria-label), wywołujwartość funkcji w następujący sposób:
htmlKopiuj kodSkopiuj kod do schowka
Aby dowiedzieć się więcej o hooku
useIntlayer, zapoznaj się z dokumentacją.Internacjonalizacja metadanych
OpcjonalneJeśli chcesz internacjonalizować swoje metadane, takie jak tytuł strony, możesz użyć funkcji
getStaticPropsdostarczonej przez Next.js Page Router. W jej wnętrzu możesz pobrać zawartość za pomocą funkcjigetIntlayer, aby przetłumaczyć swoje metadane.src/pages/[locale]/metadata.content.tsKopiuj kodSkopiuj kod do schowka
import { type Dictionary, t } from "intlayer"; import { type Metadata } from "next"; const metadataContent = { key: "page-metadata", content: { title: t({ en: "Create Next App", fr: "Créer une application Next.js", es: "Crear una aplicación Next.js", }), description: t({ en: "Generated by create next app", fr: "Généré par create next app", es: "Generado por create next app", }), }, } satisfies Dictionary<Metadata>; export default metadataContent;src/pages/[locale]/index.tsxKopiuj kodSkopiuj kod do schowka
import { GetStaticPaths, GetStaticProps } from "next"; import { getIntlayer, getMultilingualUrls } from "intlayer"; import { useIntlayer } from "next-intlayer"; import Head from "next/head"; import type { FC } from "react"; interface HomePageProps { locale: string; metadata: { title: string; description: string; }; multilingualUrls: Record<string, string>; } const HomePage: FC<HomePageProps> = ({ metadata, multilingualUrls, locale, }) => { const content = useIntlayer("page"); return ( <div> <Head> <title>{metadata.title}</title> <meta name="description" content={metadata.description} /> {/* Generowanie tagów hreflang dla SEO */} {Object.entries(multilingualUrls).map(([lang, url]) => ( <link key={lang} rel="alternate" hrefLang={lang} href={url} /> ))} <link rel="canonical" href={multilingualUrls[locale]} /> </Head> {/* Zawartość strony */} <main>{/* Twoja zawartość strony tutaj */}</main> </div> ); }; export const getStaticProps: GetStaticProps<HomePageProps> = async ({ params, }) => { const locale = params?.locale as string; const metadata = getIntlayer("page-metadata", locale); /** * Generuje obiekt zawierający wszystkie adresy URL dla każdej lokalizacji. * * Przykład: * ```ts * getMultilingualUrls('/about'); * * // Zwraca * // { * // en: '/about', * // fr: '/fr/about', * // es: '/es/about', * // } * ``` */ const multilingualUrls = getMultilingualUrls("/"); return { props: { locale, metadata, multilingualUrls, }, }; }; export default HomePage; // ... Reszta kodu, w tym getStaticPathsNależy zauważyć, że funkcja
getIntlayerimportowana znext-intlayerzwraca Twoją zawartość opakowaną wIntlayerNode, co umożliwia integrację z edytorem wizualnym. Natomiast funkcjagetIntlayerimportowana zintlayerzwraca zawartość bezpośrednio, bez dodatkowych właściwości.Dowiedz się więcej o optymalizacji metadanych w oficjalnej dokumentacji Next.js.
Zmień język swojej zawartości
OpcjonalneAby zmienić język swojej zawartości w Next.js, zalecanym sposobem jest użycie komponentu
Link, aby przekierować użytkowników na odpowiednią zlokalizowaną stronę. KomponentLinkumożliwia prefetching strony, co pomaga uniknąć pełnego przeładowania strony.src/components/LanguageSwitcher.tsxKopiuj kodSkopiuj kod do schowka
import { Locales, getHTMLTextDir, getLocaleName, getLocalizedUrl, } from "intlayer"; import { useLocalePageRouter } from "next-intlayer"; import { type FC } from "react"; import Link from "next/link"; const LocaleSwitcher: FC = () => { const { locale, pathWithoutLocale, availableLocales } = useLocalePageRouter(); return ( <div> <button popoverTarget="localePopover">{getLocaleName(locale)}</button> <div id="localePopover" popover="auto"> {availableLocales.map((localeItem) => ( <Link href={getLocalizedUrl(pathWithoutLocale, localeItem)} hrefLang={localeItem} key={localeItem} aria-current={locale === localeItem ? "page" : undefined} onClick={() => setLocale(localeItem)} > <span> {/* Lokalizacja - np. FR */} {localeItem} </span> <span> {/* Język w swojej własnej lokalizacji - np. Français */} {getLocaleName(localeItem, locale)} </span> <span dir={getHTMLTextDir(localeItem)} lang={localeItem}> {/* Język w bieżącej lokalizacji - np. Francés przy ustawionej lokalizacji Locales.SPANISH */} {getLocaleName(localeItem)} </span> <span dir="ltr" lang={Locales.ENGLISH}> {/* Język po angielsku - np. French */} {getLocaleName(localeItem, Locales.ENGLISH)} </span> </Link> ))} </div> </div> ); };Alternatywnym sposobem jest użycie funkcji
setLocaledostarczonej przez hookuseLocale. Ta funkcja nie pozwoli na prefetching strony i spowoduje przeładowanie strony.W tym przypadku, bez przekierowania za pomocą
router.push, tylko Twój kod po stronie serwera zmieni lokalizację zawartości.src/components/LocaleSwitcher.tsxKopiuj kodSkopiuj kod do schowka
API
useLocalePageRouterjest takie samo jakuseLocale. Aby dowiedzieć się więcej o hookuuseLocale, zapoznaj się z dokumentacją.Odnośniki do dokumentacji:
Tworzenie lokalizowanego komponentu Link
OpcjonalneAby zapewnić, że nawigacja w Twojej aplikacji respektuje aktualną lokalizację, możesz stworzyć niestandardowy komponent
Link. Ten komponent automatycznie dodaje prefiks z aktualnym językiem do wewnętrznych adresów URL. Na przykład, gdy użytkownik mówiący po francusku kliknie link do strony "About", zostanie przekierowany na/fr/aboutzamiast na/about.To zachowanie jest przydatne z kilku powodów:
- SEO i doświadczenie użytkownika: Lokalizowane adresy URL pomagają wyszukiwarkom poprawnie indeksować strony specyficzne dla języka oraz dostarczają użytkownikom treści w ich preferowanym języku.
- Spójność: Korzystając z lokalizowanego linku w całej aplikacji, zapewniasz, że nawigacja pozostaje w obrębie bieżącej lokalizacji, zapobiegając nieoczekiwanym zmianom języka.
- Łatwość utrzymania: Centralizacja logiki lokalizacji w jednym komponencie upraszcza zarządzanie adresami URL, co sprawia, że baza kodu jest łatwiejsza do utrzymania i rozbudowy wraz z rozwojem aplikacji.
Poniżej znajduje się implementacja lokalizowanego komponentu
Linkw TypeScript:src/components/Link.tsxKopiuj kodSkopiuj kod do schowka
"use client"; import { getLocalizedUrl } from "intlayer"; import NextLink, { type LinkProps as NextLinkProps } from "next/link"; import { useLocale } from "next-intlayer"; import { forwardRef, PropsWithChildren, type ForwardedRef } from "react"; /** * Funkcja pomocnicza do sprawdzania, czy podany URL jest zewnętrzny. * Jeśli URL zaczyna się od http:// lub https://, jest uznawany za zewnętrzny. */ export const checkIsExternalLink = (href?: string): boolean => /^https?:\/\//.test(href ?? ""); /** * Niestandardowy komponent Link, który dostosowuje atrybut href na podstawie aktualnej lokalizacji. * Dla linków wewnętrznych używa `getLocalizedUrl`, aby dodać prefiks z lokalizacją (np. /fr/about). * Zapewnia to, że nawigacja pozostaje w kontekście tej samej lokalizacji. */ export const Link = forwardRef< HTMLAnchorElement, PropsWithChildren<NextLinkProps> >(({ href, children, ...props }, ref: ForwardedRef<HTMLAnchorElement>) => { const { locale } = useLocale(); const isExternalLink = checkIsExternalLink(href.toString()); // Jeśli link jest wewnętrzny i podano prawidłowy href, pobierz lokalizowany URL. const hrefI18n: NextLinkProps["href"] = href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href; return ( <NextLink href={hrefI18n} ref={ref} {...props}> {children} </NextLink> ); }); Link.displayName = "Link";Jak to działa
Wykrywanie linków zewnętrznych:
Funkcja pomocniczacheckIsExternalLinkokreśla, czy URL jest zewnętrzny. Linki zewnętrzne pozostają niezmienione, ponieważ nie wymagają lokalizacji.Pobieranie aktualnej lokalizacji:
HookuseLocaleudostępnia bieżącą lokalizację (np.frdla francuskiego).Lokalizacja URL:
Dla linków wewnętrznych (czyli niezewnętrznych) używana jest funkcjagetLocalizedUrl, która automatycznie dodaje prefiks z aktualnym locale do URL. Oznacza to, że jeśli użytkownik korzysta z wersji francuskiej, przekazanie/aboutjakohrefzostanie przekształcone na/fr/about.Zwracanie linku:
Komponent zwraca element<a>z zlokalizowanym URL, zapewniając spójność nawigacji zgodnie z ustawionym locale.
Integrując ten komponent
Linkw całej aplikacji, utrzymujesz spójne i świadome językowo doświadczenie użytkownika, jednocześnie korzystając z lepszego SEO i użyteczności.Optymalizacja rozmiaru paczki
OpcjonalnePodczas korzystania z
next-intlayer, słowniki są domyślnie dołączane do bundla na każdej stronie. Aby zoptymalizować rozmiar bundla, Intlayer udostępnia opcjonalny plugin SWC, który inteligentnie zastępuje wywołaniauseIntlayerza pomocą makr. Zapewnia to, że słowniki są dołączane tylko do bundli stron, które faktycznie ich używają.Aby włączyć tę optymalizację, zainstaluj pakiet
@intlayer/swc. Po instalacjinext-intlayerautomatycznie wykryje i użyje tego pluginu:bashKopiuj kodSkopiuj kod do schowka
Uwaga: Ta optymalizacja jest dostępna tylko dla Next.js 13 i nowszych wersji.
Uwaga: Ten pakiet nie jest instalowany domyślnie, ponieważ wtyczki SWC są nadal eksperymentalne w Next.js. Może się to zmienić w przyszłości.
Konfiguracja TypeScript
Intlayer używa rozszerzenia modułów (module augmentation), aby wykorzystać zalety TypeScript i wzmocnić Twoją bazę kodu.


Upewnij się, że Twoja konfiguracja TypeScript zawiera automatycznie generowane typy.
Skopiuj kod do schowka
Konfiguracja Git
Aby utrzymać porządek w repozytorium i uniknąć zatwierdzania generowanych plików, zaleca się ignorowanie plików tworzonych przez Intlayer.
Dodaj następujące linie do pliku .gitignore:
Skopiuj kod do schowka
Rozszerzenie VS Code
Aby poprawić doświadczenie programistyczne z Intlayer, możesz zainstalować oficjalne rozszerzenie Intlayer dla VS Code.
Zainstaluj z Marketplace VS Code
To rozszerzenie oferuje:
- Autouzupełnianie kluczy tłumaczeń.
- Wykrywanie błędów w czasie rzeczywistym dla brakujących tłumaczeń.
- Podglądy w linii przetłumaczonej zawartości.
- Szybkie akcje umożliwiające łatwe tworzenie i aktualizowanie tłumaczeń.
Aby uzyskać więcej informacji na temat korzystania z rozszerzenia, zapoznaj się z dokumentacją rozszerzenia Intlayer VS Code.
Dodatkowe zasoby
- Dokumentacja Intlayer: Repozytorium GitHub
- Przewodnik po słowniku: Słownik
- Dokumentacja konfiguracji: Przewodnik konfiguracji
Postępując zgodnie z tym przewodnikiem, możesz skutecznie zintegrować Intlayer z aplikacją Next.js korzystającą z Page Router, co umożliwi solidne i skalowalne wsparcie internacjonalizacji dla Twoich projektów internetowych.
Idź dalej
Aby pójść dalej, możesz zaimplementować edytor wizualny lub zewnętrznie zarządzać swoją zawartością, korzystając z CMS.
Często Zadawane Pytania
Pages Router nadal obsługuje wbudowane pole i18n w next.config.js, ale zarządza ono wyłącznie routingiem i wykrywaniem lokalizacji, nigdy samymi tłumaczeniami, więc i tak wybierasz warstwę zawartości:
next-i18next/i18nextoraznext-intl: przestrzenie nazw JSON ładowane per strona, tradycyjne połączenie z Pages Routerem.react-intlorazLingui: komunikaty ICU z osobnym krokiem ekstrakcji.Intlayer: najbardziej zaawansowane rozwiązanie. Treść deklarowana w dowolnym miejscu w bazie kodu (obok każdego komponentu lub scentralizowana) i kompilowana per-komponent, w pełni typowana, z wbudowanym tłumaczeniem AI, edytorem wizualnym i systemem CMS.
Zobacz dlaczego Intlayer oraz benchmark i18n Next.js.
Znacznie mniej niż konfiguracja oparta na przestrzeniach nazw, ponieważ strona nigdy nie pobiera katalogu, którego nie renderuje. Zawartość jest rozwiązywana podczas getStaticProps i getServerSideProps, a nie wysyłana w postaci całych katalogów, a kompilator czasu budowania zastępuje wywołania useIntlayer dokładnymi wpisami słownika, z których korzysta komponent. Dzięki temu nieużywane klucze i nieużywane języki są usuwane, a dynamiczne słowniki dzielą resztę per lokalizacja. W porównaniu ze standardowymi alternatywami, Intlayer redukuje rozmiar bundle'a i strony nawet o 50%. Zobacz optymalizacja bundle'a oraz benchmark.
Tak, i istnieją dwie ścieżki. Możesz migrować zawartość stopniowo, korzystając z przewodnika migracji z next-intl lub przewodnika migracji z i18next. Możesz także całkowicie zachować swoje obecne API: adaptery kompatybilności udostępniają dokładnie to samo API co next-intl, react-i18next i react-intl, ale obsługiwane przez słowniki Intlayer, dzięki czemu zmieniają się tylko importy, a kod komponentów pozostaje bez zmian.
Tak. Wtyczka sync JSON zachowuje 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 komponenty, 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: skanuje kod JSX, TSX, Vue i Svelte przy każdej zmianie, generuje słowniki i utrzymuje je w synchronizacji za pośrednictwem hot module replacement, dzięki czemu nie trzeba w ogóle ręcznie utrzymywać kluczy.
Warto pamiętać o dwóch ograniczeniach przed włączeniem kompilatora. Działa on w oparciu o analizę statyczną, więc ciągi tekstowe istniejące tylko w czasie wykonywania, takie jak kody błędów API czy pola z CMS, pozostają poza jego zasięgiem. Musi on także odróżnić tekst dla użytkownika od logiki aplikacji, takiej jak className="active" czy kody stanu, co w dużej bazie kodu wymaga kilku adnotacji. Polecenie extract unika obu tych problemów, pozostawiając Ci pełną kontrolę.
Pięć narzędzi, wszystkie opcjonalne:
- Rozszerzenie VS Code: przejście od klucza
useIntlayerdo 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-intliuse-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-cliiintlayer-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-textoznacza zakodowane na stałe ciągi tekstowe, z dodatkowymi regułami dla statycznych kluczy słownika i nieużywanej zawartości.
