@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,283 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-09-09
|
|
3
|
+
updatedAt: 2025-12-30
|
|
4
|
+
title: Як перекласти ваш бекенд на Nest — посібник з i18n 2026
|
|
5
|
+
description: Дізнайтеся, як зробити ваш бекенд на NestJS багатомовним. Слідуйте документації для інтернаціоналізації (i18n) та перекладу.
|
|
6
|
+
keywords:
|
|
7
|
+
- Інтернаціоналізація
|
|
8
|
+
- Документація
|
|
9
|
+
- Intlayer
|
|
10
|
+
- NestJS
|
|
11
|
+
- JavaScript
|
|
12
|
+
- Бекенд
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- environment
|
|
16
|
+
- nest
|
|
17
|
+
applicationTemplate: https://github.com/AydinTheFirst/nestjs-intlayer
|
|
18
|
+
history:
|
|
19
|
+
- version: 7.5.9
|
|
20
|
+
date: 2025-12-30
|
|
21
|
+
changes: Додано команду init
|
|
22
|
+
- version: 5.8.0
|
|
23
|
+
date: 2025-09-09
|
|
24
|
+
changes: Початкова документація
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Перекладіть ваш бекенд на Nest за допомогою Intlayer | Інтернаціоналізація (i18n)
|
|
28
|
+
|
|
29
|
+
`express-intlayer` — це потужний middleware для інтернаціоналізації (i18n) для додатків на Express, призначений зробити ваші бекенд-сервіси доступними у всьому світі, надаючи локалізовані відповіді відповідно до уподобань клієнта. Оскільки NestJS побудований поверх Express, ви можете безшовно інтегрувати `express-intlayer` у свої додатки NestJS для ефективної роботи з багатомовним вмістом.
|
|
30
|
+
|
|
31
|
+
Типові випадки використання
|
|
32
|
+
|
|
33
|
+
- **Відображення помилок бекенду мовою користувача**: Коли виникає помилка, відображення повідомлень рідною мовою користувача покращує розуміння та зменшує фрустрацію. Це особливо корисно для динамічних повідомлень про помилки, які можуть відображатися у front-end компонентах, таких як toasts або modals.
|
|
34
|
+
|
|
35
|
+
- **Отримання багатомовного контенту**: Для застосунків, які дістають контент із бази даних, інтернаціоналізація гарантує можливість надавати цей контент кількома мовами. Це критично важливо для платформ, таких як e-commerce-сайти або системи керування контентом (CMS), яким потрібно відображати описи продуктів, статті та інший контент мовою, яку віддає перевагу користувач.
|
|
36
|
+
|
|
37
|
+
- **Надсилання багатомовних електронних листів**: Чи то транзакційні листи, маркетингові кампанії або сповіщення — надсилання листів мовою отримувача може значно підвищити залученість та ефективність.
|
|
38
|
+
|
|
39
|
+
- **Багатомовні push-повідомлення**: Для мобільних застосунків відправлення push-повідомлень мовою, яку віддає перевагу користувач, може підвищити взаємодію та утримання. Такий персональний підхід робить повідомлення більш релевантними та такими, що спонукають до дії.
|
|
40
|
+
|
|
41
|
+
- **Інші комунікації**: Будь-яка форма комунікації з бекенду, наприклад SMS-повідомлення, системні оповіщення або оновлення інтерфейсу користувача, виграє від того, що надсилається мовою користувача, що забезпечує зрозумілість і покращує загальний досвід користувача.
|
|
42
|
+
|
|
43
|
+
Інтернаціоналізуючи бекенд, ваш застосунок не лише поважає культурні відмінності, а й краще відповідає потребам глобального ринку, що робить це ключовим кроком для масштабування ваших сервісів у світі.
|
|
44
|
+
|
|
45
|
+
## Початок роботи
|
|
46
|
+
|
|
47
|
+
<iframe
|
|
48
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-nestjs-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
49
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
50
|
+
title="Демо CodeSandbox — Як інтернаціоналізувати ваш застосунок за допомогою Intlayer"
|
|
51
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
52
|
+
loading="lazy"
|
|
53
|
+
/>
|
|
54
|
+
|
|
55
|
+
Перегляньте [шаблон застосунку](https://github.com/aymericzip/intlayer-nestjs-template) на GitHub.
|
|
56
|
+
|
|
57
|
+
### Створіть новий проект NestJS
|
|
58
|
+
|
|
59
|
+
```bash packageManager="npm"
|
|
60
|
+
npm install -g @nestjs/cli
|
|
61
|
+
nest new my-nest-app
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Встановлення
|
|
65
|
+
|
|
66
|
+
Щоб почати використовувати `express-intlayer`, встановіть пакет за допомогою npm:
|
|
67
|
+
|
|
68
|
+
```bash packageManager="npm"
|
|
69
|
+
npm install intlayer express-intlayer
|
|
70
|
+
npx intlayer init
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
```bash packageManager="pnpm"
|
|
74
|
+
pnpm add intlayer express-intlayer
|
|
75
|
+
pnpm intlayer init
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```bash packageManager="yarn"
|
|
79
|
+
yarn add intlayer express-intlayer
|
|
80
|
+
yarn intlayer init
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```bash packageManager="bun"
|
|
84
|
+
bun add intlayer express-intlayer
|
|
85
|
+
bunx intlayer init
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Налаштуйте tsconfig.json
|
|
89
|
+
|
|
90
|
+
Щоб використовувати Intlayer з TypeScript, переконайтеся, що ваш `tsconfig.json` налаштовано для підтримки ES-модулів. Це можна зробити, встановивши параметри `module` та `moduleResolution` у `nodenext`.
|
|
91
|
+
|
|
92
|
+
```json5 fileName="tsconfig.json"
|
|
93
|
+
{
|
|
94
|
+
compilerOptions: {
|
|
95
|
+
module: "nodenext",
|
|
96
|
+
moduleResolution: "nodenext",
|
|
97
|
+
// ... інші параметри
|
|
98
|
+
},
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Налаштування
|
|
103
|
+
|
|
104
|
+
Налаштуйте параметри інтернаціоналізації, створивши `intlayer.config.ts` у корені вашого проєкту:
|
|
105
|
+
|
|
106
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
107
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
108
|
+
|
|
109
|
+
const config: IntlayerConfig = {
|
|
110
|
+
internationalization: {
|
|
111
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
112
|
+
defaultLocale: Locales.ENGLISH,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export default config;
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
120
|
+
import { Locales } from "intlayer";
|
|
121
|
+
|
|
122
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
123
|
+
const config = {
|
|
124
|
+
internationalization: {
|
|
125
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
126
|
+
defaultLocale: Locales.ENGLISH,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export default config;
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
134
|
+
const { Locales } = require("intlayer");
|
|
135
|
+
|
|
136
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
137
|
+
const config = {
|
|
138
|
+
internationalization: {
|
|
139
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
|
|
140
|
+
defaultLocale: Locales.ENGLISH,
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
module.exports = config;
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Оголосіть свій контент
|
|
148
|
+
|
|
149
|
+
Створюйте та керуйте деклараціями контенту для збереження перекладів:
|
|
150
|
+
|
|
151
|
+
```typescript fileName="src/app.content.ts" contentDeclarationFormat="typescript"
|
|
152
|
+
import { t, type Dictionary } from "intlayer";
|
|
153
|
+
|
|
154
|
+
const appContent: Dictionary = {
|
|
155
|
+
key: "app",
|
|
156
|
+
content: {
|
|
157
|
+
greet: t({
|
|
158
|
+
uk: "Привіт, світ!",
|
|
159
|
+
en: "Hello World!",
|
|
160
|
+
fr: "Bonjour le monde !",
|
|
161
|
+
es: "¡Hola Mundo!",
|
|
162
|
+
}),
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
export default appContent;
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
> Оголошення вашого вмісту можна розміщувати будь-де у вашому додатку, якщо вони включені в директорію `contentDir` (за замовчуванням `./src`). І відповідають розширенню файлу декларації вмісту (за замовчуванням `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
170
|
+
|
|
171
|
+
> Для отримання додаткових відомостей зверніться до [документації щодо оголошень контенту](/doc/concept/content).
|
|
172
|
+
|
|
173
|
+
### Налаштування middleware для Express
|
|
174
|
+
|
|
175
|
+
Інтегруйте middleware `express-intlayer` у ваш додаток NestJS для обробки інтернаціоналізації:
|
|
176
|
+
|
|
177
|
+
```typescript fileName="src/app.module.ts" codeFormat="typescript"
|
|
178
|
+
import { MiddlewareConsumer, Module, NestModule } from "@nestjs/common";
|
|
179
|
+
import { AppController } from "./app.controller";
|
|
180
|
+
import { AppService } from "./app.service";
|
|
181
|
+
import { intlayer } from "express-intlayer";
|
|
182
|
+
|
|
183
|
+
@Module({
|
|
184
|
+
imports: [],
|
|
185
|
+
controllers: [AppController],
|
|
186
|
+
providers: [AppService],
|
|
187
|
+
})
|
|
188
|
+
export class AppModule implements NestModule {
|
|
189
|
+
configure(consumer: MiddlewareConsumer) {
|
|
190
|
+
consumer.apply(intlayer()).forRoutes("*"); // Застосувати до всіх маршрутів
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Використання перекладів у сервісах або контролерах
|
|
196
|
+
|
|
197
|
+
Тепер ви можете використовувати функцію `getIntlayer` для доступу до перекладів у ваших сервісах або контролерах:
|
|
198
|
+
|
|
199
|
+
```typescript fileName="src/app.service.ts" codeFormat="typescript"
|
|
200
|
+
import { Injectable } from "@nestjs/common";
|
|
201
|
+
import { getIntlayer } from "express-intlayer";
|
|
202
|
+
|
|
203
|
+
@Injectable()
|
|
204
|
+
export class AppService {
|
|
205
|
+
getHello(): string {
|
|
206
|
+
return getIntlayer("app").greet;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Сумісність
|
|
212
|
+
|
|
213
|
+
`express-intlayer` повністю сумісний з:
|
|
214
|
+
|
|
215
|
+
- [`react-intlayer`](/doc/packages/react-intlayer) для React-додатків
|
|
216
|
+
- [`next-intlayer`](/doc/packages/next-intlayer) для Next.js-додатків
|
|
217
|
+
- [`vite-intlayer`](/doc/packages/vite-intlayer) для Vite-додатків
|
|
218
|
+
|
|
219
|
+
Воно також безшовно працює з будь-якими рішеннями для інтернаціоналізації в різних середовищах, включно з браузерами та API-запитами. Ви можете налаштувати middleware для визначення локалі через заголовки (headers) або cookie:
|
|
220
|
+
|
|
221
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
222
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
223
|
+
|
|
224
|
+
const config: IntlayerConfig = {
|
|
225
|
+
// ... Other configuration options
|
|
226
|
+
middleware: {
|
|
227
|
+
headerName: "my-locale-header",
|
|
228
|
+
cookieName: "my-locale-cookie",
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
export default config;
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
За замовчуванням `express-intlayer` буде інтерпретувати заголовок `Accept-Language`, щоб визначити переважну мову клієнта.
|
|
236
|
+
|
|
237
|
+
> Для детальнішої інформації щодо конфігурації та просунутих тем відвідайте нашу [документацію](/doc/concept/configuration).
|
|
238
|
+
|
|
239
|
+
### Налаштування TypeScript
|
|
240
|
+
|
|
241
|
+
`express-intlayer` використовує потужні можливості TypeScript для покращення процесу інтернаціоналізації. Статична типізація TypeScript гарантує, що кожен ключ перекладу врахований, зменшуючи ризик відсутніх перекладів і покращуючи підтримуваність.
|
|
242
|
+
|
|
243
|
+

|
|
244
|
+
|
|
245
|
+

|
|
246
|
+
|
|
247
|
+
Переконайтеся, що автозгенеровані типи (за замовчуванням у ./types/intlayer.d.ts) включені у ваш файл tsconfig.json.
|
|
248
|
+
|
|
249
|
+
```json5 fileName="tsconfig.json"
|
|
250
|
+
{
|
|
251
|
+
// ... Ваші існуючі конфігурації TypeScript
|
|
252
|
+
include: [
|
|
253
|
+
// ... Ваші існуючі конфігурації TypeScript
|
|
254
|
+
".intlayer/**/*.ts", // Включити автогенеровані типи
|
|
255
|
+
],
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Розширення для VS Code
|
|
260
|
+
|
|
261
|
+
Щоб покращити робочий досвід розробки з Intlayer, ви можете встановити офіційне **Intlayer VS Code Extension**.
|
|
262
|
+
|
|
263
|
+
[Встановити з VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
264
|
+
|
|
265
|
+
Це розширення надає:
|
|
266
|
+
|
|
267
|
+
- **Автодоповнення** для ключів перекладу.
|
|
268
|
+
- **Виявлення помилок у реальному часі** для відсутніх перекладів.
|
|
269
|
+
- **Вбудовані попередні перегляди** перекладеного вмісту.
|
|
270
|
+
- **Швидкі дії** для простого створення та оновлення перекладів.
|
|
271
|
+
|
|
272
|
+
Щоб дізнатися більше про використання розширення, зверніться до [документації розширення Intlayer для VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
273
|
+
|
|
274
|
+
### Конфігурація Git
|
|
275
|
+
|
|
276
|
+
Рекомендується ігнорувати файли, згенеровані Intlayer. Це дозволить уникнути їх додавання до вашого репозиторію Git.
|
|
277
|
+
|
|
278
|
+
Для цього ви можете додати такі інструкції у файл `.gitignore`:
|
|
279
|
+
|
|
280
|
+
```plaintext fileName=".gitignore"
|
|
281
|
+
# Ігнорувати файли, згенеровані Intlayer
|
|
282
|
+
.intlayer
|
|
283
|
+
```
|