Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Ta dokumentacja jest nieaktualna, wersja bazowa została zaktualizowana w 29 sierpnia 2026.
Przejdź do angielskiej wersji dokumentuHistoria wersji
- "Dostosowuje przewodnik do szablonu Elysia (typowanie kontekstu, konfiguracja Bun, skrypty)"v9.4.024.08.2026
- "init Elysia plugin"v9.4.023.08.2026
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
Tłumacz swoją stronę backendową Elysia przy użyciu Intlayer | Internationalization (i18n)
elysia-intlayer to potężny plugin internacjonalizacji (i18n) dla aplikacji Elysia, zaprojektowany aby uczynić Twoje usługi backendowe dostępnymi globalnie, poprzez dostarczanie zlokalizowanych odpowiedzi na podstawie preferencji klienta.
Przejrzyj implementację pakietu na GitHubie.
Praktyczne przypadki użycia
- Wyświetlanie błędów backendu w języku użytkownika: Gdy występuje błąd, wyświetlanie komunikatów w natywnym języku użytkownika poprawia zrozumienie i zmniejsza frustrację. Jest to szczególnie przydatne dla dynamicznych komunikatów błędów, które mogą być wyświetlane w komponentach front-end, takich jak toasty lub modale.
- Pobieranie zawartości wielojęzycznej: W przypadku aplikacji pobierających zawartość z bazy danych, internacjonalizacja zapewnia, że możesz serwować tę zawartość w wielu językach. Jest to kluczowe dla platform takich jak witryny e-commerce lub systemy zarządzania zawartością, które muszą wyświetlać opisy produktów, artykuły i inną zawartość w preferowanym przez użytkownika języku.
- Wysyłanie wielojęzycznych wiadomości e-mail: Niezależnie od tego, czy chodzi o wiadomości transakcyjne, kampanie marketingowe czy powiadomienia, wysyłanie wiadomości e-mail w języku odbiorcy może znacznie zwiększyć zaangażowanie i efektywność.
- Wielojęzyczne powiadomienia push: W przypadku aplikacji mobilnych wysyłanie powiadomień push w preferowanym przez użytkownika języku może zwiększyć interakcję i retencję. Ten osobisty dotyk może sprawić, że powiadomienia będą się wydawać bardziej trafne i funkcjonalne.
- Inne komunikacje: Każda forma komunikacji z backendu, taka jak wiadomości SMS, alerty systemowe lub aktualizacje interfejsu użytkownika, korzysta z tego, że jest w języku użytkownika, zapewniając przejrzystość i poprawiając ogólne doświadczenie użytkownika.
Poprzez internacjonalizację backendu Twoja aplikacja nie tylko szanuje różnice kulturowe, ale także lepiej dostosowuje się do globalnych potrzeb rynku, czyniąc to kluczowym krokiem w skalowaniu Twoich usług na całym świecie.
Rozpoczęcie pracy
Zobacz Application Template na GitHub.
Instalacja
Aby rozpocząć korzystanie z elysia-intlayer, zainstaluj pakiet za pomocą npm:
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
Elysia jest przeznaczony dla runtime Bun.elysia-intlayeropiera się naAsyncLocalStorage(zamiast na bibliotececls-hookedużywanej przez pluginy Intlayer oparte na Node) właśnie dlatego, że Bun nie implementujeasync_hooks.createHook.
Konfiguracja
Skonfiguruj ustawienia internacjonalizacji, tworząc intlayer.config.ts w katalogu głównym projektu:
Skopiuj kod do schowka
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
internationalization: {
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
/**
* Domyślny locale używany jako fallback, jeśli żądany locale nie zostanie znaleziony.
*/
defaultLocale: Locales.ENGLISH,
},
};
export default config;
Deklaruj Swoją Treść
Utwórz i zarządzaj deklaracjami treści, aby przechowywać tłumaczenia:
Skopiuj kod do schowka
import { t, type Dictionary } from "intlayer";
const indexContent = {
key: "index",
content: {
exampleOfContent: t({
pl: "Przykład zwróconej treści w języku polskim",
en: "Example of returned content in English",
fr: "Exemple de contenu renvoyé en français",
es: "Ejemplo de contenido devuelto en español",
}),
},
} satisfies Dictionary;
export default indexContent;
Deklaracje treści można definiować w dowolnym miejscu aplikacji, o ile znajdują się w katalogucontentDir(domyślnie./src) i odpowiadają rozszerzeniu pliku deklaracji treści (domyślnie.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
Aby uzyskać więcej informacji, zapoznaj się z dokumentacją deklaracji treści.
Konfiguracja aplikacji Elysia
Skonfiguruj swoją aplikację Elysia do użycia elysia-intlayer:
Skopiuj kod do schowka
import { Elysia } from "elysia";
import { intlayer } from "elysia-intlayer";
const app = new Elysia()
// Załaduj wtyczkę internacjonalizacji
.use(intlayer())
// Trasy
.get("/", ({ intlayer }) => ({
// Lokalizacja używana dla tego żądania, negocjowana z `Accept-Language` lub odczytana z magazynu
locale: intlayer!.locale,
greeting: intlayer!.t({
pl: "Cześć",
en: "Hello",
fr: "Bonjour",
es: "Hola",
}),
content: intlayer!.getIntlayer("index").exampleOfContent,
}))
.listen(3000);
console.log(
`🦊 Elysia is running at ${app.server?.hostname}:${app.server?.port}`
);
Plugin rejestruje swój kontekst poprzez globalnyderive, który Elysia typuje jakoPartial<{ intlayer: IntlayerContext }>. W czasie działania wartość jest zawsze obecna dla tras zarejestrowanych po.use(intlayer()), dlatego użyj non-null assertion (intlayer!.locale) — lub optional chaining — aby zadowolić TypeScript w trybiestrict.
Kontekst trasy udostępnia:
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Właściwość | Opis |
|---|---|
locale | Locale używane dla tego żądania, przy czym locale_storage ma pierwszeństwo przed locale_detected. |
locale_storage | Locale zażądane jawnie przez klienta poprzez cookie lub header. |
locale_detected | Locale wynegocjowane z nagłówków żądania. |
defaultLocale | Locale skonfigurowane jako fallback w intlayer.config.ts. |
t | Funkcja tłumaczenia. |
getIntlayer | Funkcja pobierająca słowniki po kluczu. |
getDictionary | Funkcja przetwarzająca obiekty słowników. |
Te same helpery są też eksportowane samodzielnie. Rozwiązują bieżące żądanie przez AsyncLocalStorage, więc możesz je wywołać bez destrukturyzacji kontekstu:
Skopiuj kod do schowka
import { Elysia } from "elysia";
import { intlayer, t, getDictionary, getIntlayer } from "elysia-intlayer";
import dictionaryExample from "./index.content";
const app = new Elysia()
.use(intlayer())
.get("/t_example", () =>
t({
pl: "Przykład zwróconej treści w języku polskim",
en: "Example of returned content in English",
fr: "Exemple de contenu renvoyé en français",
es: "Ejemplo de contenido devuelto en español",
})
)
.get("/getIntlayer_example", () => getIntlayer("index").exampleOfContent)
.get(
"/getDictionary_example",
() => getDictionary(dictionaryExample).exampleOfContent
)
.listen(3000);
Kontekst żądania jest zwalniany po zmapowaniu odpowiedzi, więc samodzielne helpery nigdy nie rozwiązują się względem już zakończonego żądania. Wywołane poza żądaniem obsługiwanym przez wtyczkę, wracają do skonfigurowanego domyślnego locale.
Uruchom swoją aplikację
Dodaj skrypty Intlayer do swojego package.json. intlayer build kompiluje deklaracje treści do katalogu .intlayer i generuje typy TypeScript:
Skopiuj kod do schowka
Następnie uruchom serwer:
Skopiuj kod do schowka
Przetestuj negocjację locale za pomocą Accept-Language:
Skopiuj kod do schowka
intlayer buildnie jest bezwzględnie wymagany przedbun run src/index.ts: plugin przygotowuje słowniki również przy starcie aplikacji Elysia. Uruchomienie go wcześniej utrzymuje wygenerowane typy w synchronizacji dla Twojego edytora i eliminuje koszt builda przy pierwszym żądaniu.
Kompatybilność
elysia-intlayer jest w pełni kompatybilny z:
react-intlayerdla aplikacji Reactnext-intlayerdla aplikacji Next.jsvite-intlayerdla aplikacji Vite
Działa również bezproblemowo z dowolnym rozwiązaniem internationalization w różnych środowiskach, w tym w przeglądarkach i żądaniach API.
Domyślnie plugin rozwiązuje locale w następującej kolejności:
- Cookie
INTLAYER_LOCALE. - Nagłówek
x-intlayer-locale. - Negocjacja nagłówka
Accept-Language.
Możesz dostosować cookie i nagłówek używane do wykrywania locale:
Skopiuj kod do schowka
import { Locales, type IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
// ... Pozostałe opcje konfiguracji
routing: {
storage: [
{ type: "header", name: "my-locale-header" },
{ type: "cookie", name: "my-locale-cookie" },
],
},
};
export default config;
Aby uzyskać więcej informacji na temat konfiguracji i zaawansowanych zagadnień, odwiedź naszą dokumentację.
Konfiguracja TypeScript
elysia-intlayer wykorzystuje solidne możliwości TypeScript w celu usprawnienia procesu internacjonalizacji. Statyczne typowanie TypeScript zapewnia, że każdy klucz tłumaczenia jest uwzględniony, co zmniejsza ryzyko brakujących tłumaczeń i poprawia łatwość konserwacji.
Upewnij się, że autogenerowane typy (domyślnie w ./types/intlayer.d.ts) są zawarte w pliku tsconfig.json.
Skopiuj kod do schowka
Rozszerzenie VS Code
Aby ulepszyć doświadczenie programistyczne w Intlayer, możesz zainstalować oficjalne Rozszerzenie Intlayer VS Code.
Zainstaluj z VS Code Marketplace
To rozszerzenie zapewnia:
- Autocompletion 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.
Konfiguracja Git
Zalecane jest ignorowanie plików generowanych 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
Często Zadawane Pytania
Klasyczną opcją jest i18next z middleware HTTP, który ładuje katalogi JSON dla przestrzeni nazw i przechowuje lokalizację w żądaniu. Alternatywą jest Intlayer poprzez elysia-intlayer, który deklaruje treść w typowanych plikach współdzielonych z frontendem, określa lokalizację na poziomie żądania oraz dodaje tłumaczenia AI i CMS.
Powodem, dla którego warto w ogóle internacjonalizować backend, jest to, że duża część tekstu czytanego przez użytkownika nigdy nie przechodzi przez frontend: komunikaty błędów API, wiadomości e-mail transakcyjne, powiadomienia push, wiadomości SMS i eksporty do formatu PDF. Wymagają one języka odbiorcy, ustalanego dla każdego żądania, a nie na poziomie sesji.
Powodem internacjonalizacji backendu jest fakt, że duża część tekstu czytanego przez użytkownika nigdy nie przechodzi przez frontend: komunikaty błędów API, transakcyjne e-maile, powiadomienia push, SMS-y i eksporty PDF. Wymagają one języka odbiorcy, rozwiązywanego per żądanie, a nie per sesja. Zobacz dlaczego Intlayer.
W bardzo niewielkim stopniu. Słowniki są kompilowane z wyprzedzeniem i uwzględniane są tylko zadeklarowane języki, więc nie ma ładowania katalogów przy starcie ani odczytów plików na ścieżce żądania. Ma to największe znaczenie we wdrożeniach serverless i edge, gdzie rozmiar pakietu wpływa na czas zimnego startu (cold start). Zobacz optymalizację bundle'a.
Tak, i są dwie drogi. Możesz migrować treść stopniowo za pomocą przewodnika migracji z i18next. Możesz także zachować obecne API: adaptery kompatybilności udostępniają dokładnie to samo API co i18next, ale zasilane słownikami Intlayer, więc zmieniają się importy, a kod handlerów pozostaje bez zmian.
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 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.
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.
