@intlayer/docs 7.3.10 → 7.3.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +19 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +19 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +1 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/intlayer_with_nuxt.md +305 -421
  8. package/docs/ar/intlayer_with_react_router_v7.md +33 -4
  9. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +516 -0
  10. package/docs/ar/intlayer_with_tanstack.md +2 -12
  11. package/docs/ar/intlayer_with_vite+vue.md +1 -0
  12. package/docs/de/intlayer_with_nuxt.md +296 -394
  13. package/docs/de/intlayer_with_react_router_v7.md +33 -4
  14. package/docs/de/intlayer_with_react_router_v7_fs_routes.md +573 -0
  15. package/docs/de/intlayer_with_tanstack.md +1 -0
  16. package/docs/de/intlayer_with_vite+vue.md +1 -0
  17. package/docs/en/intlayer_with_nuxt.md +242 -321
  18. package/docs/en/intlayer_with_react_router_v7.md +24 -0
  19. package/docs/en/intlayer_with_react_router_v7_fs_routes.md +570 -0
  20. package/docs/en/intlayer_with_tanstack.md +2 -12
  21. package/docs/en/intlayer_with_vite+vue.md +49 -48
  22. package/docs/en-GB/intlayer_with_nuxt.md +262 -358
  23. package/docs/en-GB/intlayer_with_react_router_v7.md +33 -4
  24. package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +513 -0
  25. package/docs/en-GB/intlayer_with_tanstack.md +2 -12
  26. package/docs/en-GB/intlayer_with_vite+vue.md +1 -0
  27. package/docs/es/intlayer_with_nuxt.md +284 -375
  28. package/docs/es/intlayer_with_react_router_v7.md +33 -4
  29. package/docs/es/intlayer_with_react_router_v7_fs_routes.md +575 -0
  30. package/docs/es/intlayer_with_tanstack.md +1 -0
  31. package/docs/es/intlayer_with_vite+vue.md +1 -2
  32. package/docs/fr/intlayer_with_nuxt.md +288 -387
  33. package/docs/fr/intlayer_with_react_router_v7.md +34 -5
  34. package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +574 -0
  35. package/docs/fr/intlayer_with_tanstack.md +1 -0
  36. package/docs/fr/intlayer_with_vite+vue.md +1 -0
  37. package/docs/hi/intlayer_with_nuxt.md +318 -434
  38. package/docs/hi/intlayer_with_react_router_v7.md +33 -4
  39. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +518 -0
  40. package/docs/hi/intlayer_with_tanstack.md +2 -12
  41. package/docs/hi/intlayer_with_vite+vue.md +1 -0
  42. package/docs/id/intlayer_with_nuxt.md +275 -376
  43. package/docs/id/intlayer_with_react_router_v7.md +29 -4
  44. package/docs/id/intlayer_with_react_router_v7_fs_routes.md +521 -0
  45. package/docs/id/intlayer_with_tanstack.md +2 -12
  46. package/docs/id/intlayer_with_vite+vue.md +1 -0
  47. package/docs/it/intlayer_with_nuxt.md +312 -408
  48. package/docs/it/intlayer_with_react_router_v7.md +33 -4
  49. package/docs/it/intlayer_with_react_router_v7_fs_routes.md +574 -0
  50. package/docs/it/intlayer_with_tanstack.md +1 -0
  51. package/docs/ja/intlayer_with_nuxt.md +319 -414
  52. package/docs/ja/intlayer_with_react_router_v7.md +33 -4
  53. package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +574 -0
  54. package/docs/ja/intlayer_with_tanstack.md +2 -12
  55. package/docs/ja/intlayer_with_vite+vue.md +1 -0
  56. package/docs/ko/intlayer_with_nuxt.md +307 -406
  57. package/docs/ko/intlayer_with_react_router_v7.md +33 -4
  58. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +515 -0
  59. package/docs/ko/intlayer_with_tanstack.md +2 -12
  60. package/docs/ko/intlayer_with_vite+vue.md +1 -0
  61. package/docs/pl/intlayer_with_nuxt.md +282 -457
  62. package/docs/pl/intlayer_with_react_router_v7.md +32 -5
  63. package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +615 -0
  64. package/docs/pl/intlayer_with_tanstack.md +2 -12
  65. package/docs/pl/intlayer_with_vite+vue.md +1 -0
  66. package/docs/pt/intlayer_with_nuxt.md +288 -403
  67. package/docs/pt/intlayer_with_react_router_v7.md +28 -0
  68. package/docs/pt/intlayer_with_tanstack.md +1 -0
  69. package/docs/ru/intlayer_with_nuxt.md +300 -410
  70. package/docs/ru/intlayer_with_react_router_v7.md +33 -4
  71. package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +574 -0
  72. package/docs/ru/intlayer_with_tanstack.md +1 -0
  73. package/docs/ru/intlayer_with_vite+vue.md +1 -0
  74. package/docs/tr/intlayer_with_nuxt.md +327 -392
  75. package/docs/tr/intlayer_with_react_router_v7.md +33 -4
  76. package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +572 -0
  77. package/docs/tr/intlayer_with_tanstack.md +2 -12
  78. package/docs/tr/intlayer_with_vite+vue.md +1 -0
  79. package/docs/vi/intlayer_with_nuxt.md +282 -399
  80. package/docs/vi/intlayer_with_react_router_v7.md +29 -4
  81. package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +523 -0
  82. package/docs/vi/intlayer_with_tanstack.md +2 -12
  83. package/docs/vi/intlayer_with_vite+vue.md +1 -0
  84. package/docs/zh/intlayer_with_nuxt.md +311 -444
  85. package/docs/zh/intlayer_with_react_router_v7.md +33 -4
  86. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +516 -0
  87. package/docs/zh/intlayer_with_tanstack.md +2 -12
  88. package/docs/zh/intlayer_with_vite+vue.md +1 -0
  89. package/package.json +6 -6
  90. package/src/generated/docs.entry.ts +19 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  createdAt: 2025-06-18
3
- updatedAt: 2025-06-29
4
- title: Как перевести ваше Nuxt and Vue – руководство i18n 2025
3
+ updatedAt: 2025-12-07
4
+ title: Как перевести ваше приложение Nuxt и Vue – руководство по i18n 2025
5
5
  description: Узнайте, как сделать ваш сайт на Nuxt и Vue многоязычным. Следуйте документации для интернационализации (i18n) и перевода.
6
6
  keywords:
7
7
  - Интернационализация
@@ -14,34 +14,69 @@ slugs:
14
14
  - doc
15
15
  - environment
16
16
  - nuxt-and-vue
17
- applicationTemplate: https://github.com/aymericzip/intlayer-nuxt-template
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-nuxt-4-template
18
+ youtubeVideo: https://www.youtube.com/watch?v=IE3XWkZ6a5U
18
19
  history:
20
+ - version: 7.3.11
21
+ date: 2025-12-07
22
+ changes: Обновление LocaleSwitcher, SEO, метаданных
19
23
  - version: 5.5.10
20
24
  date: 2025-06-29
21
25
  changes: Инициализация истории
22
26
  ---
23
27
 
24
- # Переведите ваш Nuxt and Vue с Intlayer | Интернационализация (i18n)
28
+ # Перевод вашего сайта на Nuxt и Vue с использованием Intlayer | Интернационализация (i18n)
25
29
 
26
- Смотрите [Шаблон приложения](https://github.com/aymericzip/intlayer-nuxt-template) на GitHub.
30
+ ## Содержание
31
+
32
+ <TOC/>
27
33
 
28
34
  ## Что такое Intlayer?
29
35
 
30
- **Intlayer** - это инновационная, открытая библиотека для интернационализации (i18n), созданная для упрощения поддержки многоязычности в современных веб-приложениях.
36
+ **Intlayer** это инновационная, открытая библиотека интернационализации (i18n), созданная для упрощения поддержки многоязычности в современных веб-приложениях.
31
37
 
32
38
  С помощью Intlayer вы можете:
33
39
 
34
40
  - **Легко управлять переводами** с использованием декларативных словарей на уровне компонентов.
35
41
  - **Динамически локализовать метаданные**, маршруты и контент.
36
- - **Обеспечить поддержку TypeScript** с помощью автогенерируемых типов, улучшая автодополнение и обнаружение ошибок.
42
+ - **Обеспечить поддержку TypeScript** с автогенерируемыми типами, улучшая автодополнение и обнаружение ошибок.
37
43
  - **Воспользоваться расширенными возможностями**, такими как динамическое определение и переключение локали.
38
44
 
39
45
  ---
40
46
 
41
47
  ## Пошаговое руководство по настройке Intlayer в приложении Nuxt
42
48
 
49
+ <iframe
50
+ src="https://stackblitz.com/github/aymericzip/intlayer-nuxt-4-template?embed=1&ctl=1&file=intlayer.config.ts"
51
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
52
+ title="Демонстрация CodeSandbox - Как интернационализировать ваше приложение с помощью Intlayer"
53
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
54
+ loading="lazy"
55
+ />
56
+
43
57
  ### Шаг 1: Установка зависимостей
44
58
 
59
+ <Tab defaultTab="video">
60
+ <TabItem label="Видео" value="video">
61
+
62
+ <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/IE3XWkZ6a5U?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
63
+
64
+ </TabItem>
65
+ <TabItem label="Код" value="code">
66
+
67
+ <iframe
68
+ src="https://stackblitz.com/github/aymericzip/intlayer-nuxt-4-template?embed=1&ctl=1&file=intlayer.config.ts"
69
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
70
+ title="Демонстрация CodeSandbox - Как интернационализировать ваше приложение с помощью Intlayer"
71
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
72
+ loading="lazy"
73
+ />
74
+
75
+ </TabItem>
76
+ </Tab>
77
+
78
+ Смотрите [Шаблон приложения](https://github.com/aymericzip/intlayer-nuxt-4-template) на GitHub.
79
+
45
80
  Установите необходимые пакеты с помощью npm:
46
81
 
47
82
  ```bash packageManager="npm"
@@ -61,13 +96,13 @@ yarn add --save-dev nuxt-intlayer
61
96
 
62
97
  - **intlayer**
63
98
 
64
- Основной пакет, который предоставляет инструменты интернационализации для управления конфигурацией, переводами, [объявлением контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/get_started.md), транспиляцией и [CLI-командами](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_cli.md).
99
+ Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, перевода, [объявления контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/content_file.md), транспиляции и [CLI-команд](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/cli/index.md).
65
100
 
66
101
  - **vue-intlayer**
67
- Пакет, который интегрирует Intlayer с приложением Vue. Он предоставляет композиционные функции для компонентов Vue.
102
+ Пакет, который интегрирует Intlayer с приложением Vue. Он содержит composables для Vue-компонентов.
68
103
 
69
104
  - **nuxt-intlayer**
70
- Модуль Nuxt, который интегрирует Intlayer с приложениями Nuxt. Он обеспечивает автоматическую настройку, промежуточное ПО для определения локали, управление cookie и перенаправление URL.
105
+ Модуль Nuxt, который интегрирует Intlayer с приложениями Nuxt. Он обеспечивает автоматическую настройку, middleware для определения локали, управление cookie и перенаправление URL.
71
106
 
72
107
  ### Шаг 2: Конфигурация вашего проекта
73
108
 
@@ -86,9 +121,6 @@ const config: IntlayerConfig = {
86
121
  ],
87
122
  defaultLocale: Locales.ENGLISH,
88
123
  },
89
- content: {
90
- contentDir: ["."], // По умолчанию Intlayer будет отслеживать файлы объявления контента из директории `./src`
91
- },
92
124
  };
93
125
 
94
126
  export default config;
@@ -98,7 +130,6 @@ export default config;
98
130
  import { Locales } from "intlayer";
99
131
 
100
132
  /** @type {import('intlayer').IntlayerConfig} */
101
- // Конфигурация Intlayer
102
133
  const config = {
103
134
  internationalization: {
104
135
  locales: [
@@ -109,9 +140,6 @@ const config = {
109
140
  ],
110
141
  defaultLocale: Locales.ENGLISH,
111
142
  },
112
- content: {
113
- contentDir: ["."], // Каталоги с декларациями контента
114
- },
115
143
  };
116
144
 
117
145
  export default config;
@@ -121,7 +149,6 @@ export default config;
121
149
  const { Locales } = require("intlayer");
122
150
 
123
151
  /** @type {import('intlayer').IntlayerConfig} */
124
- // Конфигурация Intlayer
125
152
  const config = {
126
153
  internationalization: {
127
154
  locales: [
@@ -132,15 +159,12 @@ const config = {
132
159
  ],
133
160
  defaultLocale: Locales.ENGLISH,
134
161
  },
135
- content: {
136
- contentDir: ["."],
137
- },
138
162
  };
139
163
 
140
164
  module.exports = config;
141
165
  ```
142
166
 
143
- > С помощью этого файла конфигурации вы можете настроить локализованные URL, перенаправление через middleware, имена cookie, расположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к [документации по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md).
167
+ > Через этот конфигурационный файл вы можете настроить локализованные URL, перенаправление через middleware, имена cookie, расположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к [документации по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md).
144
168
 
145
169
  ### Шаг 3: Интеграция Intlayer в вашу конфигурацию Nuxt
146
170
 
@@ -161,239 +185,40 @@ export default defineNuxtConfig({
161
185
 
162
186
  Создайте и управляйте вашими декларациями контента для хранения переводов:
163
187
 
164
- ```tsx fileName="components/helloWorld.content.ts" contentDeclarationFormat="typescript"
165
- import { t, type Dictionary } from "intlayer";
188
+ ```tsx fileName="content/home-page.content.ts" contentDeclarationFormat="typescript"
189
+ import { type Dictionary, t } from "intlayer";
166
190
 
167
- const helloWorldContent = {
168
- key: "helloworld",
191
+ const content = {
192
+ key: "home-page",
169
193
  content: {
170
- count: t({ en: "count is ", fr: "le compte est ", es: "el recuento es " }),
171
- edit: t({
172
- en: "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
173
- fr: "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
174
- es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR",
175
- }),
176
- checkOut: t({ en: "Check out ", fr: "Vérifiez ", es: "Compruebe " }),
177
- nuxtIntlayer: t({
178
- en: "Nuxt Intlayer documentation",
179
- fr: "Documentation de Nuxt Intlayer",
180
- es: "Documentación de Nuxt Intlayer",
181
- }),
182
- learnMore: t({
183
- en: "Learn more about Nuxt in the ",
184
- fr: "En savoir plus sur Nuxt dans la ",
185
- es: "Aprenda más sobre Nuxt en la ",
194
+ title: t({
195
+ en: "Hello world",
196
+ fr: "Bonjour le monde",
197
+ es: "Hola mundo",
186
198
  }),
187
- nuxtDocs: t({
188
- en: "Nuxt Documentation",
189
- fr: "Documentation Nuxt",
190
- es: "Documentación de Nuxt",
199
+ metaTitle: t({
200
+ en: "Welcome | My Application",
201
+ fr: "Bienvenue | Mon Application",
202
+ es: "Bienvenido | Mi Aplicación",
191
203
  }),
192
- readTheDocs: t({
193
- en: "Click on the Nuxt logo to learn more",
194
- fr: "Cliquez sur le logo Nuxt pour en savoir plus",
195
- es: "Haga clic en el logotipo de Nuxt para obtener más información",
204
+ metaDescription: t({
205
+ en: "Discover your multilingual Nuxt app homepage powered by Intlayer.",
206
+ fr: "Découvrez la page d'accueil multilingue de votre application Nuxt propulsée par Intlayer.",
207
+ es: "Descubre la página de inicio multilingüe de tu aplicación Nuxt impulsada por Intlayer.",
196
208
  }),
197
209
  },
198
210
  } satisfies Dictionary;
199
211
 
200
- export default helloWorldContent;
212
+ export default content;
201
213
  ```
202
214
 
203
- ```javascript fileName="components/helloWorld.content.mjs" contentDeclarationFormat="esm"
204
- import { t } from "intlayer";
215
+ > Ваши декларации контента могут быть определены в любом месте вашего приложения, при условии, что они включены в директорию `contentDir` (по умолчанию, `./src`). И соответствуют расширению файла декларации контента (по умолчанию, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
205
216
 
206
- /** @type {import('intlayer').Dictionary} */
207
- const helloWorldContent = {
208
- key: "helloworld",
209
- content: {
210
- count: t({ ru: "счёт равен ", en: "count is ", fr: "le compte est ", es: "el recuento es " }),
211
- edit: t({
212
- ru: "Редактируйте <code>components/HelloWorld.vue</code> и сохраните, чтобы проверить HMR",
213
- en: "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
214
- fr: "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
215
- es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR",
216
- }),
217
- fr: "Cliquez sur le logo Nuxt pour en savoir plus",
218
- es: "Haga clic en el logotipo de Nuxt para obtener más información",
219
- }),
220
- },
221
- } satisfies Dictionary;
217
+ > Для получения дополнительной информации обратитесь к [документации по декларации контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/content_file.md).
222
218
 
223
- export default helloWorldContent;
224
- ```
219
+ ### Шаг 5: Использование Intlayer в вашем коде
225
220
 
226
- ```javascript fileName="components/helloWorld.content.mjs" contentDeclarationFormat="esm"
227
- import { t } from "intlayer";
228
-
229
- /** @type {import('intlayer').Dictionary} */
230
- const helloWorldContent = {
231
- key: "helloworld",
232
- content: {
233
- count: t({ en: "count is ", fr: "le compte est ", es: "el recuento es " }),
234
- edit: t({
235
- en: "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
236
- fr: "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
237
- es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR",
238
- }),
239
- checkOut: t({
240
- ru: "Посмотрите ",
241
- en: "Check out ",
242
- fr: "Vérifiez ",
243
- es: "Compruebe ",
244
- }),
245
- nuxtIntlayer: t({
246
- ru: "Документация Nuxt Intlayer",
247
- en: "Nuxt Intlayer documentation",
248
- fr: "Documentation de Nuxt Intlayer",
249
- es: "Documentación de Nuxt Intlayer",
250
- }),
251
- learnMore: t({
252
- ru: "Узнайте больше о Nuxt в ",
253
- en: "Learn more about Nuxt in the ",
254
- fr: "En savoir plus sur Nuxt dans la ",
255
- es: "Aprenda más sobre Nuxt en la ",
256
- }),
257
- nuxtDocs: t({
258
- ru: "Документация Nuxt",
259
- en: "Nuxt Documentation",
260
- fr: "Documentation Nuxt",
261
- es: "Documentación de Nuxt",
262
- }),
263
- readTheDocs: t({
264
- ru: "Нажмите на логотип Nuxt, чтобы узнать больше",
265
- en: "Click on the Nuxt logo to learn more",
266
- fr: "Cliquez sur le logo Nuxt pour en savoir plus",
267
- es: "Haga clic en el logotipo de Nuxt para obtener más información",
268
- }),
269
- },
270
- };
271
-
272
- export default helloWorldContent;
273
- ```
274
-
275
- ```javascript fileName="components/helloWorld.content.cjs" contentDeclarationFormat="commonjs"
276
- const { t } = require("intlayer");
277
-
278
- /** @type {import('intlayer').Dictionary} */
279
- const helloWorldContent = {
280
- key: "helloworld",
281
- content: {
282
- count: t({
283
- ru: "счёт равен ",
284
- en: "count is ",
285
- fr: "le compte est ",
286
- es: "el recuento es ",
287
- }),
288
- edit: t({
289
- ru: "Редактируйте <code>components/HelloWorld.vue</code> и сохраните, чтобы проверить HMR",
290
- en: "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
291
- fr: "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
292
- es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR",
293
- }),
294
- checkOut: t({
295
- ru: "Посмотрите ",
296
- en: "Check out ",
297
- fr: "Vérifiez ",
298
- es: "Compruebe ",
299
- }),
300
- nuxtIntlayer: t({
301
- ru: "Документация Nuxt Intlayer",
302
- en: "Nuxt Intlayer documentation",
303
- fr: "Documentation de Nuxt Intlayer",
304
- ru: "Узнайте больше о Nuxt в ",
305
- en: "Learn more about Nuxt in the ",
306
- fr: "En savoir plus sur Nuxt dans la ",
307
- es: "Aprenda más sobre Nuxt en la ",
308
- }),
309
- nuxtDocs: t({
310
- ru: "Документация Nuxt",
311
- en: "Nuxt Documentation",
312
- fr: "Documentation Nuxt",
313
- es: "Documentación de Nuxt",
314
- }),
315
- readTheDocs: t({
316
- ru: "Нажмите на логотип Nuxt, чтобы узнать больше",
317
- en: "Click on the Nuxt logo to learn more",
318
- fr: "Cliquez sur le logo Nuxt pour en savoir plus",
319
- es: "Haga clic en el logotipo de Nuxt para obtener más información",
320
- }),
321
- },
322
- };
323
-
324
- module.exports = helloWorldContent;
325
- ```
326
-
327
- ```json fileName="components/helloWorld.content.json" contentDeclarationFormat="json"
328
- {
329
- "$schema": "https://intlayer.org/schema.json",
330
- "key": "helloworld",
331
- "content": {
332
- "count": {
333
- "nodeType": "translation",
334
- "translation": {
335
- "ru": "счёт равен ",
336
- "en": "count is ",
337
- "fr": "le compte est ",
338
- "es": "el recuento es "
339
- }
340
- },
341
- "edit": {
342
- "nodeType": "translation",
343
- "translation": {
344
- "ru": "Отредактируйте <code>components/HelloWorld.vue</code> и сохраните, чтобы протестировать HMR",
345
- "en": "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
346
- "fr": "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
347
- "es": "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR"
348
- }
349
- },
350
- "checkOut": {
351
- "nodeType": "translation",
352
- "translation": {
353
- "ru": "Посмотрите ",
354
- "en": "Check out ",
355
- "fr": "Vérifiez ",
356
- "es": "Compruebe "
357
- }
358
- },
359
- "nuxtIntlayer": {
360
- "nodeType": "translation",
361
- "translation": {
362
- "ru": "Документация Nuxt Intlayer"
363
- }
364
- },
365
- "learnMore": {
366
- "nodeType": "translation",
367
- "translation": {
368
- "ru": "Узнайте больше о Nuxt в "
369
- }
370
- },
371
- "nuxtDocs": {
372
- "nodeType": "translation",
373
- "translation": {
374
- "ru": "Документация Nuxt"
375
- }
376
- },
377
- "readTheDocs": {
378
- "nodeType": "translation",
379
- "translation": {
380
- "ru": "Нажмите на логотип Nuxt, чтобы узнать больше"
381
- }
382
- }
383
- "es": "Haga clic en el logotipo de Nuxt para obtener más información"
384
- }
385
- }
386
- }
387
- }
388
- ```
389
-
390
- > Ваши объявления контента могут быть определены в любом месте вашего приложения, при условии, что они включены в каталог `contentDir` (по умолчанию, `./src`). И соответствуют расширению файла объявления контента (по умолчанию, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
391
-
392
- > Для получения дополнительной информации обратитесь к [документации по объявлениям контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/get_started.md).
393
-
394
- ### Шаг 5: Используйте Intlayer в вашем коде
395
-
396
- Получайте доступ к вашим словарям контента по всему приложению Nuxt с помощью композиции `useIntlayer`:
221
+ Получайте доступ к вашим словарям контента по всему приложению Nuxt, используя композицию `useIntlayer`:
397
222
 
398
223
  ```vue fileName="components/HelloWorld.vue"
399
224
  <script setup lang="ts">
@@ -447,81 +272,71 @@ const countRef = ref(0);
447
272
  Intlayer предлагает различные API для доступа к вашему контенту:
448
273
 
449
274
  - **Синтаксис на основе компонентов** (рекомендуется):
450
- Используйте синтаксис `<myContent />` или `<Component :is="myContent" />` для отображения контента как узла Intlayer. Это обеспечивает бесшовную интеграцию с [Визуальным редактором](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md) и [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md).
275
+ Используйте синтаксис `<myContent />` или `<Component :is="myContent" />` для рендеринга контента как узла Intlayer. Это обеспечивает бесшовную интеграцию с [Визуальным редактором](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md) и [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md).
451
276
 
452
277
  - **Синтаксис на основе строк**:
453
- Используйте `{{ myContent }}` для отображения контента в виде обычного текста, без поддержки Визуального редактора.
278
+ Используйте `{{ myContent }}`, чтобы отобразить контент как простой текст, без поддержки Визуального редактора.
454
279
 
455
- - **Синтаксис с необработанным HTML**:
456
- Используйте `<div v-html="myContent" />` для отображения контента как необработанного HTML, без поддержки Визуального редактора.
280
+ - **Синтаксис сырого HTML**:
281
+ Используйте `<div v-html="myContent" />`, чтобы отобразить контент как сырой HTML, без поддержки Визуального редактора.
457
282
 
458
283
  - **Синтаксис деструктуризации**:
459
- Компонент useIntlayer возвращает Proxy с содержимым. Этот прокси можно деструктурировать для доступа к содержимому, сохраняя реактивность.
284
+ Композиция `useIntlayer` возвращает Proxy с контентом. Этот прокси можно деструктурировать для доступа к контенту, сохраняя реактивность.
460
285
  - Используйте `const content = useIntlayer("myContent");` и `{{ content.myContent }}` / `<content.myContent />`.
461
- - Или используйте `const { myContent } = useIntlayer("myContent");` и `{{ myContent}}` / `<myContent/>` для деструктуризации содержимого.
286
+ - Или используйте `const { myContent } = useIntlayer("myContent");` и `{{ myContent}}` / `<myContent/>` для деструктуризации контента.
462
287
 
463
288
  ### (Необязательно) Шаг 6: Изменение языка вашего контента
464
289
 
465
- Для изменения языка вашего контента вы можете использовать функцию `setLocale`, предоставляемую композаблем `useLocale`. Эта функция позволяет установить локаль приложения и обновить содержимое соответственно.
290
+ Чтобы изменить язык вашего контента, вы можете использовать функцию `setLocale`, предоставляемую композаблом `useLocale`. Эта функция позволяет установить локаль приложения и обновить контент соответственно.
466
291
 
467
- Создайте компонент для переключения между языками:
292
+ Создайте компонент для переключения между языками с помощью `NuxtLink`. **Использование ссылок вместо кнопок для переключения локали — это лучшая практика для SEO и обнаруживаемости страниц**, так как это позволяет поисковым системам сканировать и индексировать все локализованные версии ваших страниц:
468
293
 
469
294
  ```vue fileName="components/LocaleSwitcher.vue"
470
- <template>
471
- <div class="locale-switcher">
472
- <select v-model="selectedLocale" @change="changeLocale">
473
- <option v-for="loc in availableLocales" :key="loc" :value="loc">
474
- {{ getLocaleName(loc) }}
475
- </option>
476
- </select>
477
- </div>
478
- </template>
479
-
480
295
  <script setup lang="ts">
481
- import { ref, watch } from "vue";
482
- import { getLocaleName } from "intlayer";
296
+ import { getLocaleName, getLocalizedUrl } from "intlayer";
483
297
  import { useLocale } from "vue-intlayer";
484
298
 
485
- // Получаем информацию о локали и функцию setLocale
299
+ // Nuxt автоматически импортирует useRoute
300
+ const route = useRoute();
486
301
  const { locale, availableLocales, setLocale } = useLocale();
487
-
488
- // Отслеживаем выбранную локаль с помощью ref
489
- const selectedLocale = ref(locale.value);
490
-
491
- // Обновляем локаль при изменении выбора
492
- const changeLocale = () => setLocale(selectedLocale.value);
493
-
494
- // Синхронизируем selectedLocale с глобальной локалью
495
- watch(
496
- () => locale.value,
497
- (newLocale) => {
498
- selectedLocale.value = newLocale;
499
- }
500
- );
501
302
  </script>
303
+
304
+ <template>
305
+ <nav class="locale-switcher">
306
+ <NuxtLink
307
+ v-for="localeEl in availableLocales"
308
+ :key="localeEl"
309
+ :to="getLocalizedUrl(route.fullPath, localeEl)"
310
+ class="locale-link"
311
+ :class="{ 'active-locale': localeEl === locale }"
312
+ @click="setLocale(localeEl)"
313
+ >
314
+ {{ getLocaleName(localeEl) }}
315
+ </NuxtLink>
316
+ </nav>
502
317
  </template>
318
+ ```
503
319
 
504
- <style scoped>
505
- .locale-switcher {
506
- margin: 1rem 0;
507
- }
320
+ > Использование `NuxtLink` с правильными атрибутами `href` (через `getLocalizedUrl`) гарантирует, что поисковые системы смогут обнаружить все языковые варианты ваших страниц. Это предпочтительнее, чем переключение локали только с помощью JavaScript, которое поисковые роботы могут не распознать.
508
321
 
509
- select {
510
- padding: 0.5rem;
511
- border-radius: 0.25rem;
512
- border: 1px solid #ccc;
513
- }
514
- </style>
322
+ Затем настройте ваш `app.vue` для использования layouts:
323
+
324
+ ```vue fileName="app.vue"
325
+ <template>
326
+ <NuxtLayout>
327
+ <NuxtPage />
328
+ </NuxtLayout>
329
+ </template>
515
330
  ```
516
331
 
517
- Затем используйте этот компонент на ваших страницах или в макете:
332
+ ### (Необязательно) Шаг 6b: Создайте Layout с навигацией
518
333
 
519
- ```vue fileName="app.vue"
334
+ Layouts в Nuxt позволяют определить общую структуру для ваших страниц. Создайте layout по умолчанию, который включает переключатель локали и навигацию:
335
+
336
+ ```vue fileName="layouts/default.vue"
520
337
  <script setup lang="ts">
521
- import { useIntlayer } from "vue-intlayer";
338
+ import Links from "~/components/Links.vue";
522
339
  import LocaleSwitcher from "~/components/LocaleSwitcher.vue";
523
-
524
- const content = useIntlayer("app"); // Создайте связанный файл декларации intlayer
525
340
  </script>
526
341
 
527
342
  <template>
@@ -530,15 +345,20 @@ const content = useIntlayer("app"); // Создайте связанный фа
530
345
  <LocaleSwitcher />
531
346
  </header>
532
347
  <main>
533
- <NuxtPage />
348
+ <slot />
534
349
  </main>
350
+
351
+ <Links href="/">Главная</Links>
352
+ <Links href="/about">О нас</Links>
535
353
  </div>
536
354
  </template>
537
355
  ```
538
356
 
539
- ### (Необязательно) Шаг 7: Добавьте локализованную маршрутизацию в ваше приложение
357
+ Компонент `Links` (показан ниже) гарантирует, что внутренние навигационные ссылки автоматически локализуются.
358
+
359
+ ### (Необязательно) Шаг 7: Добавьте локализованный роутинг в ваше приложение
540
360
 
541
- Nuxt автоматически обрабатывает локализованную маршрутизацию при использовании модуля `nuxt-intlayer`. Это автоматически создает маршруты для каждого языка на основе структуры вашего каталога страниц.
361
+ Nuxt автоматически обрабатывает локализованный роутинг при использовании модуля `nuxt-intlayer`. Это создает маршруты для каждого языка автоматически на основе структуры вашего каталога страниц.
542
362
 
543
363
  Пример:
544
364
 
@@ -550,213 +370,285 @@ pages/
550
370
  └── index.vue → /contact, /fr/contact, /es/contact
551
371
  ```
552
372
 
553
- Чтобы создать локализованную страницу, просто создайте ваши Vue-файлы в каталоге `pages/`:
373
+ Чтобы создать локализованные страницы, просто создайте ваши Vue-файлы в директории `pages/`. Вот два примера страниц:
374
+
375
+ **Главная страница (`pages/index.vue`):**
376
+
377
+ ```vue fileName="pages/index.vue"
378
+ <script setup lang="ts">
379
+ import { useIntlayer } from "vue-intlayer";
380
+
381
+ const content = useIntlayer("home-page");
382
+
383
+ useHead({
384
+ title: content.metaTitle.value,
385
+ meta: [
386
+ {
387
+ name: "description",
388
+ content: content.metaDescription.value,
389
+ },
390
+ ],
391
+ });
392
+ </script>
393
+
394
+ <template>
395
+ <h1><content.title /></h1>
396
+ </template>
397
+ ```
398
+
399
+ **Страница "О нас" (`pages/about.vue`):**
554
400
 
555
401
  ```vue fileName="pages/about.vue"
556
402
  <script setup lang="ts">
557
403
  import { useIntlayer } from "vue-intlayer";
558
404
 
559
- const content = useIntlayer("about");
405
+ const content = useIntlayer("about-page");
406
+
407
+ useHead({
408
+ title: content.metaTitle.raw, // Используйте .raw для доступа к примитивной строке
409
+ meta: [
410
+ {
411
+ name: "description",
412
+ content: content.metaDescription.raw, // Используйте .raw для доступа к примитивной строке
413
+ },
414
+ ],
415
+ });
560
416
  </script>
561
417
 
562
418
  <template>
563
- <div>
564
- <h1>{{ content.title }}</h1>
565
- <p>{{ content.description }}</p>
566
- </div>
419
+ <h1><content.title /></h1>
567
420
  </template>
568
421
  ```
569
422
 
423
+ > Примечание: `useHead` автоматически импортируется в Nuxt. Вы можете получать доступ к значениям контента, используя либо `.value` (реактивный), либо `.raw` (примитивная строка), в зависимости от ваших потребностей.
424
+
570
425
  Модуль `nuxt-intlayer` автоматически:
571
426
 
572
- - Определяет предпочтительный язык пользователя
573
- - Обрабатывает переключение языка через URL
427
+ - Определяет предпочитаемую локаль пользователя
428
+ - Обрабатывает переключение локали через URL
574
429
  - Устанавливает соответствующий атрибут `<html lang="">`
575
- - Управляет куки для языка
430
+ - Управляет куки локали
576
431
  - Перенаправляет пользователей на соответствующий локализованный URL
577
432
 
578
- ### (Необязательно) Шаг 8: Создание компонента локализованной ссылки
433
+ ### (Необязательно) Шаг 8: Создание локализованного компонента ссылок
579
434
 
580
- Чтобы обеспечить навигацию вашего приложения с учетом текущего языка, вы можете создать пользовательский компонент `LocalizedLink`. Этот компонент автоматически добавляет префикс текущего языка к внутренним URL.
581
-
582
- ```vue fileName="components/LocalizedLink.vue"
583
- <template>
584
- <NuxtLink :to="localizedHref" v-bind="$attrs">
585
- <slot />
586
- </NuxtLink>
587
- </template>
435
+ Чтобы навигация вашего приложения учитывала текущую локаль, вы можете создать пользовательский компонент `Links`. Этот компонент автоматически добавляет префикс текущего языка к внутренним URL, что важно для **SEO и обнаруживаемости страниц**.
588
436
 
437
+ ```vue fileName="components/Links.vue"
589
438
  <script setup lang="ts">
590
- import { computed } from "vue";
591
439
  import { getLocalizedUrl } from "intlayer";
592
440
  import { useLocale } from "vue-intlayer";
593
441
 
594
- const props = defineProps({
595
- to: {
596
- type: String,
597
- required: true,
598
- },
599
- });
442
+ interface Props {
443
+ href: string;
444
+ locale?: string;
445
+ }
446
+
447
+ const props = defineProps<Props>();
448
+
449
+ const { locale: currentLocale } = useLocale();
600
450
 
601
- const { locale } = useLocale();
451
+ // Вычисляем итоговый путь
452
+ const finalPath = computed(() => {
453
+ // 1. Проверяем, является ли ссылка внешней
454
+ const isExternal = /^https?:\/\//.test(props.href || "");
602
455
 
603
- // Проверяем, является ли ссылка внешней
604
- const isExternalLink = computed(() => /^https?:\/\//.test(props.to || ""));
456
+ // 2. Если внешняя, возвращаем как есть (NuxtLink обрабатывает генерацию тега <a>)
457
+ if (isExternal) return props.href;
605
458
 
606
- // Создаем локализованный href для внутренних ссылок
607
- const localizedHref = computed(() =>
608
- isExternalLink.value ? props.to : getLocalizedUrl(props.to, locale.value)
609
- );
459
+ // 3. Если ссылка внутренняя, локализуем URL
460
+ const targetLocale = props.locale || currentLocale.value;
461
+ return getLocalizedUrl(props.href, targetLocale);
462
+ });
610
463
  </script>
464
+
465
+ <template>
466
+ <NuxtLink :to="finalPath" v-bind="$attrs">
467
+ <slot />
468
+ </NuxtLink>
469
+ </template>
611
470
  ```
612
471
 
613
472
  Затем используйте этот компонент по всему вашему приложению:
614
473
 
615
- ```vue fileName="pages/index.vue"
474
+ ```vue fileName="layouts/default.vue"
475
+ <script setup lang="ts">
476
+ import Links from "~/components/Links.vue";
477
+ import LocaleSwitcher from "~/components/LocaleSwitcher.vue";
478
+ </script>
479
+
616
480
  <template>
617
481
  <div>
618
- <LocalizedLink to="/about">
619
- {{ content.aboutLink }}
620
- </LocalizedLink>
621
- <LocalizedLink to="/contact">
622
- {{ content.contactLink }}
623
- </LocalizedLink>
482
+ <header>
483
+ <LocaleSwitcher />
484
+ </header>
485
+ <main>
486
+ <slot />
487
+ </main>
488
+
489
+ <Links href="/">Главная</Links>
490
+ <Links href="/about">О нас</Links>
624
491
  </div>
625
492
  </template>
626
-
627
- <script setup lang="ts">
628
- import { useIntlayer } from "vue-intlayer";
629
- import LocalizedLink from "~/components/LocalizedLink.vue";
630
-
631
- const content = useIntlayer("home");
632
- </script>
633
493
  ```
634
494
 
635
- ### (Необязательно) Шаг 9: Обработка метаданных и SEO
495
+ > Используя `NuxtLink` с локализованными путями, вы обеспечиваете:
496
+ >
497
+ > - Поисковые системы могут сканировать и индексировать все языковые версии ваших страниц
498
+ > - Пользователи могут напрямую делиться локализованными URL
499
+ > - История браузера корректно работает с URL, содержащими префикс локали
500
+
501
+ ### (Необязательно) Шаг 9: Работа с метаданными и SEO
636
502
 
637
- Nuxt предоставляет отличные возможности для SEO. Вы можете использовать Intlayer для обработки локализованных метаданных:
503
+ Nuxt предоставляет отличные возможности для SEO через композицию `useHead` (автоматически импортируется). Вы можете использовать Intlayer для обработки локализованных метаданных, используя аксессоры `.raw` или `.value` для получения примитивного строкового значения:
638
504
 
639
505
  ```vue fileName="pages/about.vue"
640
506
  <script setup lang="ts">
641
- import { useSeoMeta } from "nuxt/app";
642
- import { getIntlayer } from "intlayer";
643
- import { useLocale } from "vue-intlayer";
507
+ import { useIntlayer } from "vue-intlayer";
644
508
 
645
- const { locale } = useLocale();
646
- const content = getIntlayer("about-meta", locale.value);
509
+ // useHead автоматически импортируется в Nuxt
510
+ const content = useIntlayer("about-page");
647
511
 
648
- useSeoMeta({
649
- title: content.title,
650
- description: content.description,
512
+ useHead({
513
+ title: content.metaTitle.raw, // Используйте .raw для доступа к примитивной строке
514
+ meta: [
515
+ {
516
+ name: "description",
517
+ content: content.metaDescription.raw, // Используйте .raw для доступа к примитивной строке
518
+ },
519
+ ],
651
520
  });
652
521
  </script>
653
522
 
654
523
  <template>
655
- <div>
656
- <h1>{{ content.pageTitle }}</h1>
657
- <p>{{ content.pageContent }}</p>
658
- </div>
524
+ <h1><content.title /></h1>
659
525
  </template>
660
526
  ```
661
527
 
528
+ > В качестве альтернативы, вы можете использовать функцию `import { getIntlayer } from "intlayer"`, чтобы получить контент без реактивности Vue.
529
+
530
+ > **Доступ к значениям контента:**
531
+ >
532
+ > - Используйте `.raw` для получения примитивного строкового значения (не реактивного)
533
+ > - Используйте `.value` для получения реактивного значения
534
+ > - Используйте синтаксис компонента `<content.key />` для поддержки Визуального Редактора
535
+
662
536
  Создайте соответствующее объявление контента:
663
537
 
664
- ```ts fileName="pages/about-meta.content.ts"
538
+ ```ts fileName="pages/about-page.content.ts" contentDeclarationFormat="typescript"
665
539
  import { t, type Dictionary } from "intlayer";
666
- import type { useSeoMeta } from "nuxt/app";
667
540
 
668
- const aboutMetaContent = {
669
- key: "about-meta",
541
+ const aboutPageContent = {
542
+ key: "about-page",
670
543
  content: {
671
- title: t({
672
- ru: "О нас - Моя компания",
544
+ metaTitle: t({
673
545
  en: "About Us - My Company",
674
546
  fr: "À Propos - Ma Société",
675
547
  es: "Acerca de Nosotros - Mi Empresa",
676
548
  }),
677
- description: t({
678
- ru: "Узнайте больше о нашей компании и нашей миссии",
679
- en: "Learn more about our company and our mission",
549
+ metaDescription: t({
550
+ en: "Узнайте больше о нашей компании и нашей миссии",
680
551
  fr: "En savoir plus sur notre société et notre mission",
681
552
  es: "Conozca más sobre nuestra empresa y nuestra misión",
682
553
  }),
554
+ title: t({
555
+ en: "О нас",
556
+ fr: "À Propos",
557
+ es: "Acerca de Nosotros",
558
+ }),
683
559
  },
684
- } satisfies Dictionary<Parameters<typeof useSeoMeta>[0]>;
560
+ } satisfies Dictionary;
685
561
 
686
- export default aboutMetaContent;
562
+ export default aboutPageContent;
687
563
  ```
688
564
 
689
- ```typescript fileName="pages/about-meta.content.mjs" contentDeclarationFormat="esm"
565
+ ```javascript fileName="pages/about-page.content.mjs" contentDeclarationFormat="esm"
690
566
  import { t } from "intlayer";
691
567
 
692
568
  /** @type {import('intlayer').Dictionary} */
693
- const aboutMetaContent = {
694
- key: "about-meta",
569
+ const aboutPageContent = {
570
+ key: "about-page",
695
571
  content: {
696
- title: t({
697
- zh: "关于我们 - 我的公司",
572
+ metaTitle: t({
698
573
  en: "О нас - Моя компания",
699
574
  fr: "À Propos - Ma Société",
700
575
  es: "Acerca de Nosotros - Mi Empresa",
701
576
  }),
702
- description: t({
703
- zh: "了解更多关于我们公司和我们的使命",
577
+ metaDescription: t({
704
578
  en: "Узнайте больше о нашей компании и нашей миссии",
705
579
  fr: "En savoir plus sur notre société et notre mission",
706
580
  es: "Conozca más sobre nuestra empresa y nuestra misión",
707
581
  }),
582
+ title: t({
583
+ en: "О нас",
584
+ fr: "À Propos",
585
+ es: "Acerca de Nosotros",
586
+ }),
708
587
  },
709
588
  };
710
589
 
711
- export default aboutMetaContent;
590
+ export default aboutPageContent;
712
591
  ```
713
592
 
714
- ```typescript fileName="pages/about-meta.content.js" contentDeclarationFormat="cjs"
593
+ ```javascript fileName="pages/about-page.content.cjs" contentDeclarationFormat="commonjs"
715
594
  const { t } = require("intlayer");
716
595
 
717
596
  /** @type {import('intlayer').Dictionary} */
718
- const aboutMetaContent = {
719
- key: "about-meta",
597
+ const aboutPageContent = {
598
+ key: "about-page",
720
599
  content: {
721
- title: t({
722
- zh: "关于我们 - 我的公司",
600
+ metaTitle: t({
723
601
  en: "О нас - Моя компания",
724
602
  fr: "À Propos - Ma Société",
725
603
  es: "Acerca de Nosotros - Mi Empresa",
726
604
  }),
727
- description: t({
728
- zh: "了解更多关于我们公司和我们的使命",
729
- en: "Узнайте больше о нашей компании и нашей миссии",
605
+ metaDescription: t({
606
+ en: "Learn more about our company and our mission",
730
607
  fr: "En savoir plus sur notre société et notre mission",
731
608
  es: "Conozca más sobre nuestra empresa y nuestra misión",
609
+ ru: "Узнайте больше о нашей компании и нашей миссии",
610
+ }),
611
+ title: t({
612
+ en: "About Us",
613
+ fr: "À Propos",
614
+ es: "Acerca de Nosotros",
615
+ ru: "О нас",
732
616
  }),
733
617
  },
734
618
  };
735
619
 
736
- module.exports = aboutMetaContent;
620
+ module.exports = aboutPageContent;
737
621
  ```
738
622
 
739
- ```json fileName="pages/about-meta.content.json" contentDeclarationFormat="json"
623
+ ```json fileName="pages/about-page.content.json" contentDeclarationFormat="json"
740
624
  {
741
- "key": "about-meta",
625
+ "$schema": "https://intlayer.org/schema.json",
626
+ "key": "about-page",
742
627
  "content": {
743
- "title": {
628
+ "metaTitle": {
744
629
  "nodeType": "translation",
745
- "translations": {
746
- "zh": "关于我们 - 我的公司",
747
- "en": "О нас - Моя компания",
630
+ "translation": {
631
+ "en": "About Us - My Company",
748
632
  "fr": "À Propos - Ma Société",
749
- "es": "Acerca de Nosotros - Mi Empresa"
633
+ "es": "Acerca de Nosotros - Mi Empresa",
634
+ "ru": "О нас - Моя компания"
750
635
  }
751
636
  },
752
- "description": {
637
+ "metaDescription": {
753
638
  "nodeType": "translation",
754
- "translations": {
755
- "zh": "了解更多关于我们公司和我们的使命",
756
- "en": "Learn more about our company and our mission",
639
+ "translation": {
640
+ "en": "Узнайте больше о нашей компании и нашей миссии",
757
641
  "fr": "En savoir plus sur notre société et notre mission",
758
642
  "es": "Conozca más sobre nuestra empresa y nuestra misión"
759
643
  }
644
+ },
645
+ "title": {
646
+ "nodeType": "translation",
647
+ "translation": {
648
+ "en": "О нас",
649
+ "fr": "À Propos",
650
+ "es": "Acerca de Nosotros"
651
+ }
760
652
  }
761
653
  }
762
654
  }
@@ -766,27 +658,27 @@ module.exports = aboutMetaContent;
766
658
 
767
659
  Intlayer использует расширение модулей (module augmentation), чтобы использовать преимущества TypeScript и сделать вашу кодовую базу более надежной.
768
660
 
769
- ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
661
+ ![Автозаполнение](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
770
662
 
771
- ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
663
+ ![Ошибка перевода](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
772
664
 
773
- Убедитесь, что ваша конфигурация TypeScript включает автоматически сгенерированные типы.
665
+ Убедитесь, что ваша конфигурация TypeScript включает автогенерируемые типы.
774
666
 
775
667
  ```json5 fileName="tsconfig.json"
776
668
  {
777
669
  // ... Ваши существующие настройки TypeScript
778
670
  "include": [
779
- // ... Ваши существующие конфигурации TypeScript
780
- ".intlayer/**/*.ts", // Включить автоматически сгенерированные типы
671
+ // ... Ваши существующие настройки TypeScript
672
+ ".intlayer/**/*.ts", // Включить автогенерируемые типы
781
673
  ],
782
674
  }
783
675
  ```
784
676
 
785
677
  ### Конфигурация Git
786
678
 
787
- Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш репозиторий Git.
679
+ Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш Git-репозиторий.
788
680
 
789
- Для этого вы можете добавить следующие инструкции в файл `.gitignore`:
681
+ Для этого вы можете добавить следующие инструкции в ваш файл `.gitignore`:
790
682
 
791
683
  ```plaintext fileName=".gitignore"
792
684
  # Игнорировать файлы, сгенерированные Intlayer
@@ -795,23 +687,21 @@ Intlayer использует расширение модулей (module augmen
795
687
 
796
688
  ### Расширение VS Code
797
689
 
798
- Для улучшения вашего опыта разработки с Intlayer вы можете установить официальное **расширение Intlayer для VS Code**.
690
+ Чтобы улучшить ваш опыт разработки с Intlayer, вы можете установить официальное расширение **Intlayer VS Code Extension**.
799
691
 
800
692
  [Установить из VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
801
693
 
802
694
  Это расширение предоставляет:
803
695
 
804
- - **Автодополнение** для ключей переводов.
696
+ - **Автозаполнение** ключей переводов.
805
697
  - **Обнаружение ошибок в реальном времени** для отсутствующих переводов.
806
- - **Встроенный просмотр** переведенного контента.
807
- - **Быстрые действия** для удобного создания и обновления переводов.
698
+ - **Встроенный просмотр** переведённого контента.
699
+ - **Быстрые действия** для лёгкого создания и обновления переводов.
808
700
 
809
- Для получения дополнительной информации о том, как использовать расширение, обратитесь к [документации расширения Intlayer для VS Code](https://intlayer.org/doc/vs-code-extension).
701
+ Для получения дополнительной информации о том, как использовать расширение, обратитесь к [документации Intlayer VS Code Extension](https://intlayer.org/doc/vs-code-extension).
810
702
 
811
703
  ---
812
704
 
813
- ### Продвинутые возможности
814
-
815
- Для расширения возможностей вы можете реализовать [визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md) или вынести ваш контент во внешний [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md).
705
+ ### Продвинуться дальше
816
706
 
817
- ---
707
+ Чтобы продвинуться дальше, вы можете реализовать [визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md) или вынести ваш контент, используя [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md).