@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,711 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2025-06-18
|
|
3
|
+
updatedAt: 2025-12-30
|
|
4
|
+
title: Як перекласти ваш додаток Nuxt та Vue — посібник i18n 2026
|
|
5
|
+
description: Дізнайтеся, як зробити ваш вебсайт на Nuxt і Vue багатомовним. Керуйтесь документацією, щоб інтернаціоналізувати (i18n) та перекласти його.
|
|
6
|
+
keywords:
|
|
7
|
+
- Інтернаціоналізація
|
|
8
|
+
- Документація
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Nuxt
|
|
11
|
+
- Vue
|
|
12
|
+
- JavaScript
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- environment
|
|
16
|
+
- nuxt-and-vue
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-nuxt-4-template
|
|
18
|
+
youtubeVideo: https://www.youtube.com/watch?v=nhUcUAVQ6eQ
|
|
19
|
+
history:
|
|
20
|
+
- version: 7.5.9
|
|
21
|
+
date: 2025-12-30
|
|
22
|
+
changes: Додано команду init
|
|
23
|
+
- version: 7.3.13
|
|
24
|
+
date: 2025-12-08
|
|
25
|
+
changes: Непотрібна конфігурація TypeScript
|
|
26
|
+
- version: 7.3.11
|
|
27
|
+
date: 2025-12-07
|
|
28
|
+
changes: Оновлено LocaleSwitcher, SEO, метадані
|
|
29
|
+
- version: 5.5.10
|
|
30
|
+
date: 2025-06-29
|
|
31
|
+
changes: Ініціалізація історії
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
# Перекладіть ваш Nuxt і Vue вебсайт за допомогою Intlayer | Інтернаціоналізація (i18n)
|
|
35
|
+
|
|
36
|
+
## Зміст
|
|
37
|
+
|
|
38
|
+
<TOC/>
|
|
39
|
+
|
|
40
|
+
## Що таке Intlayer?
|
|
41
|
+
|
|
42
|
+
**Intlayer** — інноваційна відкрита бібліотека для інтернаціоналізації (i18n), створена для спрощення підтримки багатомовності в сучасних вебдодатках.
|
|
43
|
+
|
|
44
|
+
За допомогою Intlayer ви можете:
|
|
45
|
+
|
|
46
|
+
- **Легко керувати перекладами** використовуючи декларативні словники на рівні компонентів.
|
|
47
|
+
- **Динамічно локалізувати метадані**, маршрути та контент.
|
|
48
|
+
- **Забезпечити підтримку TypeScript** за допомогою автоматично згенерованих типів, що покращує автозаповнення та виявлення помилок.
|
|
49
|
+
- **Отримати переваги від розширених функцій**, таких як динамічне виявлення локалі та перемикання.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Покроковий посібник налаштування Intlayer у Nuxt-застосунку
|
|
54
|
+
|
|
55
|
+
<Tab defaultTab="video">
|
|
56
|
+
<TabItem label="Відео" value="video">
|
|
57
|
+
|
|
58
|
+
<iframe title="Як перекласти ваш Nuxt і Vue додаток за допомогою Intlayer? Дізнайтеся про Intlayer" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/nhUcUAVQ6eQ?autoplay=0&origin=http://intlayer.org&controls=0&rel=1"/>
|
|
59
|
+
|
|
60
|
+
</TabItem>
|
|
61
|
+
<TabItem label="Код" value="code">
|
|
62
|
+
|
|
63
|
+
<iframe
|
|
64
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-nuxt-4-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
65
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
66
|
+
title="Демо CodeSandbox — як інтернаціоналізувати ваш застосунок за допомогою Intlayer"
|
|
67
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
68
|
+
loading="lazy"
|
|
69
|
+
/>
|
|
70
|
+
|
|
71
|
+
</TabItem>
|
|
72
|
+
</Tab>
|
|
73
|
+
|
|
74
|
+
Перегляньте репозиторій Application Template на GitHub: https://github.com/aymericzip/intlayer-nuxt-4-template
|
|
75
|
+
|
|
76
|
+
### Крок 1: Встановлення залежностей
|
|
77
|
+
|
|
78
|
+
Встановіть необхідні пакети за допомогою відповідного пакетного менеджера:
|
|
79
|
+
|
|
80
|
+
```bash packageManager="npm"
|
|
81
|
+
npm install intlayer vue-intlayer
|
|
82
|
+
npm install --save-dev nuxt-intlayer
|
|
83
|
+
npx intlayer init
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
```bash packageManager="pnpm"
|
|
87
|
+
pnpm add intlayer vue-intlayer
|
|
88
|
+
pnpm add --save-dev nuxt-intlayer
|
|
89
|
+
pnpm intlayer init
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
```bash packageManager="yarn"
|
|
93
|
+
yarn add intlayer vue-intlayer
|
|
94
|
+
yarn add --save-dev nuxt-intlayer
|
|
95
|
+
yarn intlayer init
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```bash packageManager="bun"
|
|
99
|
+
bun add intlayer vue-intlayer
|
|
100
|
+
bun add --dev nuxt-intlayer
|
|
101
|
+
bunx intlayer init
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
- **intlayer**
|
|
105
|
+
|
|
106
|
+
Базовий пакет, який надає інструменти інтернаціоналізації для керування конфігурацією, перекладів, [оголошення контенту](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/content_file.md), транспіляції та [CLI-команд](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/cli/index.md).
|
|
107
|
+
|
|
108
|
+
- **vue-intlayer**
|
|
109
|
+
Пакет, який інтегрує Intlayer у Vue-застосунок. Він надає composables для Vue-компонентів.
|
|
110
|
+
|
|
111
|
+
- **nuxt-intlayer**
|
|
112
|
+
Nuxt-модуль, який інтегрує Intlayer у Nuxt-застосунки. Він забезпечує автоматичне налаштування, middleware для виявлення локалі, керування cookie та перенаправлення URL.
|
|
113
|
+
|
|
114
|
+
### Крок 2: Конфігурація вашого проєкту
|
|
115
|
+
|
|
116
|
+
Створіть файл конфігурації, щоб налаштувати мови вашого застосунку:
|
|
117
|
+
|
|
118
|
+
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
119
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
120
|
+
|
|
121
|
+
const config: IntlayerConfig = {
|
|
122
|
+
internationalization: {
|
|
123
|
+
locales: [
|
|
124
|
+
Locales.ENGLISH,
|
|
125
|
+
Locales.FRENCH,
|
|
126
|
+
Locales.SPANISH,
|
|
127
|
+
// Ваші інші локалі
|
|
128
|
+
],
|
|
129
|
+
defaultLocale: Locales.ENGLISH,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
export default config;
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
137
|
+
import { Locales } from "intlayer";
|
|
138
|
+
|
|
139
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
140
|
+
const config = {
|
|
141
|
+
internationalization: {
|
|
142
|
+
locales: [
|
|
143
|
+
Locales.ENGLISH,
|
|
144
|
+
Locales.FRENCH,
|
|
145
|
+
Locales.SPANISH,
|
|
146
|
+
// Ваші інші локалі
|
|
147
|
+
],
|
|
148
|
+
defaultLocale: Locales.ENGLISH,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
export default config;
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
156
|
+
const { Locales } = require("intlayer");
|
|
157
|
+
|
|
158
|
+
/** @type {import('intlayer').IntlayerConfig} */
|
|
159
|
+
const config = {
|
|
160
|
+
internationalization: {
|
|
161
|
+
locales: [
|
|
162
|
+
Locales.ENGLISH,
|
|
163
|
+
Locales.FRENCH,
|
|
164
|
+
Locales.SPANISH,
|
|
165
|
+
// Ваші інші локалі
|
|
166
|
+
],
|
|
167
|
+
defaultLocale: Locales.ENGLISH,
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
module.exports = config;
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
> Через цей файл конфігурації ви можете налаштувати локалізовані URL, перенаправлення через middleware, імена cookie, розташування та розширення ваших декларацій контенту, відключити логи Intlayer у консолі та інше. Для повного переліку доступних параметрів зверніться до [документації з конфігурації](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md).
|
|
175
|
+
|
|
176
|
+
### Крок 3: Інтеграція Intlayer у вашу конфігурацію Nuxt
|
|
177
|
+
|
|
178
|
+
Додайте модуль intlayer до вашої конфігурації Nuxt:
|
|
179
|
+
|
|
180
|
+
```typescript fileName="nuxt.config.ts"
|
|
181
|
+
import { defineNuxtConfig } from "nuxt/config";
|
|
182
|
+
|
|
183
|
+
export default defineNuxtConfig({
|
|
184
|
+
// ... Your existing Nuxt configuration
|
|
185
|
+
modules: ["nuxt-intlayer"],
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
> Модуль `nuxt-intlayer` автоматично керує інтеграцією Intlayer з Nuxt. Він налаштовує побудову декларацій контенту, відстежує файли в режимі розробки, надає middleware для виявлення локалі та керує локалізованим маршрутизуванням.
|
|
190
|
+
|
|
191
|
+
### Крок 4: Оголосіть свій контент
|
|
192
|
+
|
|
193
|
+
Створюйте та керуйте деклараціями контенту для збереження перекладів:
|
|
194
|
+
|
|
195
|
+
```tsx fileName="content/home-page.content.ts" contentDeclarationFormat="typescript"
|
|
196
|
+
import { type Dictionary, t } from "intlayer";
|
|
197
|
+
|
|
198
|
+
const content = {
|
|
199
|
+
key: "home-page",
|
|
200
|
+
content: {
|
|
201
|
+
title: t({
|
|
202
|
+
uk: "Привіт, світ",
|
|
203
|
+
en: "Hello world",
|
|
204
|
+
fr: "Bonjour le monde",
|
|
205
|
+
es: "Hola mundo",
|
|
206
|
+
}),
|
|
207
|
+
metaTitle: t({
|
|
208
|
+
uk: "Ласкаво просимо | Мій додаток",
|
|
209
|
+
en: "Welcome | My Application",
|
|
210
|
+
fr: "Bienvenue | Mon Application",
|
|
211
|
+
es: "Bienvenido | Mi Aplicación",
|
|
212
|
+
}),
|
|
213
|
+
metaDescription: t({
|
|
214
|
+
uk: "Дізнайтеся про багатомовну домашню сторінку вашого Nuxt-додатка, що працює на Intlayer.",
|
|
215
|
+
en: "Discover your multilingual Nuxt app homepage powered by Intlayer.",
|
|
216
|
+
fr: "Découvrez la page d'accueil multilingue de votre application Nuxt propulsée par Intlayer.",
|
|
217
|
+
es: "Descubre la página de inicio multilingüe de tu aplicación Nuxt impulsada por Intlayer.",
|
|
218
|
+
}),
|
|
219
|
+
},
|
|
220
|
+
} satisfies Dictionary;
|
|
221
|
+
|
|
222
|
+
export default content;
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
> Оголошення вашого контенту можуть бути визначені будь-де у вашому застосунку, за умови, що вони знаходяться в директорії `contentDir` (за замовчуванням `./src`). І відповідають розширенню файлу оголошення контенту (за замовчуванням `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
226
|
+
|
|
227
|
+
> Для детальнішої інформації див. [документацію щодо оголошення контенту](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/content_file.md).
|
|
228
|
+
|
|
229
|
+
### Крок 5: Використання Intlayer у вашому коді
|
|
230
|
+
|
|
231
|
+
Отримуйте доступ до ваших словників контенту в усьому Nuxt-застосунку за допомогою композиції `useIntlayer`:
|
|
232
|
+
|
|
233
|
+
```vue fileName="components/HelloWorld.vue"
|
|
234
|
+
<script setup lang="ts">
|
|
235
|
+
import { ref } from "vue";
|
|
236
|
+
import { useIntlayer } from "vue-intlayer";
|
|
237
|
+
|
|
238
|
+
defineProps({
|
|
239
|
+
msg: String,
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
const {
|
|
243
|
+
count,
|
|
244
|
+
edit,
|
|
245
|
+
checkOut,
|
|
246
|
+
nuxtIntlayer,
|
|
247
|
+
learnMore,
|
|
248
|
+
nuxtDocs,
|
|
249
|
+
readTheDocs,
|
|
250
|
+
} = useIntlayer("helloworld");
|
|
251
|
+
const countRef = ref(0);
|
|
252
|
+
</script>
|
|
253
|
+
|
|
254
|
+
<template>
|
|
255
|
+
<h1>{{ msg }}</h1>
|
|
256
|
+
|
|
257
|
+
<div class="card">
|
|
258
|
+
<button type="button" @click="countRef++">
|
|
259
|
+
<count />
|
|
260
|
+
{{ countRef }}
|
|
261
|
+
</button>
|
|
262
|
+
<p v-html="edit"></p>
|
|
263
|
+
</div>
|
|
264
|
+
|
|
265
|
+
<p>
|
|
266
|
+
<checkOut />
|
|
267
|
+
<a href="https://nuxt.com/docs/getting-started/introduction" target="_blank"
|
|
268
|
+
>Nuxt</a
|
|
269
|
+
>, <nuxtIntlayer />
|
|
270
|
+
</p>
|
|
271
|
+
<p>
|
|
272
|
+
<learnMore />
|
|
273
|
+
<a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>.
|
|
274
|
+
</p>
|
|
275
|
+
<p class="read-the-docs"><readTheDocs /></p>
|
|
276
|
+
<p class="read-the-docs">{{ readTheDocs }}</p>
|
|
277
|
+
</template>
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
#### Доступ до контенту в Intlayer
|
|
281
|
+
|
|
282
|
+
Intlayer пропонує різні API для доступу до вашого контенту:
|
|
283
|
+
|
|
284
|
+
- **Компонентний синтаксис** (рекомендується):
|
|
285
|
+
Використовуйте синтаксис `<myContent />` або `<Component :is="myContent" />` для рендерингу контенту як вузла Intlayer. Це безшовно інтегрується з [Visual Editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_visual_editor.md) та [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_CMS.md).
|
|
286
|
+
|
|
287
|
+
- **Строковий синтаксис**:
|
|
288
|
+
Використовуйте `{{ myContent }}` щоб вивести контент як простий текст, без підтримки Visual Editor.
|
|
289
|
+
|
|
290
|
+
- **Синтаксис сирого HTML**:
|
|
291
|
+
Використовуйте `<div v-html="myContent" />` щоб рендерити контент як сирий HTML, без підтримки Visual Editor.
|
|
292
|
+
|
|
293
|
+
- **Синтаксис деструктуризації**:
|
|
294
|
+
Composable `useIntlayer` повертає Proxy з контентом. Цей Proxy можна деструктурувати, щоб отримати доступ до контенту, зберігаючи реактивність.
|
|
295
|
+
- Використовуйте `const content = useIntlayer("myContent");` і `{{ content.myContent }}` / `<content.myContent />`.
|
|
296
|
+
- Або використовуйте `const { myContent } = useIntlayer("myContent");` і `{{ myContent}}` / `<myContent/>`, щоб деструктурувати контент.
|
|
297
|
+
|
|
298
|
+
### (Опціонально) Крок 6: Змінити мову вашого контенту
|
|
299
|
+
|
|
300
|
+
Щоб змінити мову вашого контенту, ви можете використовувати функцію `setLocale`, яку надає composable `useLocale`. Ця функція дозволяє встановити локаль додатка та відповідно оновити контент.
|
|
301
|
+
|
|
302
|
+
Створіть компонент для перемикання мов, використовуючи `NuxtLink`. **Використання посилань замість кнопок для перемикання локалі — найкраща практика для SEO та виявлення сторінок**, оскільки це дозволяє пошуковим системам обходити та індексувати всі локалізовані версії ваших сторінок:
|
|
303
|
+
|
|
304
|
+
```vue fileName="components/LocaleSwitcher.vue"
|
|
305
|
+
<script setup lang="ts">
|
|
306
|
+
import { getLocaleName, getLocalizedUrl } from "intlayer";
|
|
307
|
+
import { useLocale } from "vue-intlayer";
|
|
308
|
+
|
|
309
|
+
// Nuxt auto-imports useRoute
|
|
310
|
+
const route = useRoute();
|
|
311
|
+
const { locale, availableLocales, setLocale } = useLocale();
|
|
312
|
+
</script>
|
|
313
|
+
|
|
314
|
+
<template>
|
|
315
|
+
<nav class="locale-switcher">
|
|
316
|
+
<NuxtLink
|
|
317
|
+
v-for="localeEl in availableLocales"
|
|
318
|
+
:key="localeEl"
|
|
319
|
+
:to="getLocalizedUrl(route.fullPath, localeEl)"
|
|
320
|
+
class="locale-link"
|
|
321
|
+
:class="{ 'active-locale': localeEl === locale }"
|
|
322
|
+
@click="setLocale(localeEl)"
|
|
323
|
+
>
|
|
324
|
+
{{ getLocaleName(localeEl) }}
|
|
325
|
+
</NuxtLink>
|
|
326
|
+
</nav>
|
|
327
|
+
</template>
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
> Використання `NuxtLink` з правильними атрибутами `href` (через `getLocalizedUrl`) гарантує, що пошукові системи зможуть виявити всі мовні варіанти ваших сторінок. Це переважніше за перемикання локалі, реалізоване лише на JavaScript, яке може не відстежуватися пошуковими роботами.
|
|
331
|
+
|
|
332
|
+
Потім налаштуйте ваш `app.vue` для використання layouts:
|
|
333
|
+
|
|
334
|
+
```vue fileName="app.vue"
|
|
335
|
+
<template>
|
|
336
|
+
<NuxtLayout>
|
|
337
|
+
<NuxtPage />
|
|
338
|
+
</NuxtLayout>
|
|
339
|
+
</template>
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### (Необов'язково) Крок 6b: Створіть layout з навігацією
|
|
343
|
+
|
|
344
|
+
Nuxt layouts дозволяють визначити спільну структуру для ваших сторінок. Створіть default layout, який включає locale switcher та навігацію:
|
|
345
|
+
|
|
346
|
+
```vue fileName="layouts/default.vue"
|
|
347
|
+
<script setup lang="ts">
|
|
348
|
+
import Links from "~/components/Links.vue";
|
|
349
|
+
import LocaleSwitcher from "~/components/LocaleSwitcher.vue";
|
|
350
|
+
</script>
|
|
351
|
+
|
|
352
|
+
<template>
|
|
353
|
+
<div>
|
|
354
|
+
<header>
|
|
355
|
+
<LocaleSwitcher />
|
|
356
|
+
</header>
|
|
357
|
+
<main>
|
|
358
|
+
<slot />
|
|
359
|
+
</main>
|
|
360
|
+
|
|
361
|
+
<Links href="/">Головна</Links>
|
|
362
|
+
<Links href="/about">Про нас</Links>
|
|
363
|
+
</div>
|
|
364
|
+
</template>
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
Компонент `Links` (показаний нижче) забезпечує автоматичну локалізацію внутрішніх навігаційних посилань.
|
|
368
|
+
|
|
369
|
+
### (Необов'язково) Крок 7: Додайте локалізовану маршрутизацію до вашого застосунку
|
|
370
|
+
|
|
371
|
+
Nuxt автоматично налаштовує локалізовану маршрутизацію при використанні модуля `nuxt-intlayer`. Це створює маршрути для кожної мови автоматично на основі структури каталогу pages.
|
|
372
|
+
|
|
373
|
+
Приклад:
|
|
374
|
+
|
|
375
|
+
```plaintext
|
|
376
|
+
pages/
|
|
377
|
+
├── index.vue → /, /fr, /es
|
|
378
|
+
├── about.vue → /about, /fr/about, /es/about
|
|
379
|
+
└── contact/
|
|
380
|
+
└── index.vue → /contact, /fr/contact, /es/contact
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Щоб створити локалізовані сторінки, просто створіть ваші Vue-файли в директорії `pages/`. Ось два приклади сторінок:
|
|
384
|
+
|
|
385
|
+
**Головна сторінка (`pages/index.vue`):**
|
|
386
|
+
|
|
387
|
+
```vue fileName="pages/index.vue"
|
|
388
|
+
<script setup lang="ts">
|
|
389
|
+
import { useIntlayer } from "vue-intlayer";
|
|
390
|
+
|
|
391
|
+
const content = useIntlayer("home-page");
|
|
392
|
+
|
|
393
|
+
useHead({
|
|
394
|
+
title: content.metaTitle.raw,
|
|
395
|
+
meta: [
|
|
396
|
+
{
|
|
397
|
+
name: "description",
|
|
398
|
+
content: content.metaDescription.raw,
|
|
399
|
+
},
|
|
400
|
+
],
|
|
401
|
+
});
|
|
402
|
+
</script>
|
|
403
|
+
|
|
404
|
+
<template>
|
|
405
|
+
<h1><content.title /></h1>
|
|
406
|
+
</template>
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**Сторінка About (`pages/about.vue`):**
|
|
410
|
+
|
|
411
|
+
```vue fileName="pages/about.vue"
|
|
412
|
+
<script setup lang="ts">
|
|
413
|
+
import { useIntlayer } from "vue-intlayer";
|
|
414
|
+
|
|
415
|
+
const content = useIntlayer("about-page");
|
|
416
|
+
|
|
417
|
+
useHead({
|
|
418
|
+
title: content.metaTitle.raw, // Використовуйте .raw для доступу до примітивного рядка
|
|
419
|
+
meta: [
|
|
420
|
+
{
|
|
421
|
+
name: "description",
|
|
422
|
+
content: content.metaDescription.raw, // Використовуйте .raw для доступу до примітивного рядка
|
|
423
|
+
},
|
|
424
|
+
],
|
|
425
|
+
});
|
|
426
|
+
</script>
|
|
427
|
+
|
|
428
|
+
<template>
|
|
429
|
+
<h1><content.title /></h1>
|
|
430
|
+
</template>
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
> Примітка: `useHead` автоматично імпортується в Nuxt. Ви можете отримувати значення контенту, використовуючи або `.value` (реактивно), або `.raw` (примітивний рядок), залежно від ваших потреб.
|
|
434
|
+
|
|
435
|
+
Модуль `nuxt-intlayer` автоматично:
|
|
436
|
+
|
|
437
|
+
- Визначає переважну локаль користувача
|
|
438
|
+
- Керує переключенням локалі через URL
|
|
439
|
+
- Встановлює відповідний атрибут `<html lang="">`
|
|
440
|
+
- Керує cookie локалі
|
|
441
|
+
- Перенаправляє користувачів на відповідний локалізований URL
|
|
442
|
+
|
|
443
|
+
### (Необов'язковий) Крок 8: Створення локалізованого компонента посилань
|
|
444
|
+
|
|
445
|
+
Щоб гарантувати, що навігація вашого застосунку відповідає поточній локалі, ви можете створити власний компонент `Links`. Цей компонент автоматично додає префікс із поточною мовою до внутрішніх URL-адрес, що важливо для **SEO та видимості сторінок у пошукових системах**.
|
|
446
|
+
|
|
447
|
+
```vue fileName="components/Links.vue"
|
|
448
|
+
<script setup lang="ts">
|
|
449
|
+
import { getLocalizedUrl } from "intlayer";
|
|
450
|
+
import { useLocale } from "vue-intlayer";
|
|
451
|
+
|
|
452
|
+
interface Props {
|
|
453
|
+
href: string;
|
|
454
|
+
locale?: string;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
const props = defineProps<Props>();
|
|
458
|
+
|
|
459
|
+
const { locale: currentLocale } = useLocale();
|
|
460
|
+
|
|
461
|
+
// Обчислення фінального шляху
|
|
462
|
+
const finalPath = computed(() => {
|
|
463
|
+
// 1. Перевірте, чи є посилання зовнішнім
|
|
464
|
+
const isExternal = /^https?:\/\//.test(props.href || "");
|
|
465
|
+
|
|
466
|
+
// 2. Якщо зовнішній — повернути як є (NuxtLink генерує тег <a>)
|
|
467
|
+
if (isExternal) return props.href;
|
|
468
|
+
|
|
469
|
+
// 3. Якщо внутрішній — локалізувати URL
|
|
470
|
+
const targetLocale = props.locale || currentLocale.value;
|
|
471
|
+
return getLocalizedUrl(props.href, targetLocale);
|
|
472
|
+
});
|
|
473
|
+
</script>
|
|
474
|
+
|
|
475
|
+
<template>
|
|
476
|
+
<NuxtLink :to="finalPath" v-bind="$attrs">
|
|
477
|
+
<slot />
|
|
478
|
+
</NuxtLink>
|
|
479
|
+
</template>
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
Потім використайте цей компонент у всьому вашому застосунку:
|
|
483
|
+
|
|
484
|
+
```vue fileName="layouts/default.vue"
|
|
485
|
+
<script setup lang="ts">
|
|
486
|
+
import Links from "~/components/Links.vue";
|
|
487
|
+
import LocaleSwitcher from "~/components/LocaleSwitcher.vue";
|
|
488
|
+
</script>
|
|
489
|
+
|
|
490
|
+
<template>
|
|
491
|
+
<div>
|
|
492
|
+
<header>
|
|
493
|
+
<LocaleSwitcher />
|
|
494
|
+
</header>
|
|
495
|
+
<main>
|
|
496
|
+
<slot />
|
|
497
|
+
</main>
|
|
498
|
+
|
|
499
|
+
<Links href="/">Головна</Links>
|
|
500
|
+
<Links href="/about">Про нас</Links>
|
|
501
|
+
</div>
|
|
502
|
+
</template>
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
> Використовуючи `NuxtLink` з локалізованими шляхами, ви гарантуєте, що:
|
|
506
|
+
>
|
|
507
|
+
> - Пошукові системи можуть обходити та індексувати всі мовні версії ваших сторінок
|
|
508
|
+
> - Користувачі можуть безпосередньо ділитися локалізованими URL-адресами
|
|
509
|
+
> - Історія браузера коректно працює з URL-адресами, що мають префікс локалі
|
|
510
|
+
|
|
511
|
+
### (За бажанням) Крок 9: Обробка метаданих та SEO
|
|
512
|
+
|
|
513
|
+
Nuxt надає потужні можливості для SEO через композицію `useHead` (автоматично імпортується). Ви можете використовувати Intlayer для обробки локалізованих метаданих, використовуючи доступники `.raw` або `.value` для отримання примітивного рядкового значення:
|
|
514
|
+
|
|
515
|
+
```vue fileName="pages/about.vue"
|
|
516
|
+
<script setup lang="ts">
|
|
517
|
+
import { useIntlayer } from "vue-intlayer";
|
|
518
|
+
|
|
519
|
+
// useHead автоматично імпортується в Nuxt
|
|
520
|
+
const content = useIntlayer("about-page");
|
|
521
|
+
|
|
522
|
+
useHead({
|
|
523
|
+
title: content.metaTitle.raw, // Використовуйте .raw для отримання примітивного рядкового значення
|
|
524
|
+
meta: [
|
|
525
|
+
{
|
|
526
|
+
name: "description",
|
|
527
|
+
content: content.metaDescription.raw, // Використовуйте .raw для отримання примітивного рядкового значення
|
|
528
|
+
},
|
|
529
|
+
],
|
|
530
|
+
});
|
|
531
|
+
</script>
|
|
532
|
+
|
|
533
|
+
<template>
|
|
534
|
+
<h1><content.title /></h1>
|
|
535
|
+
</template>
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
> Альтернативно, ви можете використовувати функцію `import { getIntlayer } from "intlayer"` щоб отримати контент без реактивності Vue.
|
|
539
|
+
|
|
540
|
+
> **Доступ до значень контенту:**
|
|
541
|
+
>
|
|
542
|
+
> - Використовуйте `.raw` щоб отримати примітивне рядкове значення (нереактивне)
|
|
543
|
+
> - Використовуйте `.value` щоб отримати реактивне значення
|
|
544
|
+
> - Використовуйте синтаксис компонента `<content.key />` для підтримки Visual Editor
|
|
545
|
+
|
|
546
|
+
Створіть відповідну декларацію контенту:
|
|
547
|
+
|
|
548
|
+
```ts fileName="pages/about-page.content.ts" contentDeclarationFormat="typescript"
|
|
549
|
+
import { t, type Dictionary } from "intlayer";
|
|
550
|
+
|
|
551
|
+
const aboutPageContent = {
|
|
552
|
+
key: "about-page",
|
|
553
|
+
content: {
|
|
554
|
+
metaTitle: t({
|
|
555
|
+
uk: "Про нас - Моя компанія",
|
|
556
|
+
en: "About Us - My Company",
|
|
557
|
+
fr: "À Propos - Ma Société",
|
|
558
|
+
es: "Acerca de Nosotros - Mi Empresa",
|
|
559
|
+
}),
|
|
560
|
+
metaDescription: t({
|
|
561
|
+
uk: "Дізнайтеся більше про нашу компанію та нашу місію",
|
|
562
|
+
en: "Learn more about our company and our mission",
|
|
563
|
+
fr: "En savoir plus sur notre société et notre mission",
|
|
564
|
+
es: "Conozca más sobre nuestra empresa y vuestra misión",
|
|
565
|
+
}),
|
|
566
|
+
title: t({
|
|
567
|
+
uk: "Про нас",
|
|
568
|
+
en: "About Us",
|
|
569
|
+
fr: "À Propos",
|
|
570
|
+
es: "Acerca de Nosotros",
|
|
571
|
+
}),
|
|
572
|
+
},
|
|
573
|
+
} satisfies Dictionary;
|
|
574
|
+
|
|
575
|
+
export default aboutPageContent;
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
```javascript fileName="pages/about-page.content.mjs" contentDeclarationFormat="esm"
|
|
579
|
+
import { t } from "intlayer";
|
|
580
|
+
|
|
581
|
+
/** @type {import('intlayer').Dictionary} */
|
|
582
|
+
const aboutPageContent = {
|
|
583
|
+
key: "about-page",
|
|
584
|
+
content: {
|
|
585
|
+
metaTitle: t({
|
|
586
|
+
uk: "Про нас - Моя компанія",
|
|
587
|
+
uk: "Про нас - Моя компанія",
|
|
588
|
+
en: "About Us - My Company",
|
|
589
|
+
fr: "À Propos - Ma Société",
|
|
590
|
+
es: "Acerca de Nosotros - Mi Empresa",
|
|
591
|
+
}),
|
|
592
|
+
metaDescription: t({
|
|
593
|
+
uk: "Дізнайтеся більше про нашу компанію та нашу місію",
|
|
594
|
+
en: "Learn more about our company and our mission",
|
|
595
|
+
fr: "En savoir plus sur notre société et notre mission",
|
|
596
|
+
es: "Conozca más sobre nuestra empresa y vuestra misión",
|
|
597
|
+
}),
|
|
598
|
+
title: t({
|
|
599
|
+
uk: "Про нас",
|
|
600
|
+
en: "About Us",
|
|
601
|
+
fr: "À Propos",
|
|
602
|
+
es: "Acerca de Nosotros",
|
|
603
|
+
}),
|
|
604
|
+
},
|
|
605
|
+
};
|
|
606
|
+
|
|
607
|
+
export default aboutPageContent;
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
```javascript fileName="pages/about-page.content.cjs" contentDeclarationFormat="commonjs"
|
|
611
|
+
const { t } = require("intlayer");
|
|
612
|
+
|
|
613
|
+
/** @type {import('intlayer').Dictionary} */
|
|
614
|
+
const aboutPageContent = {
|
|
615
|
+
key: "about-page",
|
|
616
|
+
content: {
|
|
617
|
+
metaTitle: t({
|
|
618
|
+
uk: "Про нас - Моя компанія",
|
|
619
|
+
en: "About Us - My Company",
|
|
620
|
+
uk: "Про нас - Моя компанія",
|
|
621
|
+
fr: "À Propos - Ma Société",
|
|
622
|
+
es: "Acerca de Nosotros - Mi Empresa",
|
|
623
|
+
}),
|
|
624
|
+
metaDescription: t({
|
|
625
|
+
uk: "Дізнайтеся більше про нашу компанію та її місію",
|
|
626
|
+
en: "Learn more about our company and our mission",
|
|
627
|
+
fr: "En savoir plus sur notre société et notre mission",
|
|
628
|
+
es: "Conozca más sobre nuestra empresa y vuestra misión",
|
|
629
|
+
}),
|
|
630
|
+
title: t({
|
|
631
|
+
uk: "Про нас",
|
|
632
|
+
en: "About Us",
|
|
633
|
+
fr: "À Propos",
|
|
634
|
+
es: "Acerca de Nosotros",
|
|
635
|
+
}),
|
|
636
|
+
},
|
|
637
|
+
};
|
|
638
|
+
|
|
639
|
+
module.exports = aboutPageContent;
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
```json fileName="pages/about-page.content.json" contentDeclarationFormat="json"
|
|
643
|
+
{
|
|
644
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
645
|
+
"key": "about-page",
|
|
646
|
+
"content": {
|
|
647
|
+
"metaTitle": {
|
|
648
|
+
"nodeType": "translation",
|
|
649
|
+
"translation": {
|
|
650
|
+
"uk": "Про нас - Моя компанія",
|
|
651
|
+
"en": "About Us - My Company",
|
|
652
|
+
"fr": "À Propos - Ma Société",
|
|
653
|
+
"uk": "Про нас - Моя компанія",
|
|
654
|
+
"en": "About Us - My Company",
|
|
655
|
+
"fr": "À Propos - Ma Société",
|
|
656
|
+
"es": "Acerca de Nosotros - Mi Empresa"
|
|
657
|
+
}
|
|
658
|
+
},
|
|
659
|
+
"metaDescription": {
|
|
660
|
+
"nodeType": "translation",
|
|
661
|
+
"translation": {
|
|
662
|
+
"uk": "Дізнайтеся більше про нашу компанію та нашу місію",
|
|
663
|
+
"en": "Learn more about our company and our mission",
|
|
664
|
+
"fr": "En savoir plus sur notre société et notre mission",
|
|
665
|
+
"es": "Conozca más sobre nuestra empresa y nuestra misión"
|
|
666
|
+
}
|
|
667
|
+
},
|
|
668
|
+
"title": {
|
|
669
|
+
"nodeType": "translation",
|
|
670
|
+
"translation": {
|
|
671
|
+
"uk": "Про нас",
|
|
672
|
+
"en": "About Us",
|
|
673
|
+
"fr": "À Propos",
|
|
674
|
+
"es": "Acerca de Nosotros"
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
### Конфігурація Git
|
|
682
|
+
|
|
683
|
+
Рекомендується ігнорувати файли, згенеровані Intlayer. Це дозволяє уникнути їх коміту в ваш репозиторій Git.
|
|
684
|
+
|
|
685
|
+
Для цього ви можете додати такі інструкції до файлу `.gitignore`:
|
|
686
|
+
|
|
687
|
+
```plaintext fileName=".gitignore"
|
|
688
|
+
# Ігноруйте файли, згенеровані Intlayer
|
|
689
|
+
.intlayer
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
### Розширення VS Code
|
|
693
|
+
|
|
694
|
+
Щоб покращити ваш досвід розробки з Intlayer, ви можете встановити офіційне розширення Intlayer для VS Code.
|
|
695
|
+
|
|
696
|
+
[Встановити з VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
697
|
+
|
|
698
|
+
Це розширення надає:
|
|
699
|
+
|
|
700
|
+
- **Автозавершення** для ключів перекладу.
|
|
701
|
+
- **Виявлення помилок у реальному часі** для відсутніх перекладів.
|
|
702
|
+
- **Вбудований попередній перегляд** перекладеного вмісту.
|
|
703
|
+
- **Швидкі дії** для швидкого створення та оновлення перекладів.
|
|
704
|
+
|
|
705
|
+
Для детальнішої інформації про використання розширення зверніться до [документації Intlayer VS Code Extension](https://intlayer.org/doc/vs-code-extension).
|
|
706
|
+
|
|
707
|
+
---
|
|
708
|
+
|
|
709
|
+
### Далі
|
|
710
|
+
|
|
711
|
+
Щоб просунутися далі, ви можете реалізувати [візуальний редактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_visual_editor.md) або винести свій контент, використовуючи [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_CMS.md).
|