Задайте питання та отримайте підсумок документа, вказавши цю сторінку та обраного вами постачальника штучного інтелекту
Історія версій
- "Представлено контент на основі вибору"v9.1.030.07.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
Контент на основі вибору (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приймаються лише оголошені випадки: помилка друку призведе до помилки типу (type error). - З
fallbackприймається будь-який рядок (оскільки резервний варіант покриває невідповідні значення), тоді як оголошені випадки все ще забезпечують автодоповнення.
Чому б не використовувати звичайний об'єкт?
Може виникнути спокуса оголосити звичайний об'єкт та індексувати його за допомогою значення під час виконання (runtime value):
Скопіюйте код у буфер обміну
// ❌ Не робіть цьогоconst { publishStatus } = useIntlayer("my_key");return <p>{publishStatus[publishType]}</p>;Компілятор Intlayer аналізує ваш вихідний код, щоб видалити контент, який не використовується, та мініфікувати ключі, що залишилися. Динамічно обчислюваний доступ (obj[expr]) не може бути дозволений статично, тому вся гілка буде позначена як непрозора (opaque): вона залишиться у збірці (bundle), а її ключі не будуть мініфіковані.
При використанні select() розв'язання випадку (case resolution) відбувається всередині виклику функції, а не як доступ до властивості. Компілятор бачить це як єдиний статичний доступ до поля і точно оптимізує вузол так само, як він це робить з enu(), cond() або gender():
Скопіюйте код у буфер обміну
// ✅ Робіть такconst { publishStatus } = useIntlayer("my_key");return <p>{publishStatus(publishType)}</p>;Використання контенту на основі вибору
Щоб використовувати контент на основі вибору в компоненті 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;Комбінування Select з іншими вузлами
Оскільки кожен випадок (case) містить повний вузол контенту, select можна комбінувати з t(), insert(), md() тощо:
Скопіюйте код у буфер обміну
import { insert, select, t, type Dictionary } from "intlayer";const myPostContent = { key: "my_key", content: { publishStatus: select({ draft: insert( t({ en: "{{name}} saved a draft", fr: "{{name}} a enregistré un brouillon", uk: "{{name}} зберіг(ла) чернетку", }) ), published: insert( t({ en: "{{name}} published the post", fr: "{{name}} a publié l’article", uk: "{{name}} опублікував(ла) пост", }) ), fallback: insert( t({ en: "{{name}} updated the post", fr: "{{name}} a mis à jour l’article", uk: "{{name}} оновив(ла) пост", }) ), }), },} satisfies Dictionary;export default myPostContent;Скопіюйте код у буфер обміну
publishStatus("draft")({ name: "Alice" }); // Вивід: Alice зберіг(ла) чернеткуМіграція з ICU select
Повідомлення, що використовують аргумент ICU select, імпортуються як вузол select:
Скопіюйте код у буфер обміну
{publishType, select, draft {draft} published {published} other {Unknown}}Стане:
Скопіюйте код у буфер обміну
select( { draft: "draft", published: "published", fallback: "Unknown", }, "publishType");Випадок other з ICU перейменовується на fallback, що є канонічною назвою в Intlayer для всіх резервних (catch-all) випадків. Другий аргумент записує ім'я змінної ICU, тому при експорті повідомлення трансформується назад у точно такий самий рядок ICU.
Зверніть увагу: повідомлення ICUselect, у яких випадками є значення статі (male/female/other), натомість імпортуються як вузолgender.
Додаткові ресурси
Для отримання більш детальної інформації щодо конфігурації та використання перегляньте такі ресурси:
Ці ресурси надають подальшу інформацію щодо налаштування та використання Intlayer у різних середовищах та фреймворках.