@intlayer/docs 7.5.12 → 7.5.14
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.
- package/blog/ar/per-component_vs_centralized_i18n.md +248 -0
- package/blog/de/per-component_vs_centralized_i18n.md +248 -0
- package/blog/en/_per-component_vs_centralized_i18n.md +252 -0
- package/blog/en/per-component_vs_centralized_i18n.md +248 -0
- package/blog/en-GB/per-component_vs_centralized_i18n.md +247 -0
- package/blog/es/per-component_vs_centralized_i18n.md +245 -0
- package/blog/fr/per-component_vs_centralized_i18n.md +245 -0
- package/blog/hi/per-component_vs_centralized_i18n.md +249 -0
- package/blog/id/per-component_vs_centralized_i18n.md +248 -0
- package/blog/it/per-component_vs_centralized_i18n.md +247 -0
- package/blog/ja/per-component_vs_centralized_i18n.md +247 -0
- package/blog/ko/per-component_vs_centralized_i18n.md +246 -0
- package/blog/pl/per-component_vs_centralized_i18n.md +247 -0
- package/blog/pt/per-component_vs_centralized_i18n.md +246 -0
- package/blog/ru/per-component_vs_centralized_i18n.md +251 -0
- package/blog/tr/per-component_vs_centralized_i18n.md +244 -0
- package/blog/uk/compiler_vs_declarative_i18n.md +224 -0
- package/blog/uk/i18n_using_next-i18next.md +1086 -0
- package/blog/uk/i18n_using_next-intl.md +760 -0
- package/blog/uk/index.md +69 -0
- package/blog/uk/internationalization_and_SEO.md +273 -0
- package/blog/uk/intlayer_with_i18next.md +211 -0
- package/blog/uk/intlayer_with_next-i18next.md +202 -0
- package/blog/uk/intlayer_with_next-intl.md +203 -0
- package/blog/uk/intlayer_with_react-i18next.md +200 -0
- package/blog/uk/intlayer_with_react-intl.md +202 -0
- package/blog/uk/intlayer_with_vue-i18n.md +206 -0
- package/blog/uk/l10n_platform_alternative/Lokalise.md +80 -0
- package/blog/uk/l10n_platform_alternative/crowdin.md +80 -0
- package/blog/uk/l10n_platform_alternative/phrase.md +78 -0
- package/blog/uk/list_i18n_technologies/CMS/drupal.md +143 -0
- package/blog/uk/list_i18n_technologies/CMS/wix.md +167 -0
- package/blog/uk/list_i18n_technologies/CMS/wordpress.md +189 -0
- package/blog/uk/list_i18n_technologies/frameworks/angular.md +125 -0
- package/blog/uk/list_i18n_technologies/frameworks/flutter.md +128 -0
- package/blog/uk/list_i18n_technologies/frameworks/react-native.md +217 -0
- package/blog/uk/list_i18n_technologies/frameworks/react.md +155 -0
- package/blog/uk/list_i18n_technologies/frameworks/svelte.md +145 -0
- package/blog/uk/list_i18n_technologies/frameworks/vue.md +144 -0
- package/blog/uk/next-i18next_vs_next-intl_vs_intlayer.md +1499 -0
- package/blog/uk/nextjs-multilingual-seo-comparison.md +360 -0
- package/blog/uk/per-component_vs_centralized_i18n.md +248 -0
- package/blog/uk/rag_powered_documentation_assistant.md +288 -0
- package/blog/uk/react-i18next_vs_react-intl_vs_intlayer.md +164 -0
- package/blog/uk/vue-i18n_vs_intlayer.md +279 -0
- package/blog/uk/what_is_internationalization.md +167 -0
- package/blog/vi/per-component_vs_centralized_i18n.md +246 -0
- package/blog/zh/per-component_vs_centralized_i18n.md +248 -0
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +20 -0
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +20 -0
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +20 -0
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +20 -0
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/generated/blog.entry.d.ts +1 -0
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/docs/ar/configuration.md +6 -1
- package/docs/ar/dictionary/content_file.md +6 -1
- package/docs/de/configuration.md +6 -1
- package/docs/de/dictionary/content_file.md +6 -1
- package/docs/en/configuration.md +6 -1
- package/docs/en/dictionary/content_file.md +6 -1
- package/docs/en-GB/configuration.md +6 -1
- package/docs/en-GB/dictionary/content_file.md +3 -1
- package/docs/es/configuration.md +6 -1
- package/docs/es/dictionary/content_file.md +6 -1
- package/docs/fr/configuration.md +6 -1
- package/docs/fr/dictionary/content_file.md +3 -1
- package/docs/hi/configuration.md +6 -1
- package/docs/hi/dictionary/content_file.md +3 -1
- package/docs/id/configuration.md +6 -1
- package/docs/id/dictionary/content_file.md +3 -1
- package/docs/it/configuration.md +6 -1
- package/docs/it/dictionary/content_file.md +3 -1
- package/docs/ja/configuration.md +6 -1
- package/docs/ja/dictionary/content_file.md +3 -1
- package/docs/ko/configuration.md +6 -1
- package/docs/ko/dictionary/content_file.md +3 -1
- package/docs/pl/configuration.md +3 -1
- package/docs/pl/dictionary/content_file.md +3 -1
- package/docs/pt/configuration.md +6 -1
- package/docs/pt/dictionary/content_file.md +3 -1
- package/docs/ru/configuration.md +6 -1
- package/docs/ru/dictionary/content_file.md +6 -1
- package/docs/tr/configuration.md +6 -1
- package/docs/tr/dictionary/content_file.md +3 -1
- package/docs/uk/CI_CD.md +198 -0
- package/docs/uk/autoFill.md +307 -0
- package/docs/uk/bundle_optimization.md +185 -0
- package/docs/uk/cli/build.md +64 -0
- package/docs/uk/cli/ci.md +137 -0
- package/docs/uk/cli/configuration.md +63 -0
- package/docs/uk/cli/debug.md +46 -0
- package/docs/uk/cli/doc-review.md +43 -0
- package/docs/uk/cli/doc-translate.md +132 -0
- package/docs/uk/cli/editor.md +28 -0
- package/docs/uk/cli/fill.md +130 -0
- package/docs/uk/cli/index.md +190 -0
- package/docs/uk/cli/init.md +84 -0
- package/docs/uk/cli/list.md +90 -0
- package/docs/uk/cli/list_projects.md +128 -0
- package/docs/uk/cli/live.md +41 -0
- package/docs/uk/cli/login.md +157 -0
- package/docs/uk/cli/pull.md +78 -0
- package/docs/uk/cli/push.md +98 -0
- package/docs/uk/cli/sdk.md +71 -0
- package/docs/uk/cli/test.md +76 -0
- package/docs/uk/cli/transform.md +65 -0
- package/docs/uk/cli/version.md +24 -0
- package/docs/uk/cli/watch.md +37 -0
- package/docs/uk/configuration.md +742 -0
- package/docs/uk/dictionary/condition.md +237 -0
- package/docs/uk/dictionary/content_file.md +1134 -0
- package/docs/uk/dictionary/enumeration.md +245 -0
- package/docs/uk/dictionary/file.md +232 -0
- package/docs/uk/dictionary/function_fetching.md +212 -0
- package/docs/uk/dictionary/gender.md +273 -0
- package/docs/uk/dictionary/insertion.md +187 -0
- package/docs/uk/dictionary/markdown.md +383 -0
- package/docs/uk/dictionary/nesting.md +273 -0
- package/docs/uk/dictionary/translation.md +332 -0
- package/docs/uk/formatters.md +595 -0
- package/docs/uk/how_works_intlayer.md +256 -0
- package/docs/uk/index.md +175 -0
- package/docs/uk/interest_of_intlayer.md +297 -0
- package/docs/uk/intlayer_CMS.md +569 -0
- package/docs/uk/intlayer_visual_editor.md +292 -0
- package/docs/uk/intlayer_with_angular.md +710 -0
- package/docs/uk/intlayer_with_astro.md +256 -0
- package/docs/uk/intlayer_with_create_react_app.md +1258 -0
- package/docs/uk/intlayer_with_express.md +429 -0
- package/docs/uk/intlayer_with_fastify.md +446 -0
- package/docs/uk/intlayer_with_lynx+react.md +548 -0
- package/docs/uk/intlayer_with_nestjs.md +283 -0
- package/docs/uk/intlayer_with_next-i18next.md +640 -0
- package/docs/uk/intlayer_with_next-intl.md +456 -0
- package/docs/uk/intlayer_with_nextjs_page_router.md +1541 -0
- package/docs/uk/intlayer_with_nuxt.md +711 -0
- package/docs/uk/intlayer_with_react_router_v7.md +600 -0
- package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +669 -0
- package/docs/uk/intlayer_with_svelte_kit.md +579 -0
- package/docs/uk/intlayer_with_tanstack.md +818 -0
- package/docs/uk/intlayer_with_vite+preact.md +1748 -0
- package/docs/uk/intlayer_with_vite+react.md +1449 -0
- package/docs/uk/intlayer_with_vite+solid.md +302 -0
- package/docs/uk/intlayer_with_vite+svelte.md +520 -0
- package/docs/uk/intlayer_with_vite+vue.md +1113 -0
- package/docs/uk/introduction.md +222 -0
- package/docs/uk/locale_mapper.md +242 -0
- package/docs/uk/mcp_server.md +211 -0
- package/docs/uk/packages/express-intlayer/t.md +465 -0
- package/docs/uk/packages/intlayer/getEnumeration.md +159 -0
- package/docs/uk/packages/intlayer/getHTMLTextDir.md +121 -0
- package/docs/uk/packages/intlayer/getLocaleLang.md +81 -0
- package/docs/uk/packages/intlayer/getLocaleName.md +135 -0
- package/docs/uk/packages/intlayer/getLocalizedUrl.md +338 -0
- package/docs/uk/packages/intlayer/getMultilingualUrls.md +359 -0
- package/docs/uk/packages/intlayer/getPathWithoutLocale.md +75 -0
- package/docs/uk/packages/intlayer/getPrefix.md +213 -0
- package/docs/uk/packages/intlayer/getTranslation.md +190 -0
- package/docs/uk/packages/intlayer/getTranslationContent.md +189 -0
- package/docs/uk/packages/next-intlayer/t.md +365 -0
- package/docs/uk/packages/next-intlayer/useDictionary.md +276 -0
- package/docs/uk/packages/next-intlayer/useIntlayer.md +263 -0
- package/docs/uk/packages/next-intlayer/useLocale.md +166 -0
- package/docs/uk/packages/react-intlayer/t.md +311 -0
- package/docs/uk/packages/react-intlayer/useDictionary.md +295 -0
- package/docs/uk/packages/react-intlayer/useI18n.md +250 -0
- package/docs/uk/packages/react-intlayer/useIntlayer.md +251 -0
- package/docs/uk/packages/react-intlayer/useLocale.md +210 -0
- package/docs/uk/per_locale_file.md +345 -0
- package/docs/uk/plugins/sync-json.md +398 -0
- package/docs/uk/readme.md +265 -0
- package/docs/uk/releases/v6.md +305 -0
- package/docs/uk/releases/v7.md +624 -0
- package/docs/uk/roadmap.md +346 -0
- package/docs/uk/testing.md +204 -0
- package/docs/vi/configuration.md +6 -1
- package/docs/vi/dictionary/content_file.md +6 -1
- package/docs/zh/configuration.md +6 -1
- package/docs/zh/dictionary/content_file.md +6 -1
- package/frequent_questions/ar/error-vite-env-only.md +77 -0
- package/frequent_questions/de/error-vite-env-only.md +77 -0
- package/frequent_questions/en/error-vite-env-only.md +77 -0
- package/frequent_questions/en-GB/error-vite-env-only.md +77 -0
- package/frequent_questions/es/error-vite-env-only.md +76 -0
- package/frequent_questions/fr/error-vite-env-only.md +77 -0
- package/frequent_questions/hi/error-vite-env-only.md +77 -0
- package/frequent_questions/id/error-vite-env-only.md +77 -0
- package/frequent_questions/it/error-vite-env-only.md +77 -0
- package/frequent_questions/ja/error-vite-env-only.md +77 -0
- package/frequent_questions/ko/error-vite-env-only.md +77 -0
- package/frequent_questions/pl/error-vite-env-only.md +77 -0
- package/frequent_questions/pt/error-vite-env-only.md +77 -0
- package/frequent_questions/ru/error-vite-env-only.md +77 -0
- package/frequent_questions/tr/error-vite-env-only.md +77 -0
- package/frequent_questions/uk/SSR_Next_no_[locale].md +104 -0
- package/frequent_questions/uk/array_as_content_declaration.md +72 -0
- package/frequent_questions/uk/build_dictionaries.md +58 -0
- package/frequent_questions/uk/build_error_CI_CD.md +74 -0
- package/frequent_questions/uk/bun_set_up.md +53 -0
- package/frequent_questions/uk/customized_locale_list.md +64 -0
- package/frequent_questions/uk/domain_routing.md +113 -0
- package/frequent_questions/uk/error-vite-env-only.md +77 -0
- package/frequent_questions/uk/esbuild_error.md +29 -0
- package/frequent_questions/uk/get_locale_cookie.md +142 -0
- package/frequent_questions/uk/intlayer_command_undefined.md +155 -0
- package/frequent_questions/uk/locale_incorect_in_url.md +73 -0
- package/frequent_questions/uk/package_version_error.md +181 -0
- package/frequent_questions/uk/static_rendering.md +44 -0
- package/frequent_questions/uk/translated_path_url.md +55 -0
- package/frequent_questions/uk/unknown_command.md +97 -0
- package/frequent_questions/vi/error-vite-env-only.md +77 -0
- package/frequent_questions/zh/error-vite-env-only.md +77 -0
- package/legal/uk/privacy_notice.md +83 -0
- package/legal/uk/terms_of_service.md +55 -0
- package/package.json +9 -9
- package/src/generated/blog.entry.ts +20 -0
- package/src/generated/frequentQuestions.entry.ts +20 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-08-23
|
|
4
|
+
title: Перелічення
|
|
5
|
+
description: Дізнайтеся, як оголошувати та використовувати перелічення на вашому багатомовному сайті. Дотримуйтеся кроків у цій онлайн-документації, щоб налаштувати проект за кілька хвилин.
|
|
6
|
+
keywords:
|
|
7
|
+
- Перелічення
|
|
8
|
+
- Інтернаціоналізація
|
|
9
|
+
- Документація
|
|
10
|
+
- Intlayer
|
|
11
|
+
- Next.js
|
|
12
|
+
- JavaScript
|
|
13
|
+
- React
|
|
14
|
+
slugs:
|
|
15
|
+
- doc
|
|
16
|
+
- concept
|
|
17
|
+
- content
|
|
18
|
+
- enumeration
|
|
19
|
+
history:
|
|
20
|
+
- version: 5.5.10
|
|
21
|
+
date: 2025-06-29
|
|
22
|
+
changes: Ініціалізація історії
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Перелічення / Утворення множини
|
|
26
|
+
|
|
27
|
+
## Як працює перелічення
|
|
28
|
+
|
|
29
|
+
В Intlayer перелічення реалізується за допомогою функції `enu`, яка зіставляє конкретні ключі з відповідним вмістом. Ці ключі можуть представляти числові значення, діапазони або власні ідентифікатори. При використанні з React Intlayer або Next Intlayer відповідний вміст автоматично вибирається на основі локалі застосунку та визначених правил.
|
|
30
|
+
|
|
31
|
+
## Налаштування перерахувань
|
|
32
|
+
|
|
33
|
+
Щоб налаштувати перерахування у вашому проєкті Intlayer, потрібно створити модуль контенту, який містить визначення перерахувань. Ось приклад простого перерахування для кількості автомобілів:
|
|
34
|
+
|
|
35
|
+
```typescript fileName="**/*.content.ts" contentDeclarationFormat="typescript"
|
|
36
|
+
import { enu, type Dictionary } from "intlayer";
|
|
37
|
+
|
|
38
|
+
const carEnumeration = {
|
|
39
|
+
key: "car_count",
|
|
40
|
+
content: {
|
|
41
|
+
numberOfCar: enu({
|
|
42
|
+
"<-1": "Менше ніж -1 автомобіля",
|
|
43
|
+
"-1": "Мінус один автомобіль",
|
|
44
|
+
"0": "Жодних автомобілів",
|
|
45
|
+
"1": "Один автомобіль",
|
|
46
|
+
">5": "Кілька автомобілів",
|
|
47
|
+
">19": "Багато автомобілів",
|
|
48
|
+
"fallback": "Значення за замовчуванням", // Необов'язково
|
|
49
|
+
}),
|
|
50
|
+
},
|
|
51
|
+
} satisfies Dictionary;
|
|
52
|
+
|
|
53
|
+
export default carEnumeration;
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```javascript fileName="**/*.content.mjs" contentDeclarationFormat="esm"
|
|
57
|
+
import { enu } from "intlayer";
|
|
58
|
+
|
|
59
|
+
/** @type {import('intlayer').Dictionary} */
|
|
60
|
+
const carEnumeration = {
|
|
61
|
+
key: "car_count",
|
|
62
|
+
content: {
|
|
63
|
+
numberOfCar: enu({
|
|
64
|
+
"<-1": "Менше ніж -1 автомобіля",
|
|
65
|
+
"-1": "Мінус один автомобіль",
|
|
66
|
+
"0": "Жодних автомобілів",
|
|
67
|
+
"1": "Один автомобіль",
|
|
68
|
+
">5": "Кілька автомобілів",
|
|
69
|
+
">19": "Багато автомобілів",
|
|
70
|
+
"fallback": "Значення за замовчуванням", // Необов'язково
|
|
71
|
+
}),
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export default carEnumeration;
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```javascript fileName="**/*.content.cjs" contentDeclarationFormat="commonjs"
|
|
79
|
+
const { enu } = require("intlayer");
|
|
80
|
+
|
|
81
|
+
/** @type {import('intlayer').Dictionary} */
|
|
82
|
+
const carEnumeration = {
|
|
83
|
+
key: "car_count",
|
|
84
|
+
content: {
|
|
85
|
+
numberOfCar: enu({
|
|
86
|
+
"<-1": "Менше ніж мінус одна машина",
|
|
87
|
+
"-1": "Мінус одна машина",
|
|
88
|
+
"0": "Немає машин",
|
|
89
|
+
"1": "Одна машина",
|
|
90
|
+
">5": "Декілька машин",
|
|
91
|
+
">19": "Багато машин",
|
|
92
|
+
"fallback": "Значення за замовчуванням", // Необов'язково
|
|
93
|
+
}),
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
module.exports = carEnumeration;
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
```json fileName="**/*.content.json" contentDeclarationFormat="json"
|
|
101
|
+
{
|
|
102
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
103
|
+
"key": "car_count",
|
|
104
|
+
"content": {
|
|
105
|
+
"numberOfCar": {
|
|
106
|
+
"nodeType": "enumeration",
|
|
107
|
+
"enumeration": {
|
|
108
|
+
"<-1": "Менше ніж мінус одна машина",
|
|
109
|
+
"-1": "Minus one car",
|
|
110
|
+
"0": "No cars",
|
|
111
|
+
"1": "One car",
|
|
112
|
+
">5": "Some cars",
|
|
113
|
+
">19": "Many cars",
|
|
114
|
+
"fallback": "Fallback value" // Optional
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
У цьому прикладі `enu` відображає різні умови на конкретний вміст. При використанні в React-компоненті Intlayer може автоматично вибирати відповідний вміст на основі заданої змінної.
|
|
122
|
+
|
|
123
|
+
> Порядок оголошення має значення в перерахуваннях Intlayer. Перше допустиме оголошення — те, яке буде обрано. Якщо застосовуються кілька умов, упевніться, що вони розташовані в правильному порядку, щоб уникнути непередбачуваної поведінки.
|
|
124
|
+
|
|
125
|
+
> Якщо не вказано fallback, функція поверне `undefined`, якщо жоден ключ не підходить.
|
|
126
|
+
|
|
127
|
+
## Використання перерахувань з React Intlayer
|
|
128
|
+
|
|
129
|
+
Щоб використовувати enumeration в React-компоненті, ви можете скористатися хуком `useIntlayer` з пакета `react-intlayer`. Цей хук повертає правильний контент на основі вказаного ID. Ось приклад використання:
|
|
130
|
+
|
|
131
|
+
```tsx fileName="**/*.tsx" codeFormat="typescript"
|
|
132
|
+
import type { FC } from "react";
|
|
133
|
+
import { useIntlayer } from "react-intlayer";
|
|
134
|
+
|
|
135
|
+
const CarComponent: FC = () => {
|
|
136
|
+
const { numberOfCar } = useIntlayer("car_count");
|
|
137
|
+
|
|
138
|
+
return (
|
|
139
|
+
<div>
|
|
140
|
+
<p>
|
|
141
|
+
{
|
|
142
|
+
numberOfCar(0) // Вивід: Немає авто
|
|
143
|
+
}
|
|
144
|
+
</p>
|
|
145
|
+
<p>
|
|
146
|
+
{
|
|
147
|
+
numberOfCar(6) // Вивід: Декілька авто
|
|
148
|
+
}
|
|
149
|
+
</p>
|
|
150
|
+
<p>
|
|
151
|
+
{
|
|
152
|
+
numberOfCar(20) // Вивід: Багато авто
|
|
153
|
+
}
|
|
154
|
+
</p>
|
|
155
|
+
<p>
|
|
156
|
+
{
|
|
157
|
+
numberOfCar(0.01) // Вивід: Значення за замовчуванням
|
|
158
|
+
}
|
|
159
|
+
</p>
|
|
160
|
+
</div>
|
|
161
|
+
);
|
|
162
|
+
};
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
```javascript fileName="**/*.mjx" codeFormat="esm"
|
|
166
|
+
import { useIntlayer } from "react-intlayer";
|
|
167
|
+
|
|
168
|
+
const CarComponent = () => {
|
|
169
|
+
const { numberOfCar } = useIntlayer("car_count");
|
|
170
|
+
|
|
171
|
+
return (
|
|
172
|
+
<div>
|
|
173
|
+
<p>
|
|
174
|
+
{
|
|
175
|
+
numberOfCar(0) // Вивід: Немає автомобілів
|
|
176
|
+
}
|
|
177
|
+
</p>
|
|
178
|
+
<p>
|
|
179
|
+
{
|
|
180
|
+
numberOfCar(6) // Вивід: Кілька автомобілів
|
|
181
|
+
}
|
|
182
|
+
</p>
|
|
183
|
+
<p>
|
|
184
|
+
{
|
|
185
|
+
numberOfCar(20) // Вивід: Багато автомобілів
|
|
186
|
+
}
|
|
187
|
+
</p>
|
|
188
|
+
<p>
|
|
189
|
+
{
|
|
190
|
+
numberOfCar(0.01) // Вивід: Резервне значення
|
|
191
|
+
}
|
|
192
|
+
</p>
|
|
193
|
+
</div>
|
|
194
|
+
);
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
export default CarComponent;
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
```javascript fileName="**/*.cjs" codeFormat="commonjs"
|
|
201
|
+
const { useIntlayer } = require("react-intlayer");
|
|
202
|
+
|
|
203
|
+
const CarComponent = () => {
|
|
204
|
+
const { numberOfCar } = useIntlayer("car_count");
|
|
205
|
+
|
|
206
|
+
return (
|
|
207
|
+
<div>
|
|
208
|
+
<p>
|
|
209
|
+
{
|
|
210
|
+
numberOfCar(0) // Вивід: Немає автомобілів
|
|
211
|
+
}
|
|
212
|
+
</p>
|
|
213
|
+
<p>
|
|
214
|
+
{
|
|
215
|
+
numberOfCar(6) // Вивід: Декілька автомобілів
|
|
216
|
+
}
|
|
217
|
+
</p>
|
|
218
|
+
<p>
|
|
219
|
+
{
|
|
220
|
+
numberOfCar(20) // Вивід: Багато автомобілів
|
|
221
|
+
}
|
|
222
|
+
</p>
|
|
223
|
+
<p>
|
|
224
|
+
{
|
|
225
|
+
numberOfCar(0.01) // Вивід: Значення за замовчуванням
|
|
226
|
+
}
|
|
227
|
+
</p>
|
|
228
|
+
</div>
|
|
229
|
+
);
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
module.exports = CarComponent;
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
У цьому прикладі компонент динамічно підлаштовує свій вивід залежно від кількості автомобілів. Правильний вміст вибирається автоматично залежно від заданого діапазону.
|
|
236
|
+
|
|
237
|
+
## Додаткові ресурси
|
|
238
|
+
|
|
239
|
+
Для детальнішої інформації про налаштування та використання зверніться до наступних ресурсів:
|
|
240
|
+
|
|
241
|
+
- [Документація Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/index.md)
|
|
242
|
+
- [Документація Intlayer для React](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_create_react_app.md)
|
|
243
|
+
- [Документація Intlayer для Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_nextjs_15.md)
|
|
244
|
+
|
|
245
|
+
Ці ресурси надають додаткову інформацію про налаштування та використання Intlayer в різних середовищах і з різними фреймворками.
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-03-13
|
|
3
|
+
updatedAt: 2025-06-29
|
|
4
|
+
title: Файл
|
|
5
|
+
description: Дізнайтеся, як вбудовувати зовнішні файли у ваш content dictionary за допомогою функції `file`. Ця документація пояснює, як Intlayer пов’язує та динамічно керує вмістом файлів.
|
|
6
|
+
keywords:
|
|
7
|
+
- Файл
|
|
8
|
+
- Інтернаціоналізація
|
|
9
|
+
- Документація
|
|
10
|
+
- Intlayer
|
|
11
|
+
- Next.js
|
|
12
|
+
- JavaScript
|
|
13
|
+
- React
|
|
14
|
+
slugs:
|
|
15
|
+
- doc
|
|
16
|
+
- concept
|
|
17
|
+
- content
|
|
18
|
+
- file
|
|
19
|
+
history:
|
|
20
|
+
- version: 5.5.10
|
|
21
|
+
date: 2025-06-29
|
|
22
|
+
changes: Init history
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Вміст файлу / Вбудовування файлів в Intlayer
|
|
26
|
+
|
|
27
|
+
В Intlayer функція `file` дозволяє вбудовувати вміст зовнішніх файлів у dictionary. Такий підхід гарантує, що Intlayer розпізнає файл-джерело, що забезпечує плавну інтеграцію з Intlayer Visual Editor та CMS.
|
|
28
|
+
|
|
29
|
+
## Чому використовувати `file` замість `import`, `require` або `fs`?
|
|
30
|
+
|
|
31
|
+
На відміну від методів читання файлів `import`, `require` або `fs`, використання `file` пов’язує файл зі словником, що дозволяє Intlayer відстежувати та оновлювати вміст динамічно під час редагування файлу. Внаслідок цього використання `file` забезпечує кращу інтеграцію з Intlayer Visual Editor та CMS.
|
|
32
|
+
|
|
33
|
+
## Налаштування вмісту файлу
|
|
34
|
+
|
|
35
|
+
Щоб вбудувати вміст файлу у ваш проект Intlayer, використовуйте функцію `file` у модулі контенту. Нижче наведені приклади, що демонструють різні реалізації.
|
|
36
|
+
|
|
37
|
+
```typescript fileName="**/*.content.ts" contentDeclarationFormat="typescript"
|
|
38
|
+
import { file, type Dictionary } from "intlayer";
|
|
39
|
+
|
|
40
|
+
const myFileContent = {
|
|
41
|
+
key: "my_key",
|
|
42
|
+
content: {
|
|
43
|
+
myFile: file("./path/to/file.txt"),
|
|
44
|
+
},
|
|
45
|
+
} satisfies Dictionary;
|
|
46
|
+
|
|
47
|
+
export default myFileContent;
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
```javascript fileName="**/*.content.mjs" contentDeclarationFormat="esm"
|
|
51
|
+
import { file } from "intlayer";
|
|
52
|
+
|
|
53
|
+
/** @type {import('intlayer').Dictionary} */
|
|
54
|
+
const myFileContent = {
|
|
55
|
+
key: "my_key",
|
|
56
|
+
content: {
|
|
57
|
+
myFile: file("./path/to/file.txt"),
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export default myFileContent;
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```javascript fileName="**/*.content.cjs" contentDeclarationFormat="commonjs"
|
|
65
|
+
const { file } = require("intlayer");
|
|
66
|
+
|
|
67
|
+
/** @type {import('intlayer').Dictionary} */
|
|
68
|
+
const myFileContent = {
|
|
69
|
+
key: "my_key",
|
|
70
|
+
content: {
|
|
71
|
+
myFile: file("./path/to/file.txt"),
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
module.exports = myFileContent;
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```json5 fileName="**/*.content.json" contentDeclarationFormat="json"
|
|
79
|
+
{
|
|
80
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
81
|
+
"key": "my_key",
|
|
82
|
+
"content": {
|
|
83
|
+
"myFile": {
|
|
84
|
+
"nodeType": "file",
|
|
85
|
+
"value": "./path/to/file.txt",
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Використання вмісту файлу в React Intlayer
|
|
92
|
+
|
|
93
|
+
Щоб використовувати вбудований вміст файлу в React-компоненті, імпортуйте і використовуйте хук `useIntlayer` з пакета `react-intlayer`. Це отримує вміст за вказаним ключем і дозволяє відображати його динамічно.
|
|
94
|
+
|
|
95
|
+
```tsx fileName="**/*.tsx" codeFormat="typescript"
|
|
96
|
+
import type { FC } from "react";
|
|
97
|
+
import { useIntlayer } from "react-intlayer";
|
|
98
|
+
|
|
99
|
+
const FileComponent: FC = () => {
|
|
100
|
+
const { myFile } = useIntlayer("my_key");
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<div>
|
|
104
|
+
<pre>{myFile}</pre>
|
|
105
|
+
</div>
|
|
106
|
+
);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export default FileComponent;
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
```javascript fileName="**/*.mjx" codeFormat="esm"
|
|
113
|
+
import { useIntlayer } from "react-intlayer";
|
|
114
|
+
|
|
115
|
+
const FileComponent = () => {
|
|
116
|
+
const { myFile } = useIntlayer("my_key");
|
|
117
|
+
|
|
118
|
+
return (
|
|
119
|
+
<div>
|
|
120
|
+
<pre>{myFile}</pre>
|
|
121
|
+
</div>
|
|
122
|
+
);
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export default FileComponent;
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
```javascript fileName="**/*.cjs" codeFormat="commonjs"
|
|
129
|
+
const { useIntlayer } = require("react-intlayer");
|
|
130
|
+
|
|
131
|
+
const FileComponent = () => {
|
|
132
|
+
const { myFile } = useIntlayer("my_key");
|
|
133
|
+
|
|
134
|
+
return (
|
|
135
|
+
<div>
|
|
136
|
+
<pre>{myFile}</pre>
|
|
137
|
+
</div>
|
|
138
|
+
);
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
module.exports = FileComponent;
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Приклад багатомовного Markdown
|
|
145
|
+
|
|
146
|
+
Щоб підтримувати багатомовні редаговані Markdown-файли, ви можете використовувати `file` у поєднанні з `t()` та `md()` для визначення версій вмісту Markdown різними мовами.
|
|
147
|
+
|
|
148
|
+
```typescript fileName="**/*.content.ts" contentDeclarationFormat="typescript"
|
|
149
|
+
import { file, t, md, type Dictionary } from "intlayer";
|
|
150
|
+
|
|
151
|
+
const myMultilingualContent = {
|
|
152
|
+
key: "my_multilingual_key",
|
|
153
|
+
content: {
|
|
154
|
+
myContent: md(
|
|
155
|
+
t({
|
|
156
|
+
en: file("src/components/test.en.md"),
|
|
157
|
+
fr: file("src/components/test.fr.md"),
|
|
158
|
+
es: file("src/components/test.es.md"),
|
|
159
|
+
})
|
|
160
|
+
),
|
|
161
|
+
},
|
|
162
|
+
} satisfies Dictionary;
|
|
163
|
+
|
|
164
|
+
export default myMultilingualContent;
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
```javascript fileName="**/*.content.mjs" contentDeclarationFormat="esm"
|
|
168
|
+
import { file, t, md } from "intlayer";
|
|
169
|
+
|
|
170
|
+
/** @type {import('intlayer').Dictionary} */
|
|
171
|
+
const myMultilingualContent = {
|
|
172
|
+
key: "my_multilingual_key",
|
|
173
|
+
content: {
|
|
174
|
+
myContent: md(
|
|
175
|
+
t({
|
|
176
|
+
en: file("src/components/test.en.md"),
|
|
177
|
+
fr: file("src/components/test.fr.md"),
|
|
178
|
+
es: file("src/components/test.es.md"),
|
|
179
|
+
})
|
|
180
|
+
),
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
export default myMultilingualContent;
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
```javascript fileName="**/*.content.cjs" contentDeclarationFormat="commonjs"
|
|
188
|
+
const { file, t, md } = require("intlayer");
|
|
189
|
+
|
|
190
|
+
const myMultilingualContent = {
|
|
191
|
+
key: "my_multilingual_key",
|
|
192
|
+
content: {
|
|
193
|
+
myContent: md(
|
|
194
|
+
t({
|
|
195
|
+
en: file("src/components/test.en.md"),
|
|
196
|
+
fr: file("src/components/test.fr.md"),
|
|
197
|
+
es: file("src/components/test.es.md"),
|
|
198
|
+
})
|
|
199
|
+
),
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Ця конфігурація дозволяє динамічно отримувати вміст залежно від мовних налаштувань користувача. При використанні в Intlayer Visual Editor або CMS система розпізнає, що вміст походить із зазначених Markdown-файлів, і забезпечить їхню можливість редагування.
|
|
205
|
+
|
|
206
|
+
## Різні типи шляхів
|
|
207
|
+
|
|
208
|
+
Коли ви використовуєте функцію `file`, можна застосовувати різні типи шляхів, щоб вказати файл для вставки.
|
|
209
|
+
|
|
210
|
+
- `file("./path/to/file.txt")` - Відносний шлях відносно поточного файлу
|
|
211
|
+
- `file("path/to/file.txt")` - Відносний шлях відносно кореневої директорії проєкту
|
|
212
|
+
- `file("/users/username/path/to/file.txt")` - Абсолютний шлях
|
|
213
|
+
|
|
214
|
+
## Як Intlayer обробляє вміст файлу
|
|
215
|
+
|
|
216
|
+
Функція `file` базується на модулі `fs` у Node.js для читання вмісту вказаного файлу та вставлення його до словника. У поєднанні з Intlayer Visual Editor або CMS Intlayer може відстежувати зв’язок між словником і файлом. Це дозволяє Intlayer:
|
|
217
|
+
|
|
218
|
+
- Розпізнавати, що вміст походить із конкретного файлу.
|
|
219
|
+
- Автоматично оновлювати вміст словника при редагуванні пов’язаного файлу.
|
|
220
|
+
- Забезпечте синхронізацію між файлом та словником, зберігаючи цілісність вмісту.
|
|
221
|
+
|
|
222
|
+
## Додаткові ресурси
|
|
223
|
+
|
|
224
|
+
Для детальнішої інформації щодо налаштування та використання вставки файлів в Intlayer зверніться до наступних ресурсів:
|
|
225
|
+
|
|
226
|
+
- [Документація Intlayer CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/index.md)
|
|
227
|
+
- [Документація Intlayer для React](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_create_react_app.md)
|
|
228
|
+
- [Документація Intlayer для Next.js](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_with_nextjs_15.md)
|
|
229
|
+
- [Документація з Markdown-контенту](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/markdown.md)
|
|
230
|
+
- [Документація з перекладу контенту](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/translation.md)
|
|
231
|
+
|
|
232
|
+
Ці ресурси надають додаткові відомості про вбудовування файлів, керування контентом та інтеграцію Intlayer із різними фреймворками.
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-08-23
|
|
3
|
+
updatedAt: 2025-08-23
|
|
4
|
+
title: Отримання через функції
|
|
5
|
+
description: Дізнайтеся, як оголосити та використовувати отримання через функції у вашому мультимовному вебсайті. Дотримуйтесь кроків у цій онлайн-документації, щоб налаштувати проєкт за кілька хвилин.
|
|
6
|
+
keywords:
|
|
7
|
+
- Отримання через функції
|
|
8
|
+
- Інтернаціоналізація
|
|
9
|
+
- Документація
|
|
10
|
+
- Intlayer
|
|
11
|
+
- Next.js
|
|
12
|
+
- JavaScript
|
|
13
|
+
- React
|
|
14
|
+
slugs:
|
|
15
|
+
- doc
|
|
16
|
+
- concept
|
|
17
|
+
- content
|
|
18
|
+
- function-fetching
|
|
19
|
+
history:
|
|
20
|
+
- version: 5.5.10
|
|
21
|
+
date: 2025-06-29
|
|
22
|
+
changes: Ініціалізація історії
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Отримання через функції
|
|
26
|
+
|
|
27
|
+
Intlayer дозволяє вам оголошувати функції контенту в ваших контент-модулях, які можуть бути синхронними або асинхронними. Під час збірки застосунку Intlayer виконує ці функції, щоб отримати результат функції. Значення, що повертається, має бути JSON-об'єктом або простим значенням, таким як рядок або число.
|
|
28
|
+
|
|
29
|
+
> Увага: функціональне отримання контенту наразі недоступне в JSON-оголошеннях контенту та у віддалених деклараційних файлах контенту.
|
|
30
|
+
|
|
31
|
+
## Оголошення функцій
|
|
32
|
+
|
|
33
|
+
Ось приклад простого синхронного отримання контенту за допомогою функції:
|
|
34
|
+
|
|
35
|
+
```typescript fileName="**/*.content.ts" contentDeclarationFormat="typescript"
|
|
36
|
+
import type { Dictionary } from "intlayer";
|
|
37
|
+
|
|
38
|
+
const functionContent = {
|
|
39
|
+
key: "function_content",
|
|
40
|
+
content: {
|
|
41
|
+
text: () => "Це контент, який повертається функцією",
|
|
42
|
+
},
|
|
43
|
+
} satisfies Dictionary;
|
|
44
|
+
|
|
45
|
+
export default functionContent;
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```javascript fileName="**/*.content.mjs" contentDeclarationFormat="esm"
|
|
49
|
+
/** @type {import('intlayer').Dictionary} */
|
|
50
|
+
const functionContent = {
|
|
51
|
+
key: "function_content",
|
|
52
|
+
content: {
|
|
53
|
+
text: () => "Це вміст, відрендерований функцією",
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export default functionContent;
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```javascript fileName="**/*.content.cjs" contentDeclarationFormat="commonjs"
|
|
61
|
+
/** @type {import('intlayer').Dictionary} */
|
|
62
|
+
const functionContent = {
|
|
63
|
+
key: "function_content",
|
|
64
|
+
content: {
|
|
65
|
+
text: () => "Це вміст, відрендерований функцією",
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
module.exports = functionContent;
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
```json fileName="**/*.content.json" contentDeclarationFormat="json"
|
|
73
|
+
{
|
|
74
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
75
|
+
"key": "function_content",
|
|
76
|
+
"content": {
|
|
77
|
+
"text": "Це вміст, відрендерений функцією"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
У цьому прикладі ключ `text` містить функцію, яка повертає рядок. Цей контент можна відобразити у ваших React-компонентах за допомогою пакетів інтерпретатора Intlayer, таких як `react-intlayer`.
|
|
83
|
+
|
|
84
|
+
## Асинхронне отримання даних функцією
|
|
85
|
+
|
|
86
|
+
На додаток до синхронних функцій, Intlayer також підтримує асинхронні функції, що дозволяє отримувати дані з зовнішніх джерел або імітувати отримання даних за допомогою мок-даних.
|
|
87
|
+
|
|
88
|
+
Нижче наведений приклад асинхронної функції, яка імітує звернення до сервера:
|
|
89
|
+
|
|
90
|
+
```typescript fileName="**/*.content.ts" contentDeclarationFormat="typescript"
|
|
91
|
+
import { setTimeout } from "node:timers/promises";
|
|
92
|
+
import type { Dictionary } from "intlayer";
|
|
93
|
+
|
|
94
|
+
const fakeFetch = async (): Promise<string> => {
|
|
95
|
+
// Почекайте 200 мс, щоб симулювати запит до сервера
|
|
96
|
+
return await setTimeout(200).then(() => "Це вміст, отриманий із сервера");
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const asyncFunctionContent = {
|
|
100
|
+
key: "async_function",
|
|
101
|
+
content: { text: fakeFetch },
|
|
102
|
+
} satisfies Dictionary;
|
|
103
|
+
|
|
104
|
+
export default asyncFunctionContent;
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
```javascript fileName="**/*.content.mjs" contentDeclarationFormat="esm"
|
|
108
|
+
import { setTimeout } from "node:timers/promises";
|
|
109
|
+
|
|
110
|
+
/** @type {import('intlayer').Dictionary} */
|
|
111
|
+
const fakeFetch = async () => {
|
|
112
|
+
// Почекайте 200 мс, щоб симулювати запит до сервера
|
|
113
|
+
await setTimeout(200);
|
|
114
|
+
return "Це вміст, отриманий із сервера";
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const asyncFunctionContent = {
|
|
118
|
+
key: "async_function",
|
|
119
|
+
content: { text: fakeFetch },
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export default asyncFunctionContent;
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```javascript fileName="**/*.content.cjs" contentDeclarationFormat="commonjs"
|
|
126
|
+
const { setTimeout } = require("node:timers/promises");
|
|
127
|
+
|
|
128
|
+
/** @type {import('intlayer').Dictionary} */
|
|
129
|
+
const fakeFetch = async () => {
|
|
130
|
+
// Почекайте 200 мс, щоб змоделювати запит до сервера
|
|
131
|
+
await setTimeout(200);
|
|
132
|
+
return "Це вміст, отриманий із сервера";
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
const asyncFunctionContent = {
|
|
136
|
+
key: "async_function",
|
|
137
|
+
content: { text: fakeFetch },
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
module.exports = asyncFunctionContent;
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
```plaintext fileName="**/*.content.json" contentDeclarationFormat="json"
|
|
144
|
+
Неможливо отримати вміст із JSON-файлу, використовуйте натомість .ts або .js файл
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
У цьому випадку функція `fakeFetch` імітує затримку, щоб симулювати час відповіді сервера. Intlayer виконує асинхронну функцію і використовує результат як вміст для ключа `text`.
|
|
148
|
+
|
|
149
|
+
## Використання контенту на основі функцій у React-компонентах
|
|
150
|
+
|
|
151
|
+
Щоб використовувати контент на основі функцій у React-компоненті, потрібно імпортувати `useIntlayer` з `react-intlayer` і викликати його з ідентифікатором контенту, щоб отримати вміст. Ось приклад:
|
|
152
|
+
|
|
153
|
+
```typescript fileName="**/*.jsx" codeFormat="typescript"
|
|
154
|
+
import type { FC } from "react";
|
|
155
|
+
import { useIntlayer } from "react-intlayer";
|
|
156
|
+
|
|
157
|
+
const MyComponent: FC = () => {
|
|
158
|
+
const functionContent = useIntlayer("function_content");
|
|
159
|
+
const asyncFunctionContent = useIntlayer("async_function_content");
|
|
160
|
+
|
|
161
|
+
return (
|
|
162
|
+
<div>
|
|
163
|
+
<p>{functionContent.text}</p>
|
|
164
|
+
{/* Вивід: Це вміст, відрендерений функцією */}
|
|
165
|
+
<p>{asyncFunctionContent.text}</p>
|
|
166
|
+
{/* Вивід: Це вміст, отриманий із сервера */}
|
|
167
|
+
</div>
|
|
168
|
+
);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
export default MyComponent;
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
```javascript fileName="**/*.mjx" codeFormat="esm"
|
|
175
|
+
import { useIntlayer } from "react-intlayer";
|
|
176
|
+
|
|
177
|
+
const MyComponent = () => {
|
|
178
|
+
const functionContent = useIntlayer("function_content");
|
|
179
|
+
const asyncFunctionContent = useIntlayer("async_function_content");
|
|
180
|
+
|
|
181
|
+
return (
|
|
182
|
+
<div>
|
|
183
|
+
<p>{functionContent.text}</p>
|
|
184
|
+
{/* Вивід: Це вміст, відрендерений функцією */}
|
|
185
|
+
<p>{asyncFunctionContent.text}</p>
|
|
186
|
+
{/* Вивід: Це вміст, отриманий із сервера */}
|
|
187
|
+
</div>
|
|
188
|
+
);
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
export default MyComponent;
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
```javascript fileName="**/*.cjs" codeFormat="commonjs"
|
|
195
|
+
const { useIntlayer } = require("react-intlayer");
|
|
196
|
+
|
|
197
|
+
const MyComponent = () => {
|
|
198
|
+
const functionContent = useIntlayer("function_content");
|
|
199
|
+
const asyncFunctionContent = useIntlayer("async_function_content");
|
|
200
|
+
|
|
201
|
+
return (
|
|
202
|
+
<div>
|
|
203
|
+
<p>{functionContent.text}</p>
|
|
204
|
+
{/* Вивід: Це вміст, відрендерений функцією */}
|
|
205
|
+
<p>{asyncFunctionContent.text}</p>
|
|
206
|
+
{/* Вивід: Це вміст, отриманий з сервера */}
|
|
207
|
+
</div>
|
|
208
|
+
);
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
module.exports = MyComponent;
|
|
212
|
+
```
|