--- createdAt: 2026-06-14 updatedAt: 2026-06-14 title: Nowy Intlayer v9 - Co nowego? description: Odkryj nowości w Intlayer v9. Przedstawiamy pakiety kompatybilności typu drop-in dla popularnych bibliotek i18n oraz wsparcie dla Kolekcji (Collections), Wariantów (Variants) i Dynamicznych Rekordów (Dynamic Records). keywords: - Intlayer - Kompatybilność - Migracja - Kolekcje - Warianty - Dynamiczne Rekordy - i18next - next-intl - vue-i18n slugs: - doc - releases - v9 author: aymericzip --- # Nowy Intlayer v9 - Co nowego? Witaj w Intlayer v9! To główne wydanie (major release) stanowi ogromny krok milowy w upraszczaniu ścieżki migracji do Intlayer dzięki **pakietom kompatybilności (Compat Adapter Packages)** dla najpopularniejszych bibliotek i18n (takich jak `react-i18next`, `next-intl`, `vue-i18n` itp.) oraz wprowadza wsparcie dla bogatych struktur treści: **Kolekcji (Collections)**, **Wariantów (Variants)** i **Dynamicznych Rekordów (Dynamic Records)**. ## Spis treści --- ## Pakiety kompatybilności (Compat Adapter Packages) Migracja do Intlayer z popularnych bibliotek i18n jest teraz łatwiejsza niż kiedykolwiek. Stworzyliśmy pięć pakietów kompatybilności (compat packages), które udostępniają **dokładnie to samo publiczne API** co standardowe biblioteki i18n, ale delegują całą pracę związaną z tłumaczeniami do Intlayer w czasie działania aplikacji (runtime). ### To samo publiczne API ze ścisłym typowaniem (Strict Typing) Zastępując importy, zyskujesz wszystkie zalety Intlayer (w tym bezpieczeństwo typów w czasie kompilacji - compile-time type safety - w oparciu o Twoje rzeczywiste słowniki) przy minimalnych zmianach w kodzie: - `@intlayer/i18next` - `@intlayer/react-i18next` - `@intlayer/next-intl` - `@intlayer/next-i18next` - `@intlayer/vue-i18n` Na przykład, po prostu zmień: ```ts import { useTranslation } from "react-i18next"; ``` na: ```ts import { useTranslation } from "@intlayer/react-i18next"; ``` Twoje klucze będą teraz **ściśle typowane** (strictly typed) w oparciu o słowniki Intlayer, oferując pełne autouzupełnianie ścieżek kropkowych (dot-path) w Twoim IDE! ### Pluginy aliasów dla bundlerów (Vite, Next.js, Turbopack) Aby umożliwić migrację bez konieczności ręcznego przepisywania wszystkich importów, każdy pakiet adaptera kompatybilności zawiera **dedykowany plugin dla bundlera** (Vite lub Next.js) w podścieżce `/plugin`. Pluginy te automatycznie przepisują istniejące importy (np. `react-i18next` lub `next-intl`) na ich odpowiedniki `@intlayer/*` w czasie budowania (build time). #### Przykład dla Next.js (Webpack / Turbopack) Zamiast `withIntlayer`, owiń swoją konfigurację Next.js pluginem kompatybilności: ```ts fileName="next.config.ts" import { createNextI18nPlugin } from "@intlayer/next-i18next/plugin"; import type { NextConfig } from "next"; const withIntlayer = createNextI18nPlugin(); const nextConfig: NextConfig = {}; export default withIntlayer(nextConfig); ``` #### Przykład dla Vite (React, Vue, Solid, Svelte) ```ts fileName="vite.config.ts" import vueI18nVitePlugin from "@intlayer/vue-i18n/plugin"; export default defineConfig({ plugins: [vueI18nVitePlugin()], }); ``` --- ## Wspólny parser czasu działania (Mutualized Runtime Resolver) Wszystkie adaptery kompatybilności kierują teraz proces rozwiązywania tłumaczeń przez jeden, wysoce zoptymalizowany parser czasu działania (runtime parser): `@intlayer/core/messageFormat`. - **Interpolacja wiadomości (Interpolate Message)**: Obsługuje standardowe szablony `{{var}}` (ze spacjami i ścieżkami kropkowymi), argumenty formatowane w standardzie ICU (`{v, number, percent}` itp.) oraz proste szablony `{var}`. - **Rozwiązywanie węzłów wiadomości (Message Node Resolver)**: Obsługuje zagnieżdżone węzły: `insert()`, `plural()` (reguły liczby mnogiej CLDR), `enu()` (wyliczenia), `gender()`, tagi HTML, tablice oraz węzły funkcji wywoływalnych (callable functions). - **Parser tagów tokenizowanych (Tokenized Tag Parser)**: Wspiera wbudowane tagi XML/HTML oraz tagi numerowane (np. `<1>children`), aby zapewnić renderowanie bogatego tekstu (rich-text) po wyjęciu z pudełka. --- ## Specyfikacja funkcji: Kolekcje, Warianty i Dynamiczne Rekordy Intlayer v9 wykracza poza statyczne obiekty klucz-wartość, umożliwiając słownikom deklarowanie dynamicznych struktur układu, które są w pełni typowane od początku do końca (end-to-end). ### 1. Kolekcje (Collections) Zdefiniuj zarządzaną przez CMS uporządkowaną lista elementów (np. FAQ, produkty lub listy blogów): ```ts fileName="faq.content.ts" import { t, type Dictionary } from "intlayer"; export default { key: "faq", content: [ { question: t({ pl: "Co to jest Intlayer?", en: "What is Intlayer?", fr: "Qu'est-ce qu'Intlayer ?", }), answer: t({ pl: "Zestaw narzędzi i18n.", en: "An i18n toolkit.", fr: "Une boîte à outils i18n.", }), }, ], } satisfies Dictionary; ``` #### Użycie: ```ts // Pobierz wszystkie elementy const allFaqs = useIntlayer("faq"); // -> { question: string, answer: string }[] // Pobierz pojedynczy element po indeksie const faq = useIntlayer("faq", { item: 1 }); // -> { question: string, answer: string } ``` ### 2. Warianty (Variants) Dostarczaj testy A/B, nagłówki sezonowe, flagi funkcji (feature flags) lub niestandardowe strony docelowe (landing pages): ```ts fileName="hero.content.ts" import { t, type Dictionary } from "intlayer"; export default { key: "hero-banner", variant: "default", content: { control: t({ pl: "Witaj", en: "Welcome", fr: "Bienvenue" }), black_friday: t({ pl: "Kup teraz", en: "Shop now", fr: "Acheter maintenant", }), }, } satisfies Dictionary; ``` #### Użycie: ```ts const banner = useIntlayer("hero-banner", { variant: "black_friday" }); ``` ### 3. Dynamiczne Rekordy (Dynamic Records) Definiuj słowniki, których wpisy są ładowane dynamicznie w czasie działania aplikacji (runtime) za pomocą identyfikatorów zapytań (query IDs): ```ts fileName="product.content.ts" import { t, type Dictionary } from "intlayer"; export default { key: "product-copy", meta: { id: "prod_123", category: "books", }, content: { title: t({ pl: "Czysty kod", en: "Clean Code", fr: "Code Propre" }), }, } satisfies Dictionary; ``` #### Użycie: ```ts // Pobiera dynamicznie tylko żądany element (wymaga Suspense) const product = useIntlayer("product-copy", { id: "prod_123", category: "books", }); ``` --- ## Dynamiczne ładowanie i optymalizacja rozmiaru paczki (Bundle Size) Aby zachować niezwykle mały rozmiar paczek (bundles), Intlayer v9 wspiera dynamiczne leniwe ładowanie (lazy loading). W swojej konfiguracji ustaw `importMode` na `'dynamic'` lub `'fetch'`: ```ts fileName="intlayer.config.ts" export default { dictionary: { importMode: "dynamic", // "static" | "dynamic" | "fetch" }, }; ``` W czasie budowania (build time), `@intlayer/swc` oraz `@intlayer/babel` skanują Twoje pliki i zastępują wywołania `useIntlayer` / `getIntlayer` opakowaniami wspierającymi tree-shaking (`useDictionary` / `useDictionaryDynamic`). Ładowana jest tylko treść wymagana dla wybranego elementu kolekcji, wariantu lub języka (locale), co zapobiega dołączaniu nieużywanych tłumaczeń do Twojej paczki produkcyjnej (production bundle). --- ## Uwagi dotyczące migracji z wersji v8 Jeśli aktualizujesz aplikację z wersji v8, pamiętaj, że wersja v9 nie zawiera zmian wprowadzających niekompatybilność wsteczną (breaking changes). Oto jednak kluczowe zmiany: - **Języki i dialekty (Locales & Dialects)**: Jeśli używasz zewnętrznych zależności i18n, dodaj odpowiednie pluginy adapterów kompatybilności w swojej konfiguracji lub konfiguracji bundlera, aby automatycznie przepisywać importy. - **Niestandardowe selektory (Custom Selectors)**: Podczas wywoływania `useIntlayer`, drugi parametr jest teraz zarezerwowany dla obiektu opcji zawierającego `{ locale, item, variant, id }`. Jeśli wcześniej przekazywałeś bezpośrednio ciąg znaków języka (locale string), nadal możesz to robić, jednak zaleca się używanie obiektu opcji przy bardziej zaawansowanych wyborach. --- ## Przydatne linki - [Przewodnik po pakietach kompatybilności (Compat Adapter Packages)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/compat/index.md) - [Dynamiczne słowniki - Kolekcje, Warianty i Dynamiczne Rekordy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/dynamic_dictionaries/index.md) - [Dokumentacja konfiguracji](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/configuration.md)