Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Historia wersji
- "Dodano sekcję Dlaczego Intlayer zamiast alternatyw"v8.11.231.05.2026
- "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 angielskimIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
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.
Intlayer oferuje szereg dodatkowych funkcji, których inne rozwiązania i18n nie posiadają, takich jak obsługa Markdown, pobieranie treści zewnętrznych, ładowanie treści z plików, aktualizacja treści na żywo, wizualny edytor i wiele więcej.
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:
Skopiuj kod do schowka
.├── locales│ ├── en.json│ ├── es.json│ └── fr.json├── i18n.ts└── src └── components └── MyComponent └── index.tsxLub tutaj przy użyciu przestrzeni nazw (namespaces):
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 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)
- Utworzyć nowy zasób/przestrzeń nazw w folderze
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).
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 szybkości programowania
- Pliki
.content.{{ts|mjs|cjs|json}}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
- Pliki
Uporządkowanie bazy kodu
- Zmniejszenie złożoności
- Zwiększenie łatwości konserwacji
Ł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
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
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)
Optymalizację wydajności ładowania
- Jeśli komponent jest ładowany leniwie (lazy-loaded), powiązana z nim treść zostanie załadowana w tym samym momencie
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ściami. - Deklaracja treści |
| Kompilator Kompilator Intlayer automatycznie wyodrębnia treść z komponentów i generuje pliki słowników. - Kompilator |
| Plik 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 |
| Ś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 |
| Uproszczona 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 |
| Uproszczone 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 |
| Spó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 |
| Uporzą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 |
| Ulepszony 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 |
| Obsł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 |
| Darmowy 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 |
| Zawartość 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 |
| Renderowanie statyczne Nie blokuje renderowania statycznego. - Integracja z Next.js |
| Tł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 |
| Integracja 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 |
| Rozszerzenie 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 |
| 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ść 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.
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).