Задайте вопрос и получите краткое содержание документа через любого ИИ-провайдера на этой странице
История версий
- "Выпуск функции вариантов"v9.0.012.06.2026
- "`variant` теперь принимает строку или объект — прежние `meta` / динамические записи объявляются как объектные варианты"v9.1.026.06.2026
Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английскомIf 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
Варианты
Вариант — это набор файлов контента, которые имеют общий ключ словаря (key), но каждый несёт своё значение variant. Intlayer отдаёт нужный файл на основе селектора, переданного в useIntlayer.
Значение variant может принимать две формы:
- Строка — одна именованная альтернатива (A/B-тесты, сезонные баннеры, feature-флаги).
- Объект — структурированный дискриминатор, адресуемый набором полей (записи CMS, контент конкретного пользователя, любой контент с непрозрачным ID в качестве ключа). Идентичностью является весь объект: селектор должен предоставить равный объект, чтобы разрешить запись.
Объектная форма заменяет прежнее полеmeta. Везде, где раньше вы писалиmeta: { id, … }, пишитеvariant: { id, … }и выбирайте её через{ variant: { id, … } }.
Именованные (строковые) варианты
Каждый файл представляет одну именованную альтернативу. Пропуск variant (или значение "default") помечает его как запасной вариант.
Копировать код в буфер обмена
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;Копировать код в буфер обмена
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;Использование именованных вариантов
Вариант по умолчанию
Копировать код в буфер обмена
import { useIntlayer } from "react-intlayer";
export const Hero = () => {
const { headline, cta } = useIntlayer("hero-banner");
// → вариант по умолчанию
return (
<section>
<h1>{headline}</h1>
<a>{cta}</a>
</section>
);
};Именованный вариант
Копировать код в буфер обмена
const { headline, cta } = useIntlayer("hero-banner", { variant: "black_friday",});Именованный вариант с явной локалью
Копировать код в буфер обмена
const content = useIntlayer("hero-banner", { variant: "black_friday", locale: "fr",});Объектные (структурированные) варианты
Объектный вариант адресует контент произвольным набором пар ключ-значение, объявленных в поле variant, — что позволяет моделировать записи CMS, контент конкретного пользователя или любой контент с непрозрачным ID в качестве ключа. Идентичностью является весь объект: селектор должен предоставить равный объект, чтобы запись была разрешена.
Копировать код в буфер обмена
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;Копировать код в буфер обмена
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;Использование объектных вариантов
Передайте соответствующий объект в variant. Каждое поле, объявленное в словаре, должно быть предоставлено и равно; иначе результат — null. Порядок полей не имеет значения.
Копировать код в буфер обмена
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>;
};С явной локалью
Копировать код в буфер обмена
const content = useIntlayer("product", { variant: { id: "prod_abc", userId: "user_123" }, locale: "fr",});Отсутствует поле — нет совпадения
Копировать код в буфер обмена
// Возвращает null: отсутствует `userId`, поэтому объект не совпадает с объявленным вариантомconst content = useIntlayer("product", { variant: { id: "prod_abc" } });Режим загрузки
Объектные варианты часто загружаются лениво. Задайте importMode в словаре, чтобы управлять этим:
Копировать код в буфер обмена
const dictionary = {
key: "product",
importMode: "fetch", // or "dynamic"
variant: { id: "prod_abc", userId: "user_123" },
content: { … },
} satisfies Dictionary;
export default dictionary;См. оптимизацию бандла для подробностей о режимах static, dynamic и fetch.
Типичные сценарии использования
- A/B-тесты текста, управляемые ключом эксперимента
- Сезонные или рекламные баннеры
- Сообщения под feature-флагами
- Маркетинговые кампании для конкретной локали
- Маркетинговый текст по товарам, управляемый в CMS
- Контент конкретного пользователя или аккаунта
- Любой контент, адресуемый непрозрачным ID во время выполнения