Задайте питання та отримайте підсумок документа, вказавши цю сторінку та обраного вами постачальника штучного інтелекту
Історія версій
- "Представлено контент на основі вибору"v9.1.030.07.2026
Вміст цієї сторінки перекладено за допомогою штучного інтелекту.
Переглянути останню версію оригінального вмісту англійськоюЯкщо у вас є ідея щодо покращення цієї документації, будь ласка, долучіться, надіславши pull request на 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приймаються лише оголошені випадки: помилка друку призведе до помилки типу (type error). - З
fallbackприймається будь-який рядок (оскільки резервний варіант покриває невідповідні значення), тоді як оголошені випадки все ще забезпечують автодоповнення.
Чому б не використовувати звичайний об'єкт?
Може виникнути спокуса оголосити звичайний об'єкт та індексувати його за допомогою значення під час виконання (runtime value):
Скопіюйте код у буфер обміну
Компілятор 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 у різних середовищах та фреймворках.