@intlayer/docs 7.5.12 → 7.5.13
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/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/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/dist/cjs/generated/frequentQuestions.entry.cjs +20 -0
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +20 -0
- package/dist/esm/generated/frequentQuestions.entry.mjs.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 +6 -6
- package/src/generated/frequentQuestions.entry.ts +20 -0
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-12-30
|
|
3
|
+
updatedAt: 2025-12-30
|
|
4
|
+
title: Як перекласти ваш Fastify-бекенд – посібник з i18n 2026
|
|
5
|
+
description: Дізнайтеся, як зробити ваш Fastify-бекенд багатомовним. Дотримуйтеся документації, щоб інтернаціоналізувати (i18n) та перекласти його.
|
|
6
|
+
keywords:
|
|
7
|
+
- Інтернаціоналізація
|
|
8
|
+
- Документація
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Fastify
|
|
11
|
+
- JavaScript
|
|
12
|
+
- Бекенд
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- environment
|
|
16
|
+
- fastify
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-fastify-template
|
|
18
|
+
history:
|
|
19
|
+
- version: 7.6.0
|
|
20
|
+
date: 2025-12-31
|
|
21
|
+
changes: Додано команду init
|
|
22
|
+
- version: 7.6.0
|
|
23
|
+
date: 2025-12-31
|
|
24
|
+
changes: Ініціалізовано історію
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Переклад вашого Fastify-бекенду за допомогою Intlayer | Інтернаціоналізація (i18n)
|
|
28
|
+
|
|
29
|
+
`fastify-intlayer` — потужний плагін для інтернаціоналізації (i18n) для додатків на Fastify, призначений зробити ваші бекенд-сервіси доступними глобально, надаючи локалізовані відповіді на основі налаштувань клієнта.
|
|
30
|
+
|
|
31
|
+
### Практичні сценарії використання
|
|
32
|
+
|
|
33
|
+
- **Відображення помилок бекенда мовою користувача**: коли виникає помилка, відображення повідомлень рідною мовою користувача покращує розуміння і зменшує фрустрацію. Це особливо корисно для динамічних повідомлень про помилки, які можуть показуватися у фронтенд-компонентах, таких як тости або модальні вікна.
|
|
34
|
+
- **Отримання багатомовного контенту**: Для застосунків, що отримують контент із бази даних, інтернаціоналізація забезпечує можливість надавати цей контент кількома мовами. Це критично важливо для платформ, таких як e-commerce сайти або системи управління контентом (CMS), які повинні відображати описи товарів, статті та інший контент мовою, якою віддає перевагу користувач.
|
|
35
|
+
- **Надсилання багатомовних електронних листів**: Чи то транзакційні листи, маркетингові кампанії або сповіщення — надсилання електронних листів мовою отримувача може значно підвищити залученість і ефективність.
|
|
36
|
+
- **Багатомовні push-повідомлення**: Для мобільних додатків надсилання push-повідомлень мовою, якою віддає перевагу користувач, може підвищувати взаємодію та утримання. Такий персональний підхід робить повідомлення більш релевантними та спонукає до дії.
|
|
37
|
+
- **Інші комунікації**: Будь-яка форма комунікації з боку бекенду, наприклад SMS-повідомлення, системні сповіщення або оновлення інтерфейсу, виграє від використання мови користувача, що забезпечує зрозумілість і покращує загальний досвід користувача.
|
|
38
|
+
|
|
39
|
+
Інтернаціоналізація бекенду дозволяє вашому застосунку не лише поважати культурні відмінності, а й краще відповідати потребам глобальних ринків, роблячи це ключовим кроком для масштабування сервісів у всьому світі.
|
|
40
|
+
|
|
41
|
+
## Початок роботи
|
|
42
|
+
|
|
43
|
+
### Встановлення
|
|
44
|
+
|
|
45
|
+
Щоб почати використовувати `fastify-intlayer`, встановіть пакет через npm:
|
|
46
|
+
|
|
47
|
+
```bash packageManager="npm"
|
|
48
|
+
npm install intlayer fastify-intlayer
|
|
49
|
+
npx intlayer init
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```bash packageManager="pnpm"
|
|
54
|
+
pnpm add intlayer fastify-intlayer
|
|
55
|
+
pnpm intlayer init
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```bash packageManager="yarn"
|
|
60
|
+
yarn add intlayer fastify-intlayer
|
|
61
|
+
yarn intlayer init
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```bash packageManager="bun"
|
|
66
|
+
bun add intlayer fastify-intlayer
|
|
67
|
+
bunx intlayer init
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Налаштування
|
|
72
|
+
|
|
73
|
+
Налаштуйте параметри інтернаціоналізації, створивши файл `intlayer.config.ts` у корені вашого проєкту:
|
|
74
|
+
|
|
75
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
76
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
77
|
+
|
|
78
|
+
const config: IntlayerConfig = {
|
|
79
|
+
internationalization: {
|
|
80
|
+
locales: [
|
|
81
|
+
Locales.ENGLISH,
|
|
82
|
+
Locales.FRENCH,
|
|
83
|
+
Locales.SPANISH_MEXICO,
|
|
84
|
+
Locales.SPANISH_SPAIN,
|
|
85
|
+
],
|
|
86
|
+
defaultLocale: Locales.ENGLISH,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export default config;
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
94
|
+
import { Locales } from "intlayer";
|
|
95
|
+
|
|
96
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
97
|
+
const config = {
|
|
98
|
+
internationalization: {
|
|
99
|
+
locales: [
|
|
100
|
+
Locales.ENGLISH,
|
|
101
|
+
Locales.FRENCH,
|
|
102
|
+
Locales.SPANISH_MEXICO,
|
|
103
|
+
Locales.SPANISH_SPAIN,
|
|
104
|
+
],
|
|
105
|
+
defaultLocale: Locales.ENGLISH,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export default config;
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
113
|
+
const { Locales } = require("intlayer");
|
|
114
|
+
|
|
115
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
116
|
+
const config = {
|
|
117
|
+
internationalization: {
|
|
118
|
+
locales: [
|
|
119
|
+
Locales.ENGLISH,
|
|
120
|
+
Locales.FRENCH,
|
|
121
|
+
Locales.SPANISH_MEXICO,
|
|
122
|
+
Locales.SPANISH_SPAIN,
|
|
123
|
+
],
|
|
124
|
+
defaultLocale: Locales.ENGLISH,
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
module.exports = config;
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Оголосіть свій контент
|
|
132
|
+
|
|
133
|
+
Створюйте та керуйте оголошеннями контенту для збереження перекладів:
|
|
134
|
+
|
|
135
|
+
```typescript fileName="src/index.content.ts" contentDeclarationFormat="typescript"
|
|
136
|
+
import { t, type Dictionary } from "intlayer";
|
|
137
|
+
|
|
138
|
+
const indexContent = {
|
|
139
|
+
key: "index",
|
|
140
|
+
content: {
|
|
141
|
+
exampleOfContent: t({
|
|
142
|
+
uk: "Приклад поверненого вмісту українською",
|
|
143
|
+
en: "Example of returned content in English",
|
|
144
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
145
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
146
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
147
|
+
}),
|
|
148
|
+
},
|
|
149
|
+
} satisfies Dictionary;
|
|
150
|
+
|
|
151
|
+
export default indexContent;
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
```javascript fileName="src/index.content.mjs" contentDeclarationFormat="esm"
|
|
155
|
+
import { t } from "intlayer";
|
|
156
|
+
|
|
157
|
+
/** @type {import('intlayer').Dictionary} */
|
|
158
|
+
const indexContent = {
|
|
159
|
+
key: "index",
|
|
160
|
+
content: {
|
|
161
|
+
exampleOfContent: t({
|
|
162
|
+
uk: "Приклад поверненого вмісту українською мовою",
|
|
163
|
+
en: "Example of returned content in English",
|
|
164
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
165
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
166
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
167
|
+
}),
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
export default indexContent;
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
```javascript fileName="src/index.content.cjs" contentDeclarationFormat="commonjs"
|
|
175
|
+
const { t } = require("intlayer");
|
|
176
|
+
|
|
177
|
+
/** @type {import('intlayer').Dictionary} */
|
|
178
|
+
const indexContent = {
|
|
179
|
+
key: "index",
|
|
180
|
+
content: {
|
|
181
|
+
exampleOfContent: t({
|
|
182
|
+
uk: "Приклад поверненого вмісту українською мовою",
|
|
183
|
+
en: "Example of returned content in English",
|
|
184
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
185
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
186
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
187
|
+
}),
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
module.exports = indexContent;
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
```json fileName="src/index.content.json" contentDeclarationFormat="json"
|
|
195
|
+
{
|
|
196
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
197
|
+
"key": "index",
|
|
198
|
+
"content": {
|
|
199
|
+
"exampleOfContent": {
|
|
200
|
+
"nodeType": "translation",
|
|
201
|
+
"translation": {
|
|
202
|
+
"uk": "Приклад поверненого вмісту англійською мовою",
|
|
203
|
+
"en": "Example of returned content in English",
|
|
204
|
+
"fr": "Exemple de contenu renvoyé en français",
|
|
205
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
206
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)"
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
> Ваші декларації контенту можуть бути визначені будь-де у вашому застосунку, доки вони включені в директорію `contentDir` (за замовчуванням `./src`). І відповідають розширенню файлу декларації контенту (за замовчуванням `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
214
|
+
|
|
215
|
+
> Для детальнішої інформації зверніться до [документації з декларації контенту](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/content_file.md).
|
|
216
|
+
|
|
217
|
+
### Налаштування застосунку Fastify
|
|
218
|
+
|
|
219
|
+
Налаштуйте ваш застосунок Fastify для використання `fastify-intlayer`:
|
|
220
|
+
|
|
221
|
+
```typescript fileName="src/index.ts" codeFormat="typescript"
|
|
222
|
+
import Fastify from "fastify";
|
|
223
|
+
import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
|
|
224
|
+
import dictionaryExample from "./index.content";
|
|
225
|
+
|
|
226
|
+
const fastify = Fastify({ logger: true });
|
|
227
|
+
|
|
228
|
+
// Завантажити плагін інтернаціоналізації
|
|
229
|
+
await fastify.register(intlayer);
|
|
230
|
+
|
|
231
|
+
// Маршрути
|
|
232
|
+
fastify.get("/t_example", async (_req, reply) => {
|
|
233
|
+
return t({
|
|
234
|
+
uk: "Приклад повернутого вмісту українською мовою",
|
|
235
|
+
en: "Example of returned content in English",
|
|
236
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
237
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
238
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
fastify.get("/getIntlayer_example", async (_req, reply) => {
|
|
243
|
+
return getIntlayer("index").exampleOfContent;
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
fastify.get("/getDictionary_example", async (_req, reply) => {
|
|
247
|
+
return getDictionary(dictionaryExample).exampleOfContent;
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
// Запустити сервер
|
|
251
|
+
const start = async () => {
|
|
252
|
+
try {
|
|
253
|
+
await fastify.listen({ port: 3000 });
|
|
254
|
+
} catch (err) {
|
|
255
|
+
fastify.log.error(err);
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
start();
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
```javascript fileName="src/index.mjs" codeFormat="esm"
|
|
264
|
+
import Fastify from "fastify";
|
|
265
|
+
import { intlayer, t, getDictionary, getIntlayer } from "fastify-intlayer";
|
|
266
|
+
import dictionaryExample from "./index.content";
|
|
267
|
+
|
|
268
|
+
const fastify = Fastify({ logger: true });
|
|
269
|
+
|
|
270
|
+
// Завантажити плагін інтернаціоналізації
|
|
271
|
+
await fastify.register(intlayer);
|
|
272
|
+
|
|
273
|
+
// Маршрути
|
|
274
|
+
fastify.get("/t_example", async (_req, reply) => {
|
|
275
|
+
return t({
|
|
276
|
+
uk: "Приклад поверненого вмісту українською",
|
|
277
|
+
en: "Example of returned content in English",
|
|
278
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
279
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
280
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
fastify.get("/getIntlayer_example", async (_req, reply) => {
|
|
285
|
+
return getIntlayer("index").exampleOfContent;
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
fastify.get("/getDictionary_example", async (_req, reply) => {
|
|
289
|
+
return getDictionary(dictionaryExample).exampleOfContent;
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
// Запуск сервера
|
|
293
|
+
const start = async () => {
|
|
294
|
+
try {
|
|
295
|
+
await fastify.listen({ port: 3000 });
|
|
296
|
+
} catch (err) {
|
|
297
|
+
fastify.log.error(err);
|
|
298
|
+
process.exit(1);
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
start();
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
```javascript fileName="src/index.cjs" codeFormat="commonjs"
|
|
306
|
+
const Fastify = require("fastify");
|
|
307
|
+
const { intlayer, t, getDictionary, getIntlayer } = require("fastify-intlayer");
|
|
308
|
+
const dictionaryExample = require("./index.content");
|
|
309
|
+
|
|
310
|
+
const fastify = Fastify({ logger: true });
|
|
311
|
+
|
|
312
|
+
// Обгортка запуску сервера для async/await
|
|
313
|
+
const start = async () => {
|
|
314
|
+
try {
|
|
315
|
+
// Завантажити плагін інтернаціоналізації
|
|
316
|
+
await fastify.register(intlayer);
|
|
317
|
+
|
|
318
|
+
// Маршрути
|
|
319
|
+
fastify.get("/t_example", async (_req, reply) => {
|
|
320
|
+
return t({
|
|
321
|
+
uk: "Приклад поверненого вмісту українською мовою",
|
|
322
|
+
en: "Example of returned content in English",
|
|
323
|
+
fr: "Exemple de contenu renvoyé en français",
|
|
324
|
+
"es-ES": "Ejemplo de contenido devuelto en español (España)",
|
|
325
|
+
"es-MX": "Ejemplo de contenido devuelto en español (México)",
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
fastify.get("/getIntlayer_example", async (_req, reply) => {
|
|
330
|
+
return getIntlayer("index").exampleOfContent;
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
fastify.get("/getDictionary_example", async (_req, reply) => {
|
|
334
|
+
return getDictionary(dictionaryExample).exampleOfContent;
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
await fastify.listen({ port: 3000 });
|
|
338
|
+
} catch (err) {
|
|
339
|
+
fastify.log.error(err);
|
|
340
|
+
process.exit(1);
|
|
341
|
+
}
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
start();
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Сумісність
|
|
348
|
+
|
|
349
|
+
`fastify-intlayer` повністю сумісний з:
|
|
350
|
+
|
|
351
|
+
- [`react-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/packages/react-intlayer/index.md) для React-додатків
|
|
352
|
+
- [`next-intlayer`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/packages/next-intlayer/index.md) для Next.js-додатків
|
|
353
|
+
- [`vite-intlayer`](<https://www.google.com/search?q=%5Bhttps://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/packages/vite-intlayer/index.md%5D(https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/packages/vite-intlayer/index.md)>) для додатків Vite
|
|
354
|
+
|
|
355
|
+
Він також безшовно працює з будь-яким рішенням для інтернаціоналізації в різних середовищах, включно з браузерами та API-запитами. Ви можете налаштувати middleware для визначення локалі через заголовки або cookie:
|
|
356
|
+
|
|
357
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
358
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
359
|
+
|
|
360
|
+
const config: IntlayerConfig = {
|
|
361
|
+
// ... Other configuration options
|
|
362
|
+
middleware: {
|
|
363
|
+
headerName: "my-locale-header",
|
|
364
|
+
cookieName: "my-locale-cookie",
|
|
365
|
+
},
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
export default config;
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
372
|
+
import { Locales } from "intlayer";
|
|
373
|
+
|
|
374
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
375
|
+
const config = {
|
|
376
|
+
// ... Інші параметри конфігурації
|
|
377
|
+
middleware: {
|
|
378
|
+
headerName: "my-locale-header",
|
|
379
|
+
cookieName: "my-locale-cookie",
|
|
380
|
+
},
|
|
381
|
+
};
|
|
382
|
+
|
|
383
|
+
export default config;
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
387
|
+
const { Locales } = require("intlayer");
|
|
388
|
+
|
|
389
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
390
|
+
const config = {
|
|
391
|
+
// ... Інші параметри конфігурації
|
|
392
|
+
middleware: {
|
|
393
|
+
headerName: "my-locale-header",
|
|
394
|
+
cookieName: "my-locale-cookie",
|
|
395
|
+
},
|
|
396
|
+
};
|
|
397
|
+
|
|
398
|
+
module.exports = config;
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
За замовчуванням `fastify-intlayer` інтерпретує заголовок `Accept-Language`, щоб визначити мову, якою віддає перевагу клієнт.
|
|
402
|
+
|
|
403
|
+
> Для отримання додаткової інформації про конфігурацію та розширені теми відвідайте нашу [документацію](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md).
|
|
404
|
+
|
|
405
|
+
### Налаштування TypeScript
|
|
406
|
+
|
|
407
|
+
`fastify-intlayer` використовує потужні можливості TypeScript для покращення процесу інтернаціоналізації. Статична типізація TypeScript гарантує, що кожен ключ перекладу врахований, зменшуючи ризик відсутніх перекладів та підвищуючи підтримуваність.
|
|
408
|
+
|
|
409
|
+
Переконайтеся, що автозгенеровані типи (за замовчуванням у ./types/intlayer.d.ts) включені у ваш файл tsconfig.json.
|
|
410
|
+
|
|
411
|
+
```json5 fileName="tsconfig.json"
|
|
412
|
+
{
|
|
413
|
+
// ... Ваші існуючі конфігурації TypeScript
|
|
414
|
+
"include": [
|
|
415
|
+
// ... Ваші існуючі конфігурації TypeScript
|
|
416
|
+
".intlayer/**/*.ts", // Включити автозгенеровані типи
|
|
417
|
+
],
|
|
418
|
+
}
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
### Розширення для VS Code
|
|
422
|
+
|
|
423
|
+
Щоб покращити свій досвід розробки з Intlayer, ви можете встановити офіційне розширення **Intlayer VS Code Extension**.
|
|
424
|
+
|
|
425
|
+
[Встановити з VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
426
|
+
|
|
427
|
+
Розширення надає:
|
|
428
|
+
|
|
429
|
+
- **Автодоповнення** для ключів перекладу.
|
|
430
|
+
- **Виявлення помилок у реальному часі** для відсутніх перекладів.
|
|
431
|
+
- **Інлайн-попередні перегляди** перекладеного вмісту.
|
|
432
|
+
- **Швидкі дії** для простого створення та оновлення перекладів.
|
|
433
|
+
|
|
434
|
+
Детальніше про використання розширення див. у [документації Intlayer VS Code Extension](https://intlayer.org/doc/vs-code-extension).
|
|
435
|
+
|
|
436
|
+
### Налаштування Git
|
|
437
|
+
|
|
438
|
+
Рекомендується ігнорувати файли, згенеровані Intlayer. Це дозволить уникнути їх коміту до вашого Git-репозиторію.
|
|
439
|
+
|
|
440
|
+
Для цього ви можете додати такі інструкції до вашого файлу `.gitignore`:
|
|
441
|
+
|
|
442
|
+
```plaintext fileName=".gitignore"
|
|
443
|
+
# Ігнорувати файли, згенеровані Intlayer
|
|
444
|
+
.intlayer
|
|
445
|
+
|
|
446
|
+
```
|