Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Historia wersji
- "Wydanie funkcji wariantów"v9.0.012.06.2026
- "`variant` akceptuje teraz ciąg znaków lub obiekt — dawne rekordy `meta` / dynamiczne są deklarowane jako warianty obiektowe"v9.1.026.06.2026
- "Wariant deklaruje tylko klucze, które nadpisuje; niezadeklarowane warianty powracają do domyślnego wpisu"v9.1.131.07.2026
- "Dostawcy przyjmują otaczający prop `variant`; selektory przyjmują uporządkowany łańcuch preferencji"v9.1.24.08.2026
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
Warianty
Wariant to zestaw plików treści, które dzielą ten sam klucz słownika (key), lecz każdy ma inną wartość variant. Intlayer udostępnia odpowiedni plik na podstawie selektora przekazanego do useIntlayer.
Wartość variant może przyjmować dwie formy:
- Ciąg znaków — pojedyncza nazwana alternatywa (testy A/B, banery sezonowe, feature flagi).
- Obiekt — strukturalny dyskryminator adresowany zestawem pól (rekordy CMS, treść zależna od użytkownika, dowolna treść z nieprzezroczystym ID jako kluczem). Tożsamością jest cały obiekt: selektor musi dostarczyć równy obiekt, aby rozwiązać wpis.
Forma obiektowa zastępuje dawne polemeta. Wszędzie, gdzie wcześniej pisałeśmeta: { id, … }, napiszvariant: { id, … }i wybierz ją przez{ variant: { id, … } }.
Warianty nazwane (tekstowe)
Każdy plik reprezentuje jedną nazwaną alternatywę. Pominięcie variant (lub ustawienie na "default") oznacza go jako domyślny.
Skopiuj kod do schowka
import { t, type Dictionary } from "intlayer";
const dictionary = {
key: "hero-banner",
variant: "default",
content: {
headline: t({
en: "Build faster with Intlayer",
fr: "Développez plus vite avec Intlayer",
}),
cta: t({ en: "Get started", fr: "Commencer" }),
},
} satisfies Dictionary;
export default dictionary;Skopiuj kod do schowka
import { t, type Dictionary } from "intlayer";
const dictionary = {
key: "hero-banner",
variant: "black_friday",
content: {
headline: t({
en: "50 % off — today only",
fr: "−50 % — aujourd'hui seulement",
}),
cta: t({ en: "Shop now", fr: "Acheter maintenant" }),
},
} satisfies Dictionary;
export default dictionary;Warianty częściowe
Wariant deklaruje tylko klucze, które nadpisuje; reszta jest dziedziczona z wpisu domyślnego.
Skopiuj kod do schowka
import { t, type Dictionary } from "intlayer";
const dictionary = {
key: "hero-banner",
variant: "summer",
content: {
headline: t({
en: "Build faster all summer",
fr: "Développez plus vite tout l'été",
}),
},
} satisfies Dictionary;
export default dictionary;Skopiuj kod do schowka
useIntlayer("hero-banner", { variant: "summer" });// → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` odziedziczoneuseIntlayer("hero-banner", { variant: "never-declared" });// → wpis domyślnyDlatego dodajesz plik wariantu tylko tam, gdzie brzmienie faktycznie się różni. Klucz jest rozwiązywany na null tylko wtedy, gdy deklaruje warianty, ale nie ma domyślnego wpisu.
Korzystanie z wariantów nazwanych
Wariant domyślny
Skopiuj kod do schowka
import { useIntlayer } from "react-intlayer";
export const Hero = () => {
const { headline, cta } = useIntlayer("hero-banner");
// → wariant domyślny
return (
<section>
<h1>{headline}</h1>
<a>{cta}</a>
</section>
);
};Wariant nazwany
Skopiuj kod do schowka
const { headline, cta } = useIntlayer("hero-banner", { variant: "black_friday",});Wariant nazwany z jawnym locale
Skopiuj kod do schowka
const content = useIntlayer("hero-banner", { variant: "black_friday", locale: "fr",});Warianty obiektowe (strukturalne)
Wariant obiektowy adresuje treść dowolnym zestawem par klucz-wartość zadeklarowanych w polu variant — co umożliwia modelowanie rekordów CMS, treści zależnej od użytkownika lub dowolnej treści z nieprzezroczystym ID jako kluczem. Tożsamością jest cały obiekt: selektor musi dostarczyć równy obiekt, aby wpis został rozwiązany.
Skopiuj kod do schowka
import { t, type Dictionary } from "intlayer";
const dictionary = {
key: "product",
variant: { id: "prod_abc", userId: "user_123" },
content: {
name: t({ en: "Widget Pro", fr: "Widget Pro" }),
description: t({ en: "The best widget.", fr: "Le meilleur widget." }),
},
} satisfies Dictionary;
export default dictionary;Skopiuj kod do schowka
import { t, type Dictionary } from "intlayer";
const dictionary = {
key: "product",
variant: { id: "prod_abcd", userId: "user_123" },
content: {
name: t({ en: "Widget Lite", fr: "Widget Lite" }),
description: t({ en: "A lighter option.", fr: "Une option plus légère." }),
},
} satisfies Dictionary;
export default dictionary;Korzystanie z wariantów obiektowych
Przekaż pasujący obiekt do variant. Każde pole zadeklarowane w słowniku musi zostać podane i być równe; w przeciwnym razie wynik to null. Kolejność pól nie ma znaczenia.
Skopiuj kod do schowka
import { useIntlayer } from "react-intlayer";
export const Product = ({
productId,
userId,
}: {
productId: string;
userId: string;
}) => {
const content = useIntlayer("product", {
variant: { id: productId, userId },
});
if (!content) return null;
return <p>{content.description}</p>;
};Z jawnym locale
Skopiuj kod do schowka
const content = useIntlayer("product", { variant: { id: "prod_abc", userId: "user_123" }, locale: "fr",});Brakujące pole — brak dopasowania
Skopiuj kod do schowka
// Zwraca null: brakuje `userId`, więc obiekt nie pasuje do zadeklarowanego wariantuconst content = useIntlayer("product", { variant: { id: "prod_abc" } });Wariant otaczający
Niektóre wymiary wariantu są stałe przez całą sesję — najemca, typ szkoły, poziom planu. Są rozstrzygane raz i żaden komponent nie powinien przekazywać ich ręcznie.
Nie opakowujuseIntlayerwe własny hook, aby je wstrzyknąć. Optymalizacja na etapie budowania przepisuje wyłącznie dosłowne wywołanieuseIntlayer("key")zaimportowane z pakietu frameworka, więc nic za opakowaniem nie trafi do bundla.
Zamiast tego zadeklaruj wariant raz na dostawcy, dokładnie jak locale:
Skopiuj kod do schowka
import { IntlayerProvider } from "react-intlayer";
export const App = ({ locale, schoolType }) => (
<IntlayerProvider locale={locale} variant={schoolType}>
<Hero />
</IntlayerProvider>
);Każdy odczyt słownika poniżej dostawcy rozstrzyga się teraz względem tego wariantu, a selektor w miejscu wywołania zawsze wygrywa:
Skopiuj kod do schowka
useIntlayer("hero-banner");// → wariant dostawcyuseIntlayer("hero-banner", { variant: "summer" });// → "summer" — zastępuje wariant dostawcy, nie rozszerza goFormy
Prop variant przyjmuje trzy formy:
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Forma | Znaczenie |
|---|---|
variant="school1" | jeden nazwany wariant dla każdego klucza |
variant={["school1", "default"]} | uporządkowany łańcuch preferencji |
variant={{ "hero-banner": "school1", default: "base" }} | jeden wariant na klucz słownika |
Łańcuch preferencji
Łańcuch jest przechodzony od lewej do prawej względem wpisów deklarowanych przez każdy klucz i wygrywa pierwszy zadeklarowany. Gdy żaden nie jest zadeklarowany, używany jest niejawny wpis domyślny — dokładnie tak jak dla pojedynczej wartości.
Skopiuj kod do schowka
<IntlayerProvider variant={["school1", "school2"]} />// `hero-banner` nie deklaruje wpisu `school1`, ale deklaruje `school2` → "school2"// klucz, który nie deklaruje żadnego z nich → wpis domyślnyZatem ["black_friday", "summer"] czyta się jako „black friday, jeśli ten klucz go ma, w przeciwnym razie summer, w przeciwnym razie domyślny”. Łańcuchy są akceptowane także w miejscu wywołania:
Skopiuj kod do schowka
useIntlayer("hero-banner", { variant: ["black_friday", "summer"] });Zauważ, że jest to lustrzane odbicie tablicy przyjmowanej przez pole variant pliku treści: tam tablica deklaruje jeden wpis na element, tutaj konsumuje je w kolejności priorytetu.
Mapa według klucza
Adresuj każdy klucz słownika osobno. Zarezerwowany wpis default obejmuje wszystkie klucze niewymienione na liście:
Skopiuj kod do schowka
<IntlayerProvider variant={{ "hero-banner": "school1", product: ["school1", "default"], default: "base", }}/>Na dostawcy zwykły obiekt jest zawsze odczytywany jako mapa według klucza, nigdy jako wariant obiektowy — oba są strukturalnie identyczne. Aby ustalić wariant obiektowy globalnie, zagnieźdź go pod wpisem: variant={{ default: { id: "prod_abc" } }}.
Ponieważ klucze mapy są sprawdzane względem zadeklarowanych kluczy słowników, literówka — lub wariant obiektowy zapisany wprost, taki jak variant={{ id: "prod_abc" }} — jest błędem kompilacji.
Tryb ładowania
Warianty obiektowe są często ładowane leniwie. Ustaw importMode w słowniku, aby to kontrolować:
Skopiuj kod do schowka
const dictionary = {
key: "product",
importMode: "fetch", // or "dynamic"
variant: { id: "prod_abc", userId: "user_123" },
content: { … },
} satisfies Dictionary;
export default dictionary;Zobacz optymalizację bundla, aby poznać szczegóły trybów static, dynamic i fetch.
Typowe przypadki użycia
- Testy A/B tekstu sterowane kluczem eksperymentu
- Banery sezonowe lub promocyjne
- Komunikaty z feature flag
- Kampanie marketingowe specyficzne dla locale
- Teksty marketingowe per produkt zarządzane w CMS
- Treść zależna od użytkownika lub konta
- Dowolna treść adresowana nieprzezroczystym ID w czasie wykonywania