Спросите свой вопрос и получите сводку документа, используя эту страницу и выбранного вами поставщика AI
История версий
- "Представлен контент на основе выбора (Select)"v9.1.030.07.2026
Содержимое этой страницы было переведено с помощью ИИ.
Смотреть последнюю версию оригинального контента на английскомЕсли у вас есть идея по улучшению этой документации, не стесняйтесь внести свой вклад, подав запрос на вытягивание на GitHub.
Ссылка на документацию GitHubКопировать Markdown документа в буфер обмена
Контент на основе выбора (Select) / Intlayer
Как работает Select
В Intlayer контент на основе выбора достигается с помощью функции select, которая сопоставляет произвольные строковые значения с соответствующим им контентом. Это эквивалентно сообщению ICU {value, select, …}, или похоже на оператор switch в коде вашего приложения.
Используйте select, когда дискриминантом (discriminant) является произвольная строка: статус (status), план (plan), платформа (platform) или роль (role). Для других дискриминантов Intlayer предоставляет специализированные узлы:
Открыть таблицу в модальном окне для четкого просмотра всех данных
| Дискриминант | Узел |
|---|---|
| Количество (Quantity) | enu() |
| Логическое значение (Boolean) | cond() |
| Пол (Gender) | gender() |
| Любая другая строка | select() |
Настройка контента на основе выбора
Чтобы настроить контент на основе выбора в вашем проекте Intlayer, создайте модуль контента, который включает ваши определения выбора. Ниже приведены примеры в различных форматах.
Копировать код в буфер обмена
import { select, type Dictionary } from "intlayer";
const myPostContent = {
key: "my_key",
content: {
publishStatus: select({
draft: "This post is a draft",
published: "This post is live",
scheduled: "This post is scheduled",
fallback: "Unknown status", // необязательно
}),
},
} satisfies Dictionary;
export default myPostContent;
Еслиfallbackне объявлен, последний объявленный ключ рассматривается как резервный (fallback), когда предоставленное значение не совпадает ни с одним из объявленных случаев: точно так же, как в контрактахcond()иgender().
Безопасность типов (Type Safety)
Принимаемый аргумент выводится из объявленных случаев:
- Без
fallbackпринимаются только объявленные случаи: опечатка приведет к ошибке типа. - С
fallbackпринимается любая строка (поскольку резервный вариант покрывает несовпадающие значения), в то время как объявленные случаи по-прежнему обеспечивают автодополнение.
Почему не использовать обычный объект?
Может возникнуть соблазн объявить обычный объект и индексировать его, используя значение во время выполнения:
Копировать код в буфер обмена
Компилятор Intlayer анализирует ваш исходный код, чтобы исключить неиспользуемый контент и минифицировать оставшиеся ключи. Динамически вычисляемый доступ (obj[expr]) не может быть разрешен статически, поэтому вся ветвь будет помечена как непрозрачная (opaque): она сохранится в сборке (bundle), а ее ключи не будут минифицированы.
При использовании select() разрешение случая (case resolution) происходит внутри вызова функции, а не как доступ к свойству. Компилятор видит это как единичный статический доступ к полю и точно оптимизирует узел так же, как он это делает с enu(), cond() или gender():
Копировать код в буфер обмена
Использование контента на основе выбора
Чтобы использовать контент на основе выбора в компоненте React, импортируйте и используйте хук useIntlayer из пакета react-intlayer. Этот хук извлекает контент для указанного ключа и позволяет передать значение для выбора соответствующего вывода.
Копировать код в буфер обмена
import type { FC } from "react";
import { useIntlayer } from "react-intlayer";
const PostStatus: FC = () => {
const { publishStatus } = useIntlayer("my_key");
return (
<div>
<p>
{
/* Вывод: This post is a draft */
publishStatus("draft")
}
</p>
<p>
{
/* Вывод: This post is live */
publishStatus("published")
}
</p>
<p>
{
/* Вывод: Unknown status */
publishStatus("Archived")
}
</p>
</div>
);
};
export default PostStatus;
Чтобы использовать контент на основе выбора в клиентских компонентах Next.js (Client Components), извлекайте его через хук useIntlayer. Вот пример:
Копировать код в буфер обмена
"use client";
import type { FC } from "react";
import { useIntlayer } from "next-intlayer";
const PostStatus: FC = () => {
const { publishStatus } = useIntlayer("my_key");
return (
<div>
<p>{publishStatus("draft")}</p>
<p>{publishStatus("published")}</p>
</div>
);
};
export default PostStatus;
Чтобы использовать контент на основе выбора в компонентах Vue, извлекайте его через хук useIntlayer. Вот пример:
Копировать код в буфер обмена
Чтобы использовать контент на основе выбора в компонентах Svelte, извлекайте его через хук useIntlayer. Доступ к хранилищу (store) осуществляется с помощью $. Вот пример:
Копировать код в буфер обмена
Чтобы использовать контент на основе выбора в компонентах Preact, извлекайте его через хук useIntlayer. Вот пример:
Копировать код в буфер обмена
import type { FC } from "preact";
import { useIntlayer } from "preact-intlayer";
const PostStatus: FC = () => {
const { publishStatus } = useIntlayer("my_key");
return (
<div>
<p>{publishStatus("draft")}</p>
<p>{publishStatus("published")}</p>
</div>
);
};
export default PostStatus;
Чтобы использовать контент на основе выбора в компонентах SolidJS, извлекайте его через хук useIntlayer. Вот пример:
Копировать код в буфер обмена
import type { Component } from "solid-js";
import { useIntlayer } from "solid-intlayer";
const PostStatus: Component = () => {
const { publishStatus } = useIntlayer("my_key");
return (
<div>
<p>{publishStatus("draft")}</p>
<p>{publishStatus("published")}</p>
</div>
);
};
export default PostStatus;
Чтобы использовать контент на основе выбора в компонентах Angular, извлекайте его через хук useIntlayer. Вот пример:
Копировать код в буфер обмена
Чтобы использовать контент на основе выбора с vanilla-intlayer, извлекайте его через функцию useIntlayer. Вот пример:
Копировать код в буфер обмена
import { installIntlayer, useIntlayer } from "vanilla-intlayer";
installIntlayer();
const content = useIntlayer("my_key").onChange((newContent) => {
document.getElementById("status")!.textContent =
newContent.publishStatus("draft");
});
// Первоначальный рендеринг
document.getElementById("status")!.textContent = content.publishStatus("draft");
Комбинирование Select с другими узлами
Поскольку каждый случай (case) содержит полный узел контента, select может сочетаться с t(), insert(), md() и т.д.:
Копировать код в буфер обмена
Копировать код в буфер обмена
Миграция с ICU select
Сообщения, использующие аргумент ICU select, импортируются как узел select:
Копировать код в буфер обмена
Станет:
Копировать код в буфер обмена
Случай other из ICU переименовывается в fallback, что является каноническим названием в Intlayer для всех универсальных (catch-all) случаев. Второй аргумент записывает имя переменной ICU, поэтому при экспорте сообщение трансформируется обратно в точно такую же строку ICU.
Обратите внимание: сообщения ICUselect, в которых случаями являются значения пола (male/female/other), вместо этого импортируются как узелgender.
Дополнительные ресурсы
Для получения более подробной информации о конфигурации и использовании ознакомьтесь со следующими ресурсами:
Эти ресурсы предоставляют дополнительные сведения о настройке и использовании Intlayer в различных средах и фреймворках.