@intlayer/docs 9.0.2 → 9.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +20 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +20 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +1 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/dictionary/content_file.md +24 -1
  8. package/docs/ar/dictionary/select.md +386 -0
  9. package/docs/ar/dynamic_dictionaries/variants.md +37 -7
  10. package/docs/de/dictionary/content_file.md +24 -1
  11. package/docs/de/dictionary/select.md +386 -0
  12. package/docs/de/dynamic_dictionaries/variants.md +34 -0
  13. package/docs/en/dictionary/content_file.md +24 -1
  14. package/docs/en/dictionary/select.md +382 -0
  15. package/docs/en/dynamic_dictionaries/variants.md +35 -1
  16. package/docs/en-GB/dictionary/content_file.md +24 -1
  17. package/docs/en-GB/dictionary/select.md +385 -0
  18. package/docs/en-GB/dynamic_dictionaries/variants.md +34 -0
  19. package/docs/es/dictionary/content_file.md +24 -1
  20. package/docs/es/dictionary/select.md +385 -0
  21. package/docs/es/dynamic_dictionaries/variants.md +34 -0
  22. package/docs/fr/dictionary/content_file.md +24 -1
  23. package/docs/fr/dictionary/select.md +382 -0
  24. package/docs/fr/dynamic_dictionaries/variants.md +34 -0
  25. package/docs/hi/dictionary/content_file.md +24 -1
  26. package/docs/hi/dictionary/select.md +386 -0
  27. package/docs/hi/dynamic_dictionaries/variants.md +36 -2
  28. package/docs/id/dictionary/content_file.md +24 -1
  29. package/docs/id/dictionary/select.md +386 -0
  30. package/docs/id/dynamic_dictionaries/variants.md +34 -0
  31. package/docs/it/dictionary/content_file.md +24 -1
  32. package/docs/it/dictionary/select.md +386 -0
  33. package/docs/it/dynamic_dictionaries/variants.md +35 -1
  34. package/docs/ja/dictionary/content_file.md +24 -1
  35. package/docs/ja/dictionary/select.md +386 -0
  36. package/docs/ja/dynamic_dictionaries/variants.md +35 -1
  37. package/docs/ko/dictionary/content_file.md +24 -1
  38. package/docs/ko/dictionary/select.md +386 -0
  39. package/docs/ko/dynamic_dictionaries/variants.md +35 -1
  40. package/docs/pl/dictionary/content_file.md +24 -1
  41. package/docs/pl/dictionary/select.md +386 -0
  42. package/docs/pl/dynamic_dictionaries/variants.md +35 -1
  43. package/docs/pt/dictionary/content_file.md +24 -1
  44. package/docs/pt/dictionary/select.md +386 -0
  45. package/docs/pt/dynamic_dictionaries/variants.md +34 -0
  46. package/docs/ru/dictionary/content_file.md +25 -2
  47. package/docs/ru/dictionary/select.md +386 -0
  48. package/docs/ru/dynamic_dictionaries/variants.md +35 -1
  49. package/docs/tr/dictionary/content_file.md +24 -1
  50. package/docs/tr/dictionary/select.md +386 -0
  51. package/docs/tr/dynamic_dictionaries/variants.md +35 -1
  52. package/docs/uk/dictionary/content_file.md +24 -1
  53. package/docs/uk/dictionary/select.md +386 -0
  54. package/docs/uk/dynamic_dictionaries/variants.md +34 -0
  55. package/docs/vi/dictionary/content_file.md +24 -1
  56. package/docs/vi/dictionary/select.md +386 -0
  57. package/docs/vi/dynamic_dictionaries/variants.md +36 -2
  58. package/docs/zh/dictionary/content_file.md +24 -1
  59. package/docs/zh/dictionary/select.md +387 -0
  60. package/docs/zh/dynamic_dictionaries/variants.md +35 -1
  61. package/package.json +7 -7
  62. package/src/generated/docs.entry.ts +20 -0
@@ -0,0 +1,386 @@
1
+ ---
2
+ createdAt: 2026-07-30
3
+ updatedAt: 2026-07-30
4
+ title: Контент на основі вибору (Select)
5
+ description: Дізнайтеся, як використовувати контент на основі вибору в Intlayer для динамічного відображення контенту на основі довільного рядкового значення. Дотримуйтесь цієї документації, щоб ефективно реалізувати контент типу switch у вашому проєкті.
6
+ keywords:
7
+ - Контент на основі вибору
8
+ - Select Content
9
+ - Switch контент
10
+ - ICU select
11
+ - Динамічний рендеринг
12
+ - Документація
13
+ - Intlayer
14
+ - Next.js
15
+ - JavaScript
16
+ - React
17
+ slugs:
18
+ - doc
19
+ - concept
20
+ - content
21
+ - select
22
+ history:
23
+ - version: 9.1.0
24
+ date: 2026-07-30
25
+ changes: "Представлено контент на основі вибору"
26
+ author: aymericzip
27
+ ---
28
+
29
+ # Контент на основі вибору (Select) / Intlayer
30
+
31
+ ## Як працює Select
32
+
33
+ В Intlayer контент на основі вибору досягається за допомогою функції `select`, яка зіставляє довільні рядкові значення з відповідним їм контентом. Це еквівалентно повідомленню ICU `{value, select, …}`, або подібно до оператора `switch` у коді вашого застосунку.
34
+
35
+ Використовуйте `select`, коли дискримінантом (discriminant) є довільний рядок: статус (status), план (plan), платформа (platform) або роль (role). Для інших дискримінантів Intlayer надає спеціалізовані вузли:
36
+
37
+ | Дискримінант | Вузол |
38
+ | -------------------------- | ---------- |
39
+ | Кількість (Quantity) | `enu()` |
40
+ | Логічне значення (Boolean) | `cond()` |
41
+ | Стать (Gender) | `gender()` |
42
+ | Будь-який інший рядок | `select()` |
43
+
44
+ ## Налаштування контенту на основі вибору
45
+
46
+ Щоб налаштувати контент на основі вибору у вашому проєкті Intlayer, створіть модуль контенту, який містить ваші визначення вибору. Нижче наведено приклади у різних форматах.
47
+
48
+ ```typescript fileName="**/*.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
49
+ import { select, type Dictionary } from "intlayer";
50
+
51
+ const myPostContent = {
52
+ key: "my_key",
53
+ content: {
54
+ publishStatus: select({
55
+ draft: "This post is a draft",
56
+ published: "This post is live",
57
+ scheduled: "This post is scheduled",
58
+ fallback: "Unknown status", // необов'язково
59
+ }),
60
+ },
61
+ } satisfies Dictionary;
62
+
63
+ export default myPostContent;
64
+ ```
65
+
66
+ ```json5 fileName="**/*.content.json" contentDeclarationFormat="json"
67
+ {
68
+ "$schema": "https://intlayer.org/schema.json",
69
+ "key": "my_key",
70
+ "content": {
71
+ "publishStatus": {
72
+ "nodeType": "select",
73
+ "select": {
74
+ "draft": "This post is a draft",
75
+ "published": "This post is live",
76
+ "scheduled": "This post is scheduled",
77
+ "fallback": "Unknown status", // необов'язково
78
+ },
79
+ },
80
+ },
81
+ }
82
+ ```
83
+
84
+ > Якщо `fallback` не оголошено, останній оголошений ключ розглядається як резервний (fallback), коли надане значення не збігається з жодним із оголошених випадків: точно так само, як у контрактах `cond()` та `gender()`.
85
+
86
+ ### Безпека типів (Type Safety)
87
+
88
+ Прийманий аргумент виводиться з оголошених випадків:
89
+
90
+ - Без `fallback` приймаються лише оголошені випадки: помилка друку призведе до помилки типу (type error).
91
+ - З `fallback` приймається будь-який рядок (оскільки резервний варіант покриває невідповідні значення), тоді як оголошені випадки все ще забезпечують автодоповнення.
92
+
93
+ ## Чому б не використовувати звичайний об'єкт?
94
+
95
+ Може виникнути спокуса оголосити звичайний об'єкт та індексувати його за допомогою значення під час виконання (runtime value):
96
+
97
+ ```tsx
98
+ // ❌ Не робіть цього
99
+ const { publishStatus } = useIntlayer("my_key");
100
+
101
+ return <p>{publishStatus[publishType]}</p>;
102
+ ```
103
+
104
+ Компілятор Intlayer аналізує ваш вихідний код, щоб видалити контент, який не використовується, та мініфікувати ключі, що залишилися. Динамічно обчислюваний доступ (`obj[expr]`) не може бути дозволений статично, тому вся гілка буде позначена як непрозора (opaque): вона залишиться у збірці (bundle), а її ключі не будуть мініфіковані.
105
+
106
+ При використанні `select()` розв'язання випадку (case resolution) відбувається всередині виклику функції, а не як доступ до властивості. Компілятор бачить це як єдиний статичний доступ до поля і точно оптимізує вузол так само, як він це робить з `enu()`, `cond()` або `gender()`:
107
+
108
+ ```tsx
109
+ // ✅ Робіть так
110
+ const { publishStatus } = useIntlayer("my_key");
111
+
112
+ return <p>{publishStatus(publishType)}</p>;
113
+ ```
114
+
115
+ ## Використання контенту на основі вибору
116
+
117
+ <Tabs group="framework">
118
+ <Tab label="React" value="react">
119
+
120
+ Щоб використовувати контент на основі вибору в компоненті React, імпортуйте та використовуйте хук `useIntlayer` із пакета `react-intlayer`. Цей хук отримує контент для вказаного ключа і дозволяє передати значення для вибору відповідного виводу.
121
+
122
+ ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
123
+ import type { FC } from "react";
124
+ import { useIntlayer } from "react-intlayer";
125
+
126
+ const PostStatus: FC = () => {
127
+ const { publishStatus } = useIntlayer("my_key");
128
+
129
+ return (
130
+ <div>
131
+ <p>
132
+ {
133
+ /* Вивід: This post is a draft */
134
+ publishStatus("draft")
135
+ }
136
+ </p>
137
+ <p>
138
+ {
139
+ /* Вивід: This post is live */
140
+ publishStatus("published")
141
+ }
142
+ </p>
143
+ <p>
144
+ {
145
+ /* Вивід: Unknown status */
146
+ publishStatus("Archived")
147
+ }
148
+ </p>
149
+ </div>
150
+ );
151
+ };
152
+
153
+ export default PostStatus;
154
+ ```
155
+
156
+ </Tab>
157
+ <Tab label="Next.js" value="nextjs">
158
+
159
+ Щоб використовувати контент на основі вибору в клієнтських компонентах Next.js (Client Components), отримуйте його за допомогою хука `useIntlayer`. Ось приклад:
160
+
161
+ ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
162
+ "use client";
163
+
164
+ import type { FC } from "react";
165
+ import { useIntlayer } from "next-intlayer";
166
+
167
+ const PostStatus: FC = () => {
168
+ const { publishStatus } = useIntlayer("my_key");
169
+
170
+ return (
171
+ <div>
172
+ <p>{publishStatus("draft")}</p>
173
+ <p>{publishStatus("published")}</p>
174
+ </div>
175
+ );
176
+ };
177
+
178
+ export default PostStatus;
179
+ ```
180
+
181
+ </Tab>
182
+ <Tab label="Vue" value="vue">
183
+
184
+ Щоб використовувати контент на основі вибору в компонентах Vue, отримуйте його за допомогою хука `useIntlayer`. Ось приклад:
185
+
186
+ ```vue fileName="**/*.vue"
187
+ <script setup lang="ts">
188
+ import { useIntlayer } from "vue-intlayer";
189
+
190
+ const { publishStatus } = useIntlayer("my_key");
191
+ </script>
192
+
193
+ <template>
194
+ <div>
195
+ <p>{{ publishStatus("draft") }}</p>
196
+ <p>{{ publishStatus("published") }}</p>
197
+ </div>
198
+ </template>
199
+ ```
200
+
201
+ </Tab>
202
+ <Tab label="Svelte" value="svelte">
203
+
204
+ Щоб використовувати контент на основі вибору в компонентах Svelte, отримуйте його за допомогою хука `useIntlayer`. Доступ до сховища (store) здійснюється за допомогою `$`. Ось приклад:
205
+
206
+ ```svelte fileName="**/*.svelte"
207
+ <script lang="ts">
208
+ import { useIntlayer } from "svelte-intlayer";
209
+
210
+ const content = useIntlayer("my_key");
211
+ </script>
212
+
213
+ <div>
214
+ <p>{$content.publishStatus("draft")}</p>
215
+ <p>{$content.publishStatus("published")}</p>
216
+ </div>
217
+ ```
218
+
219
+ </Tab>
220
+ <Tab label="Preact" value="preact">
221
+
222
+ Щоб використовувати контент на основі вибору в компонентах Preact, отримуйте його за допомогою хука `useIntlayer`. Ось приклад:
223
+
224
+ ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
225
+ import type { FC } from "preact";
226
+ import { useIntlayer } from "preact-intlayer";
227
+
228
+ const PostStatus: FC = () => {
229
+ const { publishStatus } = useIntlayer("my_key");
230
+
231
+ return (
232
+ <div>
233
+ <p>{publishStatus("draft")}</p>
234
+ <p>{publishStatus("published")}</p>
235
+ </div>
236
+ );
237
+ };
238
+
239
+ export default PostStatus;
240
+ ```
241
+
242
+ </Tab>
243
+ <Tab label="Solid" value="solid">
244
+
245
+ Щоб використовувати контент на основі вибору в компонентах SolidJS, отримуйте його за допомогою хука `useIntlayer`. Ось приклад:
246
+
247
+ ```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
248
+ import type { Component } from "solid-js";
249
+ import { useIntlayer } from "solid-intlayer";
250
+
251
+ const PostStatus: Component = () => {
252
+ const { publishStatus } = useIntlayer("my_key");
253
+
254
+ return (
255
+ <div>
256
+ <p>{publishStatus("draft")}</p>
257
+ <p>{publishStatus("published")}</p>
258
+ </div>
259
+ );
260
+ };
261
+
262
+ export default PostStatus;
263
+ ```
264
+
265
+ </Tab>
266
+ <Tab label="Angular" value="angular">
267
+
268
+ Щоб використовувати контент на основі вибору в компонентах Angular, отримуйте його за допомогою хука `useIntlayer`. Ось приклад:
269
+
270
+ ```typescript fileName="app.component.ts" codeFormat="typescript"
271
+ import { Component } from "@angular/core";
272
+ import { useIntlayer } from "angular-intlayer";
273
+
274
+ @Component({
275
+ selector: "app-post-status",
276
+ template: `
277
+ <div>
278
+ <p>{{ content().publishStatus("draft") }}</p>
279
+ <p>{{ content().publishStatus("published") }}</p>
280
+ </div>
281
+ `,
282
+ })
283
+ export class PostStatusComponent {
284
+ content = useIntlayer("my_key");
285
+ }
286
+ ```
287
+
288
+ </Tab>
289
+ <Tab label="Vanilla JS" value="vanilla">
290
+
291
+ Щоб використовувати контент на основі вибору з `vanilla-intlayer`, отримуйте його за допомогою функції `useIntlayer`. Ось приклад:
292
+
293
+ ```typescript fileName="**/*.ts" codeFormat={["typescript", "esm"]}
294
+ import { installIntlayer, useIntlayer } from "vanilla-intlayer";
295
+
296
+ installIntlayer();
297
+
298
+ const content = useIntlayer("my_key").onChange((newContent) => {
299
+ document.getElementById("status")!.textContent =
300
+ newContent.publishStatus("draft");
301
+ });
302
+
303
+ // Початковий рендеринг
304
+ document.getElementById("status")!.textContent = content.publishStatus("draft");
305
+ ```
306
+
307
+ </Tab>
308
+ </Tabs>
309
+
310
+ ## Комбінування Select з іншими вузлами
311
+
312
+ Оскільки кожен випадок (case) містить повний вузол контенту, `select` можна комбінувати з `t()`, `insert()`, `md()` тощо:
313
+
314
+ ```typescript fileName="**/*.content.ts" codeFormat="typescript"
315
+ import { insert, select, t, type Dictionary } from "intlayer";
316
+
317
+ const myPostContent = {
318
+ key: "my_key",
319
+ content: {
320
+ publishStatus: select({
321
+ draft: insert(
322
+ t({
323
+ en: "{{name}} saved a draft",
324
+ fr: "{{name}} a enregistré un brouillon",
325
+ uk: "{{name}} зберіг(ла) чернетку",
326
+ })
327
+ ),
328
+ published: insert(
329
+ t({
330
+ en: "{{name}} published the post",
331
+ fr: "{{name}} a publié l’article",
332
+ uk: "{{name}} опублікував(ла) пост",
333
+ })
334
+ ),
335
+ fallback: insert(
336
+ t({
337
+ en: "{{name}} updated the post",
338
+ fr: "{{name}} a mis à jour l’article",
339
+ uk: "{{name}} оновив(ла) пост",
340
+ })
341
+ ),
342
+ }),
343
+ },
344
+ } satisfies Dictionary;
345
+
346
+ export default myPostContent;
347
+ ```
348
+
349
+ ```tsx
350
+ publishStatus("draft")({ name: "Alice" }); // Вивід: Alice зберіг(ла) чернетку
351
+ ```
352
+
353
+ ## Міграція з ICU `select`
354
+
355
+ Повідомлення, що використовують аргумент ICU `select`, імпортуються як вузол `select`:
356
+
357
+ ```text
358
+ {publishType, select, draft {draft} published {published} other {Unknown}}
359
+ ```
360
+
361
+ Стане:
362
+
363
+ ```typescript
364
+ select(
365
+ {
366
+ draft: "draft",
367
+ published: "published",
368
+ fallback: "Unknown",
369
+ },
370
+ "publishType"
371
+ );
372
+ ```
373
+
374
+ Випадок `other` з ICU перейменовується на `fallback`, що є канонічною назвою в Intlayer для всіх резервних (catch-all) випадків. Другий аргумент записує ім'я змінної ICU, тому при експорті повідомлення трансформується назад у точно такий самий рядок ICU.
375
+
376
+ > Зверніть увагу: повідомлення ICU `select`, у яких випадками є значення статі (`male` / `female` / `other`), натомість імпортуються як вузол [`gender`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/gender.md).
377
+
378
+ ## Додаткові ресурси
379
+
380
+ Для отримання більш детальної інформації щодо конфігурації та використання перегляньте такі ресурси:
381
+
382
+ - [Документація Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/index.md)
383
+ - [Документация Intlayer React](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_create_react_app.md)
384
+ - [Документація Intlayer Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_nextjs_15.md)
385
+
386
+ Ці ресурси надають подальшу інформацію щодо налаштування та використання Intlayer у різних середовищах та фреймворках.
@@ -23,6 +23,9 @@ history:
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
25
  changes: "`variant` тепер приймає рядок або об'єкт — колишні `meta` / динамічні записи оголошуються як об'єктні варіанти"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Варіант оголошує лише ключі, які він перевизначає; неоголошені варіанти повертаються до запису за замовчуванням"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Часткові варіанти
84
+
85
+ Варіант **оголошує лише ключі, які він перевизначає**; решта успадковується з запису за замовчуванням.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` успадковано
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → запис за замовчуванням
110
+ ```
111
+
112
+ Тому ви додаєте файл варіанту лише там, де текст дійсно відрізняється. Ключ дозволяється в `null` тільки в тому випадку, якщо він оголошує варіанти, але не має запису за замовчуванням.
113
+
80
114
  ### Використання іменованих варіантів
81
115
 
82
116
  #### Варіант за замовчуванням
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-02-07
3
- updatedAt: 2026-05-12
3
+ updatedAt: 2026-07-30
4
4
  title: Tệp Nội Dung
5
5
  description: Tìm hiểu cách tùy chỉnh các phần mở rộng cho các tệp khai báo nội dung của bạn. Theo dõi tài liệu này để triển khai các điều kiện một cách hiệu quả trong dự án của bạn.
6
6
  keywords:
@@ -12,6 +12,9 @@ slugs:
12
12
  - concept
13
13
  - content
14
14
  history:
15
+ - version: 9.1.0
16
+ date: 2026-07-30
17
+ changes: "Giới thiệu nội dung dựa trên lựa chọn"
15
18
  - version: 8.10.0
16
19
  date: 2026-05-19
17
20
  changes: "Thêm hỗ trợ cho các định dạng tệp YAML và Markdown"
@@ -259,6 +262,7 @@ Intlayer hỗ trợ nhiều loại nội dung thông qua các node kiểu:
259
262
  - **Nội dung HTML**: Nội dung HTML phong phú với các component tùy chỉnh tùy chọn [xem Nội dung HTML](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/html.md)
260
263
  - **Nội dung Lồng nhau**: Tham chiếu đến các từ điển khác [xem Nội dung Lồng nhau](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/nested_content.md)
261
264
  - **Nội dung Giới tính**: Nội dung thay đổi dựa trên giới tính [xem Nội dung Giới tính](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/gender_content.md)
265
+ - **Nội dung dựa trên lựa chọn**: Nội dung thay đổi dựa trên các giá trị chuỗi tùy ý [xem Nội dung dựa trên lựa chọn](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/select.md)
262
266
  - **Nội dung Tệp**: Tham chiếu đến các tệp bên ngoài [xem Nội dung Tệp](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/file_content.md)
263
267
 
264
268
  ## Cấu trúc Từ điển
@@ -749,6 +753,25 @@ genderContent: gender({
749
753
 
750
754
  > Xem [Nội dung theo giới tính (`gender`) Tài liệu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/gender.md) để biết thêm thông tin.
751
755
 
756
+ ### Nội dung dựa trên lựa chọn (`select`)
757
+
758
+ Nội dung thay đổi dựa trên các giá trị chuỗi tùy ý — tương đương với ICU `select`:
759
+
760
+ ```typescript
761
+ import { select } from "intlayer";
762
+
763
+ selectContent: select({
764
+ draft: "This post is a draft",
765
+ published: "This post is live",
766
+ scheduled: "This post is scheduled",
767
+ fallback: "Unknown status",
768
+ });
769
+ ```
770
+
771
+ Sử dụng `select` khi yếu tố phân biệt không phải là một số lượng (`enu`), không phải là một boolean (`cond`) và cũng không phải là giới tính (`gender`). Ưu tiên tính năng này hơn so với việc lập chỉ mục (indexing) một đối tượng (object) thông thường bằng một giá trị trong thời gian chạy (runtime value): trình biên dịch (compiler) Intlayer không thể giải quyết tĩnh (statically resolve) các truy cập được tính toán động (dynamically computed access) như vậy.
772
+
773
+ > Xem [Nội dung dựa trên lựa chọn (`select`) Tài liệu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/vi/dictionary/select.md) để biết thêm thông tin.
774
+
752
775
  ### Nội dung tệp tin (`file`)
753
776
 
754
777
  Tham chiếu đến các tệp tin bên ngoài: