@intlayer/docs 7.3.11 → 7.3.13

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