Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Historia wersji
- "Wydanie Kompilatora"v7.3.127.11.2025
- "Aktualizacja tabeli porównawczej"v5.8.019.08.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
Dlaczego warto rozważyć Intlayer?
Czym jest Intlayer?
Intlayer to biblioteka do internacjonalizacji zaprojektowana specjalnie dla programistów JavaScript. Pozwala ona na deklarowanie treści w dowolnym miejscu w kodzie. Przekształca deklaracje treści wielojęzycznych w strukturalne słowniki, które można łatwo zintegrować z kodem. Dzięki zastosowaniu TypeScript, Intlayer sprawia, że proces programowania staje się bardziej solidny i wydajny.
Dlaczego powstał Intlayer?
Intlayer powstał, aby rozwiązać powszechny problem dotyczący wszystkich popularnych bibliotek i18n, takich jak next-intl, react-i18next, react-intl, next-i18next, react-intl czy vue-i18n.
Wszystkie te rozwiązania stosują scentralizowane podejście do listowania i zarządzania treścią. Na przykład:
Skopiuj kod do schowka
.├── locales│ ├── en.json│ ├── es.json│ └── fr.json├── i18n.ts└── src └── components └── MyComponent └── index.tsxLub przy użyciu przestrzeni nazw:
Skopiuj kod do schowka
.├── locales│ ├── en│ │ ├── footer.json│ │ └── navbar.json│ ├── fr│ │ ├── footer.json│ │ └── navbar.json│ └── es│ ├── footer.json│ └── navbar.json├── i18n.ts└── src └── components └── MyComponent └── index.tsxTego typu architektura spowalnia proces programowania i komplikuje utrzymanie kodu z kilku powodów:
Dla każdego nowego komponentu należy:
- Utworzyć nowy zasób/przestrzeń nazw w folderze
locales - Pamiętać o zaimportowaniu nowej przestrzeni nazw na stronie
- Przetłumaczyć treść (często robione ręcznie poprzez kopiowanie/wklejanie z narzędzi AI)
- Utworzyć nowy zasób/przestrzeń nazw w folderze
Dla każdej zmiany w komponentach należy:
- Wyszukać powiązany zasób/przestrzeń nazw (z dala od komponentu)
- Przetłumaczyć treść
- Upewnić się, że treść jest aktualna dla wszystkich języków
- 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 używa się platform lokalizacyjnych do zarządzania tłumaczeniami. Jednak w przypadku dużych projektów może to szybko stać się kosztowne.
Aby rozwiązać ten problem, Intlayer stosuje podejście polegające na ograniczeniu zakresu treści do każdego komponentu i przechowywaniu jej blisko niego, podobnie jak robimy to z CSS (styled-components), typami, dokumentacją (storybook) czy testami jednostkowymi (jest).
Skopiuj kod do schowka
.└── components └── MyComponent ├── index.content.ts ├── index.test.tsx ├── index.stories.tsx └── index.tsxSkopiuj kod do schowka
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;Skopiuj kod do schowka
import { useIntlayer } from "react-intlayer";
export const ComponentExample = () => {
const { myTranslatedContent } = useIntlayer("component-example");
return <span>{myTranslatedContent}</span>;
};Takie podejście pozwala na:
Zwiększenie prędkości programowania
- Pliki
.content.{{ts|mjs|cjs|json}}można tworzyć za pomocą rozszerzenia VSCode - Narzędzia AI do autouzupełniania w IDE (np. GitHub Copilot) mogą pomagać w deklarowaniu treści, ograniczając kopiowanie/wklejanie
- Pliki
Uporządkowanie kodu
- Zmniejszenie złożoności
- Zwiększenie łatwości utrzymania
Łatwiejsze duplikowanie komponentów wraz z ich treścią (np. komponenty logowania/rejestracji itp.)
- Poprzez ograniczenie ryzyka wpływu na treść innych komponentów
- Poprzez kopiowanie/wklejanie treści z jednej aplikacji do drugiej bez zewnętrznych zależności
Unikanie zaśmiecania 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 będzie pamiętać o usunięciu powiązanej z nim treści, ponieważ znajduje się ona w tym samym folderze
Zmniejszenie kosztów rozumowania dla agentów AI przy deklarowaniu treści wielojęzycznych
- Agent AI nie będzie musiał skanować całego kodu, aby wiedzieć, gdzie zaimplementować treść
- Tłumaczenia można łatwo wykonać za pomocą narzędzi AI do autouzupełniania w IDE (np. GitHub Copilot)
Optymalizację wydajności ładowania
- Jeśli komponent jest ładowany leniwie (lazy-loaded), powiązana z nim treść zostanie załadowana w tym samym czasie
Dodatkowe funkcje Intlayer
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Funkcja | Opis |
|---|---|
| Obsł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. |
| Zarządzanie treścią oparte na JavaScript Wykorzystaj elastyczność JavaScript do wydajnego definiowania i zarządzania treścią. - Deklarowanie treści |
| Kompilator Kompilator Intlayer automatycznie wyodrębnia treść z komponentów i generuje pliki słowników. - Kompilator |
| Plik deklaracji treści dla każdego języka Przyspiesz programowanie, deklarując treść raz przed automatycznym generowaniem. - Plik deklaracji treści dla każdego języka |
| Środowisko bezpieczne pod względem typów (Type-Safe) Wykorzystaj TypeScript, aby upewnić się, że definicje treści i kod są wolne od błędów, korzystając jednocześnie z autouzupełniania w IDE. - Konfiguracja TypeScript |
| Uproszczona konfiguracja Szybko rozpocznij pracę dzięki minimalnej konfiguracji. Łatwo dostosuj ustawienia internacjonalizacji, routingu, AI, budowania i obsługi treści. - Poznaj integrację z Next.js |
| Uproszczone pobieranie treści Nie ma potrzeby wywoływania funkcji t dla każdego elementu treści. Pobieraj całą treść bezpośrednio za pomocą jednego hooka.- Integracja z React |
| Spójna implementacja Server Components Idealnie dopasowana do Next.js Server Components, używaj tej samej implementacji dla komponentów klienckich i serwerowych, bez konieczności przekazywania funkcji t przez każdy komponent serwerowy. - Server Components |
| Uporządkowany kod Utrzymuj kod w większym porządku: 1 komponent = 1 słownik w tym samym folderze. Tłumaczenia znajdujące się blisko swoich komponentów poprawiają łatwość utrzymania i przejrzystość. - Jak działa Intlayer |
| Ulepszony routing Pełne wsparcie dla routingu aplikacji, płynnie dostosowujące się do złożonych struktur aplikacji w Next.js, React, Vite, Vue.js itd. - Poznaj integrację z Next.js |
| Obsługa Markdown Importuj i interpretuj pliki lokalne oraz zdalne pliki Markdown dla treści wielojęzycznych, takich jak polityki prywatności, dokumentacja itp. Interpretuj i udostępniaj metadane Markdown w kodzie. - Pliki treści |
| Darmowy edytor wizualny i CMS Dla autorów treści dostępny jest darmowy edytor wizualny i CMS, eliminujący potrzebę korzystania z platform lokalizacyjnych. Synchronizuj treść za pomocą Git lub całkowicie lub częściowo wyprowadź ją na zewnątrz dzięki CMS. - Edytor Intlayer - Intlayer CMS |
| Treść typu Tree-shakable Treść typu tree-shakable, zmniejszająca rozmiar końcowego pakietu. Ładuje treść na poziomie komponentu, wykluczając wszelkie nieużywane treści z pakietu. Obsługuje leniwe ładowanie dla zwiększenia wydajności ładowania aplikacji. - Optymalizacja budowania aplikacji |
| Renderowanie statyczne Nie blokuje renderowania statycznego. - Integracja z Next.js |
| Tłumaczenie wspomagane przez AI Przetłumacz swoją stronę na 231 języków jednym kliknięciem, korzystając z zaawansowanych narzędzi tłumaczeniowych AI Intlayer z własnym dostawcą AI/kluczem API. - Integracja CI/CD - Intlayer CLI - Auto-fill |
| Integracja z Serwerem MCP Zapewnia serwer MCP (Model Context Protocol) do automatyzacji IDE, umożliwiając płynne zarządzanie treścią i przepływy pracy i18n bezpośrednio w środowisku programistycznym. - Serwer MCP |
| Rozszerzenie VSCode Intlayer zapewnia rozszerzenie VSCode, które pomaga zarządzać treścią i tłumaczeniami, budować słowniki, tłumaczyć treści i nie tylko. - Rozszerzenie VSCode |
| Interoperacyjność 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 |
| Testowanie brakujących tłumaczeń (CLI/CI) | ✅ CLI: npx intlayer content test (audyt przyjazny dla CI) |
Porównanie Intlayer z innymi rozwiązaniami
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Cecha | intlayer | react-i18next | react-intl (FormatJS) | lingui | next-intl | next-i18next | vue-i18n |
|---|---|---|---|---|---|---|---|
| Tłumaczenia blisko komponentów | ✅ Tak, treść znajduje się przy każdym komponencie | ❌ Nie | ❌ Nie | ❌ Nie | ❌ Nie | ❌ Nie | ✅ Tak – przy użyciu Single File Components (SFCs) |
| Integracja z TypeScript | ✅ Zaawansowana, automatycznie generowane ścisłe typy | ⚠️ Podstawowa; wymaga dodatkowej konfiguracji dla pełnego bezpieczeństwa | ✅ Dobra, ale mniej ścisła | ⚠️ Typowanie wymaga konfiguracji | ✅ Dobra | ⚠️ Podstawowa | ✅ Dobra (typy dostępne; bezpieczeństwo kluczy wymaga konfiguracji) |
| Wykrywanie brakujących tłumaczeń | ✅ Podświetlanie błędów TypeScript oraz błędy/ostrzeżenia w czasie budowania | ⚠️ Głównie ciągi zapasowe (fallback) w czasie wykonywania | ⚠️ Ciągi zapasowe | ⚠️ Wymaga dodatkowej konfiguracji | ⚠️ Fallback w czasie wykonywania | ⚠️ Fallback w czasie wykonywania | ⚠️ Fallback/ostrzeżenia w czasie wykonywania (konfigurowalne) |
| Bogata treść (JSX/Markdown/komponenty) | ✅ Bezpośrednie wsparcie | ⚠️ Ograniczone / tylko interpolacja | ⚠️ Składnia ICU, brak prawdziwego JSX | ⚠️ Ograniczone | ❌ Nie zaprojektowane dla bogatych struktur | ⚠️ Ograniczone | ⚠️ Ograniczone (komponenty przez <i18n-t>, Markdown przez pluginy) |
| Tłumaczenie wspomagane przez AI | ✅ Tak, obsługuje wielu dostawców AI. Można używać z własnymi kluczami 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ść wyprowadzenia treści kodu na zewnątrz; możliwość osadzenia | ❌ Nie / dostępne przez zewnętrzne platformy lokalizacyjne | ❌ Nie / dostępne przez zewnętrzne platformy lokalizacyjne | ❌ Nie / dostępne przez zewnętrzne platformy lokalizacyjne | ❌ Nie / dostępne przez zewnętrzne platformy lokalizacyjne | ❌ Nie / dostępne przez zewnętrzne platformy lokalizacyjne | ❌ Nie / dostępne przez zewnętrzne platformy lokalizacyjne |
| Zlokalizowany routing | ✅ Tak, wsparcie dla zlokalizowanych ścieżek "z pudełka" (działa z Next.js i Vite) | ⚠️ Brak wbudowanego, wymaga pluginów (np. next-i18next) lub własnej konfiguracji routera | ❌ Nie, tylko formatowanie wiadomości, routing musi być ręczny | ⚠️ Brak wbudowanego, wymaga pluginów lub ręcznej konfiguracji | ✅ Wbudowany, App Router obsługuje segment [locale] | ✅ Wbudowany | ✅ Wbudowany |
| Dynamiczne generowanie ścieżek | ✅ Tak | ⚠️ Plugin/ekosystem lub ręczna konfiguracja | ❌ Brak | ⚠️ Plugin/ręcznie | ✅ Tak | ✅ Tak | ❌ Brak (zapewniane przez Nuxt i18n) |
| Liczba mnoga | ✅ Wzorce oparte na wyliczeniach (enums) | ✅ Konfigurowalne (pluginy takie jak i18next-icu) | ✅ (ICU) | ✅ (ICU/messageformat) | ✅ Dobra | ✅ Dobra | ✅ Wbudowane reguły liczby mnogiej |
| Formatowanie (daty, liczby, waluty) | ✅ Zoptymalizowane formatery (Intl pod spodem) | ⚠️ Przez pluginy lub własne użycie Intl | ✅ Formatery ICU | ✅ Helpery ICU/CLI | ✅ Dobra (helpery Intl) | ✅ Dobra (helpery Intl) | ✅ Wbudowane formatery dat/liczb (Intl) |
| Format treści | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml w trakcie prac) | ⚠️ .json | ✅ .json, .js | ⚠️ .po, .json | ✅ .json, .js, .ts | ⚠️ .json | ✅ .json, .js |
| Wsparcie ICU | ⚠️ W trakcie prac | ⚠️ Przez plugin (i18next-icu) | ✅ Tak | ✅ Tak | ✅ Tak | ⚠️ Przez plugin (i18next-icu) | ⚠️ Przez własny formater/kompilator |
| Helpery SEO (hreflang, sitemap) | ✅ Wbudowane narzędzia: helpery do sitemap, robots.txt, metadanych | ⚠️ Pluginy społeczności / ręcznie | ❌ Brak w rdzeniu | ❌ Brak w rdzeniu | ✅ Dobra | ✅ Dobra | ❌ Brak w rdzeniu (zapewniane przez Nuxt i18n) |
| Ekosystem / Społeczność | ⚠️ Mniejszy, ale szybko rosnący i responsywny | ✅ Największy i najbardziej dojrzały | ✅ Duży | ⚠️ Mniejszy | ✅ Średniej wielkości, skupiony na Next.js | ✅ Średniej wielkości, skupiony na Next.js | ✅ Duży w ekosystemie Vue |
| Server-side Rendering i Server Components | ✅ Tak, zoptymalizowane pod kątem SSR / React Server Components | ⚠️ Obsługiwane na poziomie strony, ale wymaga przekazywania funkcji t w dół drzewa komponentów | ⚠️ Obsługiwane na poziomie strony z dodatkową konfiguracją, ale wymaga przekazywania funkcji t w dół drzewa komponentów | ✅ Obsługiwane, wymaga konfiguracji | ⚠️ Obsługiwane na poziomie strony, ale wymaga przekazywania funkcji t w dół drzewa komponentów | ⚠️ Obsługiwane na poziomie strony, ale wymaga przekazywania funkcji t w dół drzewa komponentów | ✅ Obsługiwane przez Nuxt/Vue SSR (brak RSC) |
| Tree-shaking (ładowanie tylko używanej treści) | ✅ Tak, dla każdego komponentu w czasie budowania przez pluginy Babel/SWC | ⚠️ Zazwyczaj ładuje wszystko (można poprawić przez przestrzenie nazw / code-splitting) | ⚠️ Zazwyczaj ładuje wszystko | ❌ Nie domyślnie | ⚠️ Częściowo | ⚠️ Częściowo | ⚠️ Częściowo (z code-splitting / ręczną konfiguracją) |
| Leniwe ładowanie (Lazy loading) | ✅ Tak, dla każdego języka / słownika | ✅ Tak (np. backendy/przestrzenie nazw na żądanie) | ✅ Tak (dzielenie paczek językowych) | ✅ Tak (dynamiczny import 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żywanej treści | ✅ Tak, dla każdego słownika w czasie budowania | ❌ Nie, tylko przez ręczne dzielenie przestrzeni nazw | ❌ Nie, wszystkie zadeklarowane wiadomości są pakowane | ✅ Tak, nieużywane klucze są wykrywane i usuwane przy budowaniu | ❌ Nie, wymaga ręcznego zarządzania przestrzeniami nazw | ❌ Nie, wymaga ręcznego zarządzania przestrzeniami nazw | ❌ Nie, możliwe tylko przez ręczne leniwe ładowanie |
| Zarządzanie dużymi projektami | ✅ Zachęca do modułowości, odpowiednie dla systemów projektowych (design systems) | ⚠️ Wymaga dużej dyscypliny w organizacji plików | ⚠️ Centralne katalogi mogą stać się bardzo duże | ⚠️ Może stać się skomplikowane | ✅ Modułowość dzięki konfiguracji | ✅ Modułowość dzięki konfiguracji | ✅ Modułowość dzięki konfiguracji Vue Router/Nuxt i18n |
Gwiazdki na GitHubie
Gwiazdki na GitHubie są silnym wskaźnikiem popularności projektu, zaufania społeczności i długoterminowego znaczenia. Choć nie są bezpośrednią miarą jakości technicznej, odzwierciedlają, ilu programistów uważa projekt za przydatny, śledzi jego postępy i prawdopodobnie go przyjmie. Przy szacowaniu wartości projektu gwiazdki pomagają porównać zainteresowanie alternatywami i dostarczają wglądu w rozwój ekosystemu.
Interoperacyjność
intlayer może również pomóc w zarządzaniu przestrzeniami nazw react-intl, react-i18next, next-intl, next-i18next oraz vue-i18n.
Korzystając z intlayer, możesz zadeklarować swoją treść w formacie ulubionej biblioteki i18n, a intlayer wygeneruje przestrzenie nazw w wybranej przez Ciebie lokalizacji (przykład: /messages/{{locale}}/{{namespace}}.json).