Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Historia wersji
- "Porównanie statycznego, dynamicznego i buforowanego dynamicznego rozwiązywania słowników metadanych w funkcjach head tras"v9.4.025.08.2026
- "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
- "Wprowadzenie validatePrefix oraz dodanie kroku 14: Obsługa stron 404 z lokalizowanymi trasami."v7.4.011.12.2025
- "Dodany krok 13: Pobieranie lokalizacji w akcjach serwerowych (Opcjonalnie)"v7.3.95.12.2025
- "Dodaj krok 13: Adaptacja Nitro"v7.2.318.11.2025
- "Naprawienie domyślnego prefiksu poprzez dodanie funkcji getPrefix useLocalizedNavigate, LocaleSwitcher i LocalizedLink."v7.1.017.11.2025
- "Aktualizacja dokumentacji"v6.5.23.10.2025
- "Dodano dla Tanstack Start"v5.8.19.09.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ę Tanstack Start za pomocą Intlayer | Internacjonalizacja (i18n)
Spis treści
Ten przewodnik pokazuje, jak zintegrować Intlayer dla płynnej internacjonalizacji w projektach Tanstack Start z routingiem uwzględniającym lokalizację, wsparciem TypeScript oraz nowoczesnymi praktykami programistycznymi.
Dlaczego Interlayer zamiast alternatyw?
W porównaniu do głównych rozwiązań, takich jak „react-i18next”, „use-intl” lub „paraglide”, Intlayer jest rozwiązaniem wyposażonym w zintegrowane optymalizacje, takie jak:
Pełne pokrycie TanStack Start
Intlayer jest w pełni zoptymalizowany pod kątem TanStack Start, zapewniając wielojęzyczny routing, zarządzanie plikami cookie, generowanie mapy witryny, dynamiczne ładowanie treści i wszystkie funkcje potrzebne do skalowania wysiłków związanych z internacjonalizacją (i18n).
</Accordion>
Rozmiar bundle'a
Zamiast ładować ogromne pliki JSON na swoje strony, ładuj tylko niezbędną treść. Intlayer pomaga zmniejszyć rozmiary bundle'a i stron nawet o 50%.
</Accordion>
Łatwość konserwacji
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.
Agent AI
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.
Automatyzacja
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.
Wydajność
Łą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.
Skalowanie bez użycia dewelopera
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.
</Accordion>
Przewodnik krok po kroku, jak skonfigurować Intlayer w aplikacji Tanstack Start
Zobacz Szablon aplikacji na GitHub.
Utwórz projekt
Rozpocznij od utworzenia nowego projektu TanStack Start, postępując zgodnie z przewodnikiem Start new project na stronie TanStack Start.
Zainstaluj pakiety Intlayer
Zainstaluj niezbędne pakiety, używając preferowanego menedżera pakietów:
Skopiuj 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:
Skopiuj kod do schowka
intlayer
Podstawowy pakiet, który dostarcza narzędzia do internacjonalizacji dla zarządzania konfiguracją, tłumaczeń, deklaracji treści, transpiliacji oraz poleceń CLI.
react-intlayer Pakiet integrujący Intlayer z aplikacją React. Zapewnia dostawców kontekstu oraz hooki do internacjonalizacji w React.
vite-intlayer Zawiera wtyczkę Vite do integracji Intlayer z bundlerem Vite, a także middleware do wykrywania preferowanego języka użytkownika, zarządzania ciasteczkami oraz obsługi przekierowań URL.
Konfiguracja projektu
Utwórz plik konfiguracyjny, aby skonfigurować języki swojej aplikacji:
Skopiuj kod do schowka
Za pomocą tego pliku konfiguracyjnego możesz ustawić lokalizowane adresy URL, przekierowania w 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.
Integracja Intlayer w konfiguracji Vite
Dodaj wtyczkę intlayer do swojej konfiguracji:
Skopiuj kod do schowka
Wtyczka intlayer() dla Vite służy do integracji Intlayer z Vite. Zapewnia budowanie plików deklaracji treści oraz monitorowanie ich w trybie deweloperskim. Definiuje zmienne środowiskowe Intlayer w aplikacji Vite. Dodatkowo dostarcza aliasy optymalizujące wydajność.
Utwórz układ główny
Skonfiguruj swój główny układ, aby wspierać internacjonalizację, używając useParams do wykrywania aktualnej lokalizacji i ustawiając atrybuty lang i dir w tagu html.
Skopiuj kod do schowka
Utwórz układ lokalizacji
Utwórz układ, który obsługuje prefiks lokalizacji i wykonuje walidację.
Skopiuj kod do schowka
Tutaj{-$locale}jest dynamicznym parametrem trasy, który zostaje zastąpiony aktualną lokalizacją. Ta notacja sprawia, że slot jest opcjonalny, co pozwala na współpracę z trybami routingu takimi jak'prefix-no-default'itp.
Pamiętaj, że ten slot może powodować problemy, jeśli używasz wielu dynamicznych segmentów w tej samej trasie (np.
/{-$locale}/other-path/$anotherDynamicPath/...). W trybie'prefix-all'możesz woleć zmienić slot na$locale. W trybach'no-prefix'lub'search-params'możesz całkowicie usunąć ten slot.
Zadeklaruj swoją treść
Twórz i zarządzaj deklaracjami treści, aby przechowywać tłumaczenia:
Skopiuj kod do schowka
Twoje deklaracje zawartości mogą być definiowane w dowolnym miejscu w Twojej aplikacji, pod warunkiem, że zostaną umieszczone w katalogucontentDir(domyślnie./app). I będą miały rozszerzenie pliku deklaracji zawartości (domyślnie.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
Po więcej szczegółów odsyłamy do dokumentacji deklaracji zawartości.
Tworzenie komponentów i hooków uwzględniających lokalizację
Utwórz komponent LocalizedLink do nawigacji uwzględniającej lokalizację:
Skopiuj kod do schowka
Ten komponent ma dwa cele:
- Usunięcie niepotrzebnego prefiksu
{-$locale}z URL. - Wstrzyknięcie parametru locale do URL, aby zapewnić użytkownikowi bezpośrednie przekierowanie do zlokalizowanej ścieżki.
Następnie możemy stworzyć hook useLocalizedNavigate do nawigacji programowej:
Skopiuj kod do schowka
Wykorzystaj Intlayer na swoich stronach
Domyślnie używajuseIntlayer: to zalecany sposób odczytu treści wewnątrz komponentów, a kompilator rozwiązuje go do renderowanej lokalizacji. PogetIntlayer/getIntlayerAsyncsięgaj tylko poza drzewem React: wheadtras, loaderach i funkcjach serwerowych.
Uzyskaj dostęp do swoich słowników treści w całej aplikacji:
Strona główna zlokalizowana
Skopiuj kod do schowka
Jeśli chcesz użyć zawartości w atrybucie
string, takim jakalt,title,href,aria-labelitd., możesz użyć wartości funkcji, na przykład:htmlKopiuj kodSkopiuj kod do schowka
Aby dowiedzieć się więcej o hook'u useIntlayer, zapoznaj się z dokumentacją.
Utwórz komponent przełącznika języków
Utwórz komponent umożliwiający użytkownikom zmianę języka:
Skopiuj kod do schowka
Aby dowiedzieć się więcej o hook'u useLocale, zapoznaj się z dokumentacją.
Zarządzanie atrybutami HTML
Jak pokazano w kroku 5, możesz zarządzać atrybutami lang i dir tagu html za pomocą useParams w komponencie głównym. Zapewnia to, że prawidłowe atrybuty są ustawione na serwerze i kliencie.
Skopiuj kod do schowka
Dodaj middleware
Możesz także użyć intlayerProxy do dodania routingu po stronie serwera do aplikacji. Plugin ten automatycznie wykryje bieżący język na podstawie URL i ustawi odpowiedni plik cookie języka. Jeśli nie zostanie określony żaden język, plugin określi najbardziej odpowiedni język na podstawie preferencji języka przeglądarki użytkownika. Jeśli nie zostanie wykryty żaden język, nastąpi przekierowanie do języka domyślnego.
Uwaga: aby użyćintlayerProxyw środowisku produkcyjnym, musisz przenieść pakietvite-intlayerzdevDependenciesdodependencies.
Od Intlayer v9,intlayerProxy()jest bezpośrednio dołączony do pluginuintlayer()i domyślnie włączony za pośrednictwem opcjirouting.enableProxy(truedomyślnie). Rejestrowanie go osobno, jak pokazano poniżej, jest teraz opcjonalne: jest zachowywane dla kompatybilności wstecznej i dla ustawień, które muszą kontrolować kolejność pluginów. Ustawrouting.enableProxy: false, aby zrezygnować. Zapoznaj się z notatkami do wydania v9.
Skopiuj kod do schowka
Internationalizuj swoje metadane
getIntlayer rozwiązuje się synchronicznie względem scalonego słownika, tego zawierającego każdy zadeklarowany język. head pozostaje synchroniczny i nic nie jest oczekiwane, ale cały wielojęzyczny słownik jest pobierany do fragmentu trasy wysyłanego do przeglądarki.
Skopiuj kod do schowka
Najlepsze dla małych słowników metadanych, kilku locale'i lub podczas prototypowania.
getIntlayerAsync (dostępne od v9.4) zachowuje się jak getIntlayer, ale plugin budowania wskazuje go na fragment dla konkretnego locale'a w .intlayer/dynamic_dictionaries/ zamiast scalonego słownika. Strona zatem wysyła tylko locale, który renderuje. Ponieważ fragment jest ładowany na żądanie, head staje się async:
Skopiuj kod do schowka
Jeśliheadodczytuje kilka słowników, rozwiąż je za pomocąPromise.all: oczekiwanie każdegogetIntlayerAsyncw oddzielnej linii łańcuchuje żądania zamiast uruchamiać je równolegle.
Kompromis: import dynamiczny jest rozwiązywany podczas uruchamiania head, na krytycznej ścieżce renderowania dokumentu. Na zimnej trasie opóźnia to head o kilka milisekund i może nieco pogorszyć LCP.
Rozwiąż słownik w loader trasy i przeczytaj go z powrotem z loaderData w head. Loadery dopasowanych tras działają równolegle, a staleTime: Infinity mówi TanStack Router, że wynik nigdy się nie starzeje, więc fragment dla konkretnego locale'a jest rozwiązywany raz i podawany z cache'a routera później, pozostawiając head synchroniczny.
Skopiuj kod do schowka
headmoże być wywoływany przed osadzeniem loadera, więcloaderDatajest wpisywana jako możliwieundefined. Zachowaj opcjonalne łańcuchowanie lub zwróć tytuł fallback.
Zachowujesz fragment dla konkretnego locale'a bez płacenia jego kosztu na krytycznej ścieżce head. Cena to doświadczenie deweloperskie: zawartość musi być jawnie przekazywana z loadera do head poprzez loaderData.
Którą rozdzielczość powinienem wybrać?
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Rozdzielczość statyczna | Rozdzielczość dynamiczna | Rozdzielczość dynamiczna z cache'em | |
|---|---|---|---|
| API | getIntlayer | getIntlayerAsync (v9.4+) | getIntlayerAsync w loader (v9.4+) |
Sygnatura head | synchroniczna | async | synchroniczna, czyta loaderData |
| Ustawienia regionalne | każdy zadeklarowany locale | tylko żądany locale | tylko żądany locale |
| Nawigacja na kliencie | nic do rozwiązania | ponownie wznawiane przy każdym dopasowaniu | obsługiwane z cache'u routera |
| Doświadczenie dewelopera | najprostsze | jedno await | zawartość przesłana przez loaderData |
Pobierz locale w swoich server actions
Możesz chcieć uzyskać dostęp do bieżącego locale'a z wnętrza twoich server actions lub API endpoints.
Możesz to zrobić używając helpera getLocale z intlayer.
Oto przykład używający server functions TanStack Start:
Skopiuj kod do schowka
Zarządzaj stronami not found
Gdy użytkownik odwiedzi nieistniejącą stronę, możesz wyświetlić niestandardową stronę not found, a prefiks locale'a może wpłynąć na sposób, w jaki strona not found jest wyzwalana.
Lokalizowana strona główna
Jeśli chcesz użyć swojej zawartości w atrybucie
string, takim jakalt,title,href,aria-label, itp., możesz użyć wartości funkcji, na przykład:htmlKopiuj kodSkopiuj kod do schowka
Aby dowiedzieć się więcej o hooku useIntlayer, zapoznaj się z dokumentacją.
Skopiuj kod do schowka
Aby dowiedzieć się więcej o hooku useLocale, zapoznaj się z dokumentacją.
</Step>
Zarządzanie atrybutami HTML
return ( {/* ... _/} ); } {/_ ... */} </html> ); }
export const Route = createFileRoute("/{-$locale}/")({ component: RouteComponent, head: async ({ params }) => { const { locale = defaultLocale } = params; const path = "/"; // The path for this route
Skopiuj kod do schowka
Skopiuj kod do schowka
Zarządzanie stronami "nie znaleziono"
Gdy użytkownik odwiedza nieistniejącą stronę, możesz wyświetlić niestandardową stronę "nie znaleziono", a prefiks lokalizacji może wpływać na sposób wyzwalania strony "nie znaleziono".
Zrozumienie obsługi 404 w TanStack Router z prefiksami lokalizacji
W TanStack Router obsługa stron 404 z zlokalizowanymi trasami wymaga podejścia wielowarstwowego:
- Dedykowana trasa 404: Konkretna trasa do wyświetlenia interfejsu 404
- Walidacja na poziomie trasy: Weryfikuje prefiksy lokalizacji i przekierowuje nieprawidłowe do 404
- Trasa catch-all: Przechwytuje wszystkie niedopasowane ścieżki w segmencie lokalizacji
Skopiuj kod do schowka
Skopiuj kod do schowka
Skopiuj kod do schowka
Wyodrębnij zawartość swoich komponentów
OpcjonalneJeśli masz istniejącą bazę kodu, transformacja tysięcy plików może być czasochłonna.
Aby ułatwić ten proces, Intlayer proponuje kompilator / ekstraktor, aby przetransformować komponenty i wyodrębnić zawartość.
Aby go skonfigurować, możesz dodać sekcję compiler w pliku intlayer.config.ts:
Skopiuj kod do schowka
import { type IntlayerConfig } from "intlayer";
/**
* Definiuje ścieżkę plików wyjściowych
*/
output: ({ fileName, extension }) => `./${fileName}${extension}`,
/**
* Prefiks klucza słownika
*/
dictionaryKeyPrefix: "",
},
};
export default config;
Uruchom ekstraktor, aby przetransformować komponenty i wyodrębnić zawartość
Skopiuj kod do schowka
bun x intlayer extract import { defineConfig } from "vite"; import { intlayer, intlayerCompiler } from "vite-intlayer";
export default defineConfig({ plugins: [
Skopiuj kod do schowka
], });
Skopiuj kod do schowka
bash packageManager="npm" npm run build # Lub npm run dev
Skopiuj kod do schowka
bash packageManager="pnpm" pnpm run build # Or pnpm run dev
Skopiuj kod do schowka
bash packageManager="yarn" yarn build # Or yarn dev
Skopiuj kod do schowka
bash packageManager="bun"
bun run build # Or bun run dev import { localeFlatMap } from "intlayer"; // ... inne importy
export const pathList = ["", "/about", "/404"];
const localizedPages = localeFlatMap(({ urlPrefix }) => pathList.map((path) => ({
Skopiuj kod do schowka
})) );
export default defineConfig({ plugins: [
Skopiuj kod do schowka
], });
Skopiuj kod do schowka
`typescript fileName="src/routes/sitemap[.]xml.ts"
export const Route = createFileRoute("/sitemap.xml")({ server: {
Skopiuj kod do schowka
}, }); { // ... twoje istniejące konfiguracje include: [
Skopiuj kod do schowka
], }
Konfiguracja Git
Zaleca się ignorować pliki generowane przez Intlayer. Pozwala to uniknąć zatwierdzania ich w repozytorium Git.
Aby to zrobić, możesz dodać następujące instrukcje do pliku .gitignore:
Skopiuj kod do schowka
`
Rozszerzenie VS Code
Aby ulepszyć doświadczenie programistyczne dzięki Intlayer, możesz zainstalować oficjalne rozszerzenie Intlayer dla VS Code.
Zainstaluj z VS Code Marketplace
To rozszerzenie zapewnia:
- Autouzupełnianie dla kluczy tłumaczeń.
- Wykrywanie błędów w czasie rzeczywistym dla brakujących tłumaczeń.
- Podglądy inline przetłumaczonej zawartości.
- Szybkie akcje do łatwego tworzenia i aktualizacji tłumaczeń.
Aby uzyskać więcej szczegółów na temat korzystania z rozszerzenia, zapoznaj się z dokumentacją rozszerzenia Intlayer VS Code Extension.
Idź dalej
Aby pójść dalej, możesz wdrożyć edytor wizualny lub externalizować swoją zawartość przy użyciu CMS.
