@intlayer/docs 6.1.6-canary.0 → 6.1.6

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 (242) hide show
  1. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +71 -80
  2. package/dist/cjs/generated/docs.entry.cjs +16 -0
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +16 -0
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +1 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/intlayer_with_angular.md +2 -2
  9. package/docs/ar/intlayer_with_astro.md +246 -0
  10. package/docs/ar/intlayer_with_create_react_app.md +3 -2
  11. package/docs/ar/intlayer_with_express.md +2 -2
  12. package/docs/ar/intlayer_with_nestjs.md +2 -2
  13. package/docs/ar/intlayer_with_nextjs_14.md +2 -2
  14. package/docs/ar/intlayer_with_nextjs_15.md +2 -2
  15. package/docs/ar/intlayer_with_nextjs_page_router.md +2 -2
  16. package/docs/ar/intlayer_with_nuxt.md +2 -2
  17. package/docs/ar/intlayer_with_react_native+expo.md +11 -20
  18. package/docs/ar/intlayer_with_react_router_v7.md +195 -241
  19. package/docs/ar/intlayer_with_tanstack.md +198 -272
  20. package/docs/ar/intlayer_with_vite+preact.md +9 -9
  21. package/docs/ar/intlayer_with_vite+react.md +7 -7
  22. package/docs/ar/intlayer_with_vite+vue.md +9 -9
  23. package/docs/de/intlayer_with_angular.md +2 -2
  24. package/docs/de/intlayer_with_astro.md +246 -0
  25. package/docs/de/intlayer_with_create_react_app.md +2 -2
  26. package/docs/de/intlayer_with_express.md +2 -2
  27. package/docs/de/intlayer_with_nestjs.md +2 -2
  28. package/docs/de/intlayer_with_nextjs_14.md +2 -2
  29. package/docs/de/intlayer_with_nextjs_15.md +2 -2
  30. package/docs/de/intlayer_with_nextjs_page_router.md +2 -2
  31. package/docs/de/intlayer_with_nuxt.md +2 -2
  32. package/docs/de/intlayer_with_react_native+expo.md +11 -20
  33. package/docs/de/intlayer_with_react_router_v7.md +193 -242
  34. package/docs/de/intlayer_with_tanstack.md +194 -266
  35. package/docs/de/intlayer_with_vite+preact.md +9 -9
  36. package/docs/de/intlayer_with_vite+react.md +9 -9
  37. package/docs/de/intlayer_with_vite+vue.md +11 -11
  38. package/docs/de/packages/vite-intlayer/index.md +3 -3
  39. package/docs/en/how_works_intlayer.md +1 -1
  40. package/docs/en/index.md +1 -1
  41. package/docs/en/intlayer_cli.md +1 -1
  42. package/docs/en/intlayer_with_angular.md +4 -4
  43. package/docs/en/intlayer_with_astro.md +246 -0
  44. package/docs/en/intlayer_with_create_react_app.md +4 -4
  45. package/docs/en/intlayer_with_express.md +3 -3
  46. package/docs/en/intlayer_with_lynx+react.md +1 -1
  47. package/docs/en/intlayer_with_nestjs.md +2 -2
  48. package/docs/en/intlayer_with_nextjs_14.md +13 -4
  49. package/docs/en/intlayer_with_nextjs_15.md +13 -4
  50. package/docs/en/intlayer_with_nextjs_page_router.md +5 -5
  51. package/docs/en/intlayer_with_nuxt.md +4 -4
  52. package/docs/en/intlayer_with_react_native+expo.md +46 -24
  53. package/docs/en/intlayer_with_react_router_v7.md +164 -211
  54. package/docs/en/intlayer_with_tanstack.md +166 -241
  55. package/docs/en/intlayer_with_vite+preact.md +12 -12
  56. package/docs/en/intlayer_with_vite+react.md +12 -12
  57. package/docs/en/intlayer_with_vite+solid.md +2 -2
  58. package/docs/en/intlayer_with_vite+svelte.md +2 -2
  59. package/docs/en/intlayer_with_vite+vue.md +12 -12
  60. package/docs/en/introduction.md +1 -1
  61. package/docs/en/packages/next-intlayer/useDictionary.md +1 -1
  62. package/docs/en/packages/next-intlayer/useIntlayer.md +1 -1
  63. package/docs/en/packages/react-intlayer/useDictionary.md +1 -1
  64. package/docs/en/packages/react-intlayer/useI18n.md +1 -1
  65. package/docs/en/packages/react-intlayer/useIntlayer.md +1 -1
  66. package/docs/en/releases/v6.md +1 -0
  67. package/docs/en/roadmap.md +1 -1
  68. package/docs/en-GB/intlayer_with_angular.md +3 -3
  69. package/docs/en-GB/intlayer_with_astro.md +246 -0
  70. package/docs/en-GB/intlayer_with_create_react_app.md +5 -4
  71. package/docs/en-GB/intlayer_with_express.md +2 -2
  72. package/docs/en-GB/intlayer_with_nestjs.md +2 -2
  73. package/docs/en-GB/intlayer_with_nextjs_14.md +4 -4
  74. package/docs/en-GB/intlayer_with_nextjs_15.md +2 -2
  75. package/docs/en-GB/intlayer_with_nextjs_page_router.md +2 -2
  76. package/docs/en-GB/intlayer_with_nuxt.md +2 -2
  77. package/docs/en-GB/intlayer_with_react_native+expo.md +11 -20
  78. package/docs/en-GB/intlayer_with_react_router_v7.md +171 -220
  79. package/docs/en-GB/intlayer_with_tanstack.md +174 -248
  80. package/docs/en-GB/intlayer_with_vite+preact.md +9 -9
  81. package/docs/en-GB/intlayer_with_vite+react.md +9 -9
  82. package/docs/en-GB/intlayer_with_vite+vue.md +11 -11
  83. package/docs/en-GB/packages/next-intlayer/useIntlayer.md +1 -1
  84. package/docs/en-GB/packages/react-intlayer/useIntlayer.md +1 -1
  85. package/docs/es/intlayer_with_angular.md +2 -2
  86. package/docs/es/intlayer_with_astro.md +246 -0
  87. package/docs/es/intlayer_with_create_react_app.md +3 -2
  88. package/docs/es/intlayer_with_express.md +2 -2
  89. package/docs/es/intlayer_with_nextjs_14.md +2 -2
  90. package/docs/es/intlayer_with_nextjs_15.md +2 -2
  91. package/docs/es/intlayer_with_react_native+expo.md +11 -20
  92. package/docs/es/intlayer_with_react_router_v7.md +188 -232
  93. package/docs/es/intlayer_with_tanstack.md +203 -273
  94. package/docs/es/intlayer_with_vite+preact.md +7 -7
  95. package/docs/es/intlayer_with_vite+react.md +7 -7
  96. package/docs/es/intlayer_with_vite+vue.md +9 -9
  97. package/docs/fr/intlayer_with_angular.md +2 -2
  98. package/docs/fr/intlayer_with_astro.md +246 -0
  99. package/docs/fr/intlayer_with_create_react_app.md +3 -2
  100. package/docs/fr/intlayer_with_express.md +2 -2
  101. package/docs/fr/intlayer_with_nestjs.md +2 -2
  102. package/docs/fr/intlayer_with_nextjs_14.md +2 -2
  103. package/docs/fr/intlayer_with_react_native+expo.md +11 -20
  104. package/docs/fr/intlayer_with_react_router_v7.md +188 -248
  105. package/docs/fr/intlayer_with_tanstack.md +192 -265
  106. package/docs/fr/intlayer_with_vite+preact.md +7 -7
  107. package/docs/fr/intlayer_with_vite+react.md +7 -7
  108. package/docs/fr/intlayer_with_vite+vue.md +9 -9
  109. package/docs/hi/intlayer_cli.md +1 -4
  110. package/docs/hi/intlayer_with_angular.md +2 -2
  111. package/docs/hi/intlayer_with_astro.md +246 -0
  112. package/docs/hi/intlayer_with_create_react_app.md +2 -2
  113. package/docs/hi/intlayer_with_express.md +2 -2
  114. package/docs/hi/intlayer_with_nestjs.md +2 -2
  115. package/docs/hi/intlayer_with_nextjs_14.md +2 -2
  116. package/docs/hi/intlayer_with_nextjs_15.md +2 -2
  117. package/docs/hi/intlayer_with_nextjs_page_router.md +2 -2
  118. package/docs/hi/intlayer_with_nuxt.md +2 -2
  119. package/docs/hi/intlayer_with_react_native+expo.md +11 -20
  120. package/docs/hi/intlayer_with_react_router_v7.md +199 -243
  121. package/docs/hi/intlayer_with_tanstack.md +210 -285
  122. package/docs/hi/intlayer_with_vite+preact.md +9 -9
  123. package/docs/hi/intlayer_with_vite+react.md +9 -9
  124. package/docs/hi/intlayer_with_vite+solid.md +1 -1
  125. package/docs/hi/intlayer_with_vite+vue.md +11 -11
  126. package/docs/it/intlayer_with_angular.md +2 -2
  127. package/docs/it/intlayer_with_astro.md +246 -0
  128. package/docs/it/intlayer_with_create_react_app.md +3 -2
  129. package/docs/it/intlayer_with_express.md +2 -2
  130. package/docs/it/intlayer_with_nestjs.md +2 -2
  131. package/docs/it/intlayer_with_nextjs_14.md +2 -2
  132. package/docs/it/intlayer_with_nextjs_15.md +2 -2
  133. package/docs/it/intlayer_with_nextjs_page_router.md +2 -2
  134. package/docs/it/intlayer_with_nuxt.md +2 -2
  135. package/docs/it/intlayer_with_react_native+expo.md +11 -21
  136. package/docs/it/intlayer_with_react_router_v7.md +195 -242
  137. package/docs/it/intlayer_with_tanstack.md +203 -267
  138. package/docs/it/intlayer_with_vite+preact.md +9 -9
  139. package/docs/it/intlayer_with_vite+react.md +13 -11
  140. package/docs/it/intlayer_with_vite+vue.md +11 -11
  141. package/docs/ja/intlayer_with_angular.md +2 -2
  142. package/docs/ja/intlayer_with_astro.md +246 -0
  143. package/docs/ja/intlayer_with_create_react_app.md +3 -2
  144. package/docs/ja/intlayer_with_express.md +2 -2
  145. package/docs/ja/intlayer_with_nestjs.md +2 -2
  146. package/docs/ja/intlayer_with_nextjs_14.md +2 -2
  147. package/docs/ja/intlayer_with_nextjs_15.md +2 -2
  148. package/docs/ja/intlayer_with_nextjs_page_router.md +2 -2
  149. package/docs/ja/intlayer_with_nuxt.md +2 -2
  150. package/docs/ja/intlayer_with_react_native+expo.md +18 -29
  151. package/docs/ja/intlayer_with_react_router_v7.md +204 -250
  152. package/docs/ja/intlayer_with_tanstack.md +218 -286
  153. package/docs/ja/intlayer_with_vite+preact.md +9 -9
  154. package/docs/ja/intlayer_with_vite+react.md +11 -11
  155. package/docs/ja/intlayer_with_vite+vue.md +11 -11
  156. package/docs/ko/intlayer_with_angular.md +2 -2
  157. package/docs/ko/intlayer_with_astro.md +246 -0
  158. package/docs/ko/intlayer_with_create_react_app.md +3 -2
  159. package/docs/ko/intlayer_with_express.md +2 -2
  160. package/docs/ko/intlayer_with_nestjs.md +2 -2
  161. package/docs/ko/intlayer_with_nextjs_14.md +2 -2
  162. package/docs/ko/intlayer_with_nextjs_15.md +2 -2
  163. package/docs/ko/intlayer_with_nextjs_page_router.md +2 -2
  164. package/docs/ko/intlayer_with_nuxt.md +2 -2
  165. package/docs/ko/intlayer_with_react_native+expo.md +19 -28
  166. package/docs/ko/intlayer_with_react_router_v7.md +190 -244
  167. package/docs/ko/intlayer_with_tanstack.md +200 -270
  168. package/docs/ko/intlayer_with_vite+preact.md +9 -9
  169. package/docs/ko/intlayer_with_vite+react.md +9 -9
  170. package/docs/ko/intlayer_with_vite+vue.md +11 -11
  171. package/docs/pt/intlayer_with_angular.md +2 -2
  172. package/docs/pt/intlayer_with_astro.md +246 -0
  173. package/docs/pt/intlayer_with_create_react_app.md +3 -2
  174. package/docs/pt/intlayer_with_express.md +2 -2
  175. package/docs/pt/intlayer_with_nestjs.md +2 -2
  176. package/docs/pt/intlayer_with_nextjs_14.md +2 -2
  177. package/docs/pt/intlayer_with_nextjs_15.md +2 -2
  178. package/docs/pt/intlayer_with_nextjs_page_router.md +2 -2
  179. package/docs/pt/intlayer_with_nuxt.md +2 -2
  180. package/docs/pt/intlayer_with_react_native+expo.md +11 -20
  181. package/docs/pt/intlayer_with_react_router_v7.md +7 -13
  182. package/docs/pt/intlayer_with_tanstack.md +183 -258
  183. package/docs/pt/intlayer_with_vite+preact.md +9 -9
  184. package/docs/pt/intlayer_with_vite+react.md +9 -9
  185. package/docs/pt/intlayer_with_vite+vue.md +9 -9
  186. package/docs/ru/intlayer_with_angular.md +2 -2
  187. package/docs/ru/intlayer_with_astro.md +246 -0
  188. package/docs/ru/intlayer_with_create_react_app.md +3 -2
  189. package/docs/ru/intlayer_with_express.md +2 -2
  190. package/docs/ru/intlayer_with_nestjs.md +2 -2
  191. package/docs/ru/intlayer_with_nextjs_14.md +2 -2
  192. package/docs/ru/intlayer_with_nextjs_15.md +2 -2
  193. package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
  194. package/docs/ru/intlayer_with_nuxt.md +2 -2
  195. package/docs/ru/intlayer_with_react_native+expo.md +11 -20
  196. package/docs/ru/intlayer_with_react_router_v7.md +192 -238
  197. package/docs/ru/intlayer_with_tanstack.md +197 -269
  198. package/docs/ru/intlayer_with_vite+preact.md +9 -9
  199. package/docs/ru/intlayer_with_vite+react.md +9 -9
  200. package/docs/ru/intlayer_with_vite+vue.md +11 -11
  201. package/docs/tr/how_works_intlayer.md +1 -1
  202. package/docs/tr/index.md +1 -1
  203. package/docs/tr/intlayer_cli.md +1 -1
  204. package/docs/tr/intlayer_with_angular.md +4 -4
  205. package/docs/tr/intlayer_with_astro.md +246 -0
  206. package/docs/tr/intlayer_with_create_react_app.md +4 -4
  207. package/docs/tr/intlayer_with_express.md +3 -3
  208. package/docs/tr/intlayer_with_lynx+react.md +1 -1
  209. package/docs/tr/intlayer_with_nestjs.md +2 -2
  210. package/docs/tr/intlayer_with_nextjs_14.md +2 -2
  211. package/docs/tr/intlayer_with_nextjs_15.md +4 -4
  212. package/docs/tr/intlayer_with_nextjs_page_router.md +5 -5
  213. package/docs/tr/intlayer_with_nuxt.md +4 -4
  214. package/docs/tr/intlayer_with_react_native+expo.md +12 -21
  215. package/docs/tr/intlayer_with_react_router_v7.md +222 -267
  216. package/docs/tr/intlayer_with_tanstack.md +400 -303
  217. package/docs/tr/intlayer_with_vite+preact.md +12 -12
  218. package/docs/tr/intlayer_with_vite+react.md +12 -12
  219. package/docs/tr/intlayer_with_vite+solid.md +2 -2
  220. package/docs/tr/intlayer_with_vite+svelte.md +2 -2
  221. package/docs/tr/intlayer_with_vite+vue.md +12 -12
  222. package/docs/tr/introduction.md +1 -1
  223. package/docs/tr/packages/react-intlayer/useDictionary.md +1 -1
  224. package/docs/tr/packages/react-intlayer/useI18n.md +1 -1
  225. package/docs/tr/roadmap.md +1 -1
  226. package/docs/zh/intlayer_with_angular.md +2 -2
  227. package/docs/zh/intlayer_with_astro.md +246 -0
  228. package/docs/zh/intlayer_with_create_react_app.md +3 -2
  229. package/docs/zh/intlayer_with_express.md +2 -2
  230. package/docs/zh/intlayer_with_nestjs.md +2 -2
  231. package/docs/zh/intlayer_with_nextjs_14.md +2 -2
  232. package/docs/zh/intlayer_with_nextjs_15.md +2 -2
  233. package/docs/zh/intlayer_with_nextjs_page_router.md +2 -2
  234. package/docs/zh/intlayer_with_nuxt.md +2 -2
  235. package/docs/zh/intlayer_with_react_native+expo.md +19 -28
  236. package/docs/zh/intlayer_with_react_router_v7.md +200 -248
  237. package/docs/zh/intlayer_with_tanstack.md +208 -283
  238. package/docs/zh/intlayer_with_vite+preact.md +9 -9
  239. package/docs/zh/intlayer_with_vite+react.md +9 -9
  240. package/docs/zh/intlayer_with_vite+vue.md +9 -9
  241. package/package.json +11 -11
  242. package/src/generated/docs.entry.ts +16 -0
@@ -15,10 +15,8 @@ keywords:
15
15
  slugs:
16
16
  - doc
17
17
  - environment
18
- - vite-and-react
19
18
  - tanstack-start
20
- applicationTemplate: https://github.com/AydinTheFirst/tanstack-start-intlayer
21
- author: AydinTheFirst
19
+ applicationTemplate: https://github.com/aymericzip/intlayer-tanstack-start-template
22
20
  ---
23
21
 
24
22
  # Начало работы с интернационализацией (i18n) с Intlayer и Tanstack Start
@@ -33,9 +31,9 @@ author: AydinTheFirst
33
31
 
34
32
  - **Легко управлять переводами** с использованием декларативных словарей на уровне компонентов.
35
33
  - **Динамически локализовать метаданные**, маршруты и контент.
36
- - **Обеспечить поддержку TypeScript** с автогенерируемыми типами, улучшая автодополнение и обнаружение ошибок.
37
- - **Воспользоваться расширенными возможностями**, такими как динамическое определение и переключение локали.
38
- - **Включите маршрутизацию с учётом локали** с помощью файловой системы маршрутизации Tanstack Start.
34
+ - **Обеспечить поддержку TypeScript** с помощью автогенерируемых типов, улучшая автодополнение и обнаружение ошибок.
35
+ - **Воспользоваться расширенными функциями**, такими как динамическое определение и переключение локали.
36
+ - **Включите маршрутизацию с учетом локали** с помощью файловой системы маршрутизации Tanstack Start.
39
37
 
40
38
  ---
41
39
 
@@ -47,7 +45,7 @@ author: AydinTheFirst
47
45
 
48
46
  ### Шаг 2: Установите пакеты Intlayer
49
47
 
50
- Установите необходимые пакеты с помощью предпочитаемого менеджера пакетов:
48
+ Установите необходимые пакеты, используя предпочитаемый менеджер пакетов:
51
49
 
52
50
  ```bash packageManager="npm"
53
51
  npm install intlayer react-intlayer
@@ -69,13 +67,13 @@ pnpm add vite-intlayer --save-dev
69
67
  Пакет, который интегрирует Intlayer с приложением React. Он предоставляет провайдеры контекста и хуки для интернационализации в React.
70
68
 
71
69
  - **vite-intlayer**
72
- Включает плагин Vite для интеграции Intlayer с [сборщиком Vite](https://vite.dev/guide/why.html#why-bundle-for-production), а также промежуточное ПО для определения предпочтительной локали пользователя, управления cookie и обработки перенаправления URL.
70
+ Включает плагин Vite для интеграции Intlayer с [сборщиком Vite](https://vite.dev/guide/why.html#why-bundle-for-production), а также промежуточное ПО для определения предпочтительной локали пользователя, управления куки и обработки перенаправления URL.
73
71
 
74
72
  ### Шаг 3: Конфигурация вашего проекта
75
73
 
76
74
  Создайте файл конфигурации для настройки языков вашего приложения:
77
75
 
78
- ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
76
+ ```typescript fileName="intlayer.config.ts"
79
77
  import type { IntlayerConfig } from "intlayer";
80
78
 
81
79
  import { Locales } from "intlayer";
@@ -83,79 +81,31 @@ import { Locales } from "intlayer";
83
81
  const config: IntlayerConfig = {
84
82
  internationalization: {
85
83
  defaultLocale: Locales.ENGLISH, // Язык по умолчанию
86
- locales: [
87
- Locales.ENGLISH, // Английский
88
- Locales.FRENCH, // Французский
89
- Locales.SPANISH, // Испанский
90
- // Ваши другие языки
91
- ],
84
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // Поддерживаемые языки
92
85
  },
93
86
  };
94
87
 
95
88
  export default config;
96
89
  ```
97
90
 
98
- ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
99
- import { Locales } from "intlayer";
100
-
101
- /** @type {import('intlayer').IntlayerConfig} */
102
- const config = {
103
- internationalization: {
104
- defaultLocale: Locales.ENGLISH, // Язык по умолчанию
105
- locales: [
106
- Locales.ENGLISH, // Английский
107
- Locales.FRENCH, // Французский
108
- Locales.SPANISH, // Испанский
109
- // Ваши другие языки
110
- ],
111
- },
112
- };
113
-
114
- export default config;
115
- ```
116
-
117
- ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
118
- const { Locales } = require("intlayer");
119
-
120
- /** @type {import('intlayer').IntlayerConfig} */
121
- const config = {
122
- internationalization: {
123
- defaultLocale: Locales.ENGLISH, // Язык по умолчанию
124
- locales: [
125
- Locales.ENGLISH, // Английский
126
- Locales.FRENCH, // Французский
127
- Locales.SPANISH, // Испанский
128
- // Ваши другие языки
129
- ],
130
- },
131
- };
132
-
133
- module.exports = config;
134
- ```
135
-
136
- > Через этот конфигурационный файл вы можете настроить локализованные URL, перенаправления в middleware, имена cookie, расположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к [документации по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md).
91
+ > С помощью этого файла конфигурации вы можете настроить локализованные URL, перенаправление через middleware, имена cookie, расположение и расширение ваших объявлений контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к [документации по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md).
137
92
 
138
93
  ### Шаг 4: Интеграция Intlayer в вашу конфигурацию Vite
139
94
 
140
95
  Добавьте плагин intlayer в вашу конфигурацию:
141
96
 
142
- ```typescript fileName="vite.config.ts" codeFormat="typescript"
97
+ ```typescript fileName="vite.config.ts"
143
98
  import { reactRouter } from "@react-router/dev/vite";
144
99
  import { defineConfig } from "vite";
145
- import { intlayerMiddlewarePlugin, intlayer } from "vite-intlayer";
100
+ import { intlayer } from "vite-intlayer";
146
101
  import tsconfigPaths from "vite-tsconfig-paths";
147
102
 
148
103
  export default defineConfig({
149
- plugins: [
150
- reactRouter(),
151
- tsconfigPaths(),
152
- intlayer(),
153
- intlayerMiddlewarePlugin(),
154
- ],
104
+ plugins: [reactRouter(), tsconfigPaths(), intlayer()],
155
105
  });
156
106
  ```
157
107
 
158
- > Плагин Vite `intlayer()` используется для интеграции Intlayer с Vite. Он обеспечивает сборку файлов деклараций контента и их мониторинг в режиме разработки. Также он определяет переменные окружения Intlayer внутри приложения Vite. Кроме того, он предоставляет алиасы для оптимизации производительности.
108
+ > Плагин Vite `intlayer()` используется для интеграции Intlayer с Vite. Он обеспечивает сборку файлов деклараций контента и отслеживает их в режиме разработки. Также он определяет переменные окружения Intlayer внутри приложения Vite. Дополнительно плагин предоставляет алиасы для оптимизации производительности.
159
109
 
160
110
  ### Шаг 5: Создайте компоненты макета
161
111
 
@@ -163,10 +113,8 @@ export default defineConfig({
163
113
 
164
114
  #### Корневой макет
165
115
 
166
- ```tsx fileName="src/routes/{-$locale}/route.tsx" codeFormat="typescript"
167
- // src/routes/{-$locale}/route.tsx
116
+ ```tsx fileName="src/routes/{-$locale}/route.tsx"
168
117
  import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
169
- import { configuration } from "intlayer";
170
118
  import { IntlayerProvider, useLocale } from "react-intlayer";
171
119
 
172
120
  import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes";
@@ -176,21 +124,22 @@ export const Route = createFileRoute("/{-$locale}")({
176
124
  });
177
125
 
178
126
  function LayoutComponent() {
127
+ const { defaultLocale } = useLocale();
179
128
  const { locale } = Route.useParams();
180
129
 
181
130
  return (
182
- <IntlayerProvider locale={locale}>
131
+ <IntlayerProvider locale={defaultLocale}>
183
132
  <Outlet />
184
133
  </IntlayerProvider>
185
134
  );
186
135
  }
187
136
  ```
188
137
 
189
- ### Шаг 6: Объявите Ваш Контент
138
+ ### Шаг 6: Объявите ваш контент
190
139
 
191
- Создайте и управляйте декларациями контента для хранения переводов:
140
+ Создавайте и управляйте объявлениями контента для хранения переводов:
192
141
 
193
- ```tsx fileName="src/contents/page.content.ts" contentDeclarationFormat="typescript"
142
+ ```tsx fileName="src/contents/page.content.ts"
194
143
  import type { Dictionary } from "intlayer";
195
144
 
196
145
  import { t } from "intlayer";
@@ -199,25 +148,29 @@ const appContent = {
199
148
  content: {
200
149
  links: {
201
150
  about: t({
151
+ ru: "О проекте",
202
152
  en: "About",
203
153
  es: "Acerca de",
204
154
  fr: "À propos",
205
155
  }),
206
156
  home: t({
207
- en: "Главная",
157
+ ru: "Главная",
158
+ en: "Home",
208
159
  es: "Inicio",
209
160
  fr: "Accueil",
210
161
  }),
211
162
  },
212
163
  meta: {
213
164
  description: t({
214
- en: "Это пример использования Intlayer с TanStack Router",
165
+ ru: "Это пример использования Intlayer с TanStack Router",
166
+ en: "This is an example of using Intlayer with TanStack Router",
215
167
  es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
216
168
  fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
217
169
  }),
218
170
  },
219
171
  title: t({
220
- en: "Добро пожаловать в Intlayer + TanStack Router",
172
+ ru: "Добро пожаловать в Intlayer + TanStack Router",
173
+ en: "Welcome to Intlayer + TanStack Router",
221
174
  es: "Bienvenido a Intlayer + TanStack Router",
222
175
  fr: "Bienvenue à Intlayer + TanStack Router",
223
176
  }),
@@ -228,7 +181,7 @@ const appContent = {
228
181
  export default appContent;
229
182
  ```
230
183
 
231
- > Ваши объявления контента могут быть определены в любом месте вашего приложения, как только они будут включены в каталог `contentDir` (по умолчанию, `./app`). И соответствовать расширению файла объявления контента (по умолчанию, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
184
+ > Ваши объявления контента могут быть определены в любом месте вашего приложения, как только они включены в директорию `contentDir` (по умолчанию, `./app`). И соответствуют расширению файла объявления контента (по умолчанию, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
232
185
 
233
186
  > Для получения дополнительной информации обратитесь к [документации по объявлениям контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/get_started.md).
234
187
 
@@ -236,59 +189,99 @@ export default appContent;
236
189
 
237
190
  Создайте компонент `LocalizedLink` для навигации с учетом локали:
238
191
 
239
- ```tsx fileName="src/components/localized-link.tsx" codeFormat="typescript"
240
- // src/components/localized-link.tsx
241
- // eslint-disable-next-line no-restricted-imports
242
- import { Link, type LinkProps } from "@tanstack/react-router";
243
- import { getLocalizedUrl } from "intlayer";
244
- import { useLocale } from "react-intlayer";
192
+ ```tsx fileName="src/components/localized-link.tsx"
193
+ import type { FC } from "react";
194
+
195
+ import { Link, type LinkComponentProps } from "@tanstack/react-router";
196
+ import { useLocale } from "react.intlayer";
197
+
198
+ export const LOCALE_ROUTE = "{-$locale}" as const;
199
+
200
+ // Основная утилита
201
+ export type RemoveLocaleParam<T> = T extends string
202
+ ? RemoveLocaleFromString<T>
203
+ : T;
204
+
205
+ export type To = RemoveLocaleParam<LinkComponentProps["to"]>;
206
+
207
+ type CollapseDoubleSlashes<S extends string> =
208
+ S extends `${infer H}//${infer T}` ? CollapseDoubleSlashes<`${H}/${T}`> : S;
245
209
 
246
210
  type LocalizedLinkProps = {
247
- to: string;
248
- } & Omit<LinkProps, "to">;
211
+ to?: To;
212
+ } & Omit<LinkComponentProps, "to">;
249
213
 
250
- export function LocalizedLink(props: LocalizedLinkProps) {
251
- const { locale } = useLocale();
214
+ // Вспомогательные типы
215
+ type RemoveAll<
216
+ S extends string,
217
+ Sub extends string,
218
+ > = S extends `${infer H}${Sub}${infer T}` ? RemoveAll<`${H}${T}`, Sub> : S;
252
219
 
253
- const isExternal = (to: string) => {
254
- return /^(https?:)?\/\//.test(to);
255
- };
220
+ type RemoveLocaleFromString<S extends string> = CollapseDoubleSlashes<
221
+ RemoveAll<S, typeof LOCALE_ROUTE>
222
+ >;
256
223
 
257
- const to = isExternal(props.to)
258
- ? props.to
259
- : getLocalizedUrl(props.to, locale);
224
+ export const LocalizedLink: FC<LocalizedLinkProps> = (props) => {
225
+ const { locale } = useLocale();
260
226
 
261
- return <Link {...props} to={to as LinkProps["to"]} />;
262
- }
227
+ return (
228
+ <Link
229
+ {...props}
230
+ params={{
231
+ locale,
232
+ ...(typeof props?.params === "object" ? props?.params : {}),
233
+ }}
234
+ to={`/${LOCALE_ROUTE}${props.to}` as LinkComponentProps["to"]}
235
+ />
236
+ );
237
+ };
263
238
  ```
264
239
 
265
- Создайте хук `useLocalizedNavigate` для программной навигации:
240
+ Этот компонент выполняет две задачи:
266
241
 
267
- ```tsx fileName="src/hooks/useLocalizedNavigate.tsx" codeFormat="typescript"
268
- // src/hooks/useLocalizedNavigate.tsx
269
- // eslint-disable-next-line no-restricted-imports
270
- import { NavigateOptions, useNavigate } from "@tanstack/react-router";
271
- import { getLocalizedUrl } from "intlayer";
272
- import { useLocale } from "react-intlayer";
242
+ - Удаляет ненужный префикс `{-$locale}` из URL.
243
+ - Вставляет параметр локали в URL, чтобы пользователь был напрямую перенаправлен на локализованный маршрут.
244
+
245
+ Далее мы можем создать хук `useLocalizedNavigate` для программной навигации:
273
246
 
274
- type LocalizedNavigateOptions = {
275
- to: string;
276
- } & Omit<NavigateOptions, "to">;
247
+ ```tsx fileName="src/hooks/useLocalizedNavigate.tsx"
248
+ import { useLocale } from "react.intlayer";
249
+ import { useNavigate } from "@tanstack/react-router";
250
+ import { LOCALE_ROUTE } from "@/components/localized-link";
251
+ import type { FileRouteTypes } from "@/routeTree.gen";
277
252
 
278
253
  export const useLocalizedNavigate = () => {
279
254
  const navigate = useNavigate();
255
+
280
256
  const { locale } = useLocale();
281
257
 
282
- const isExternal = (to: string) => {
283
- return /^(https?:)?\/\//.test(to);
284
- };
258
+ type StripLocalePrefix<T extends string> = T extends
259
+ | `/${typeof LOCALE_ROUTE}`
260
+ | `/${typeof LOCALE_ROUTE}/`
261
+ ? "/" // Удаляем префикс локали, оставляя корень
262
+ : T extends `/${typeof LOCALE_ROUTE}/${infer Rest}`
263
+ ? `/${Rest}` // Удаляем префикс локали, оставляя остальную часть пути
264
+ : never;
265
+
266
+ type LocalizedTo = StripLocalePrefix<FileRouteTypes["to"]>;
267
+
268
+ interface LocalizedNavigate {
269
+ (to: LocalizedTo): ReturnType<typeof navigate>;
270
+ (
271
+ opts: { to: LocalizedTo } & Record<string, unknown>
272
+ ): ReturnType<typeof navigate>;
273
+ }
274
+
275
+ const localizedNavigate: LocalizedNavigate = (args: any) => {
276
+ if (typeof args === "string") {
277
+ return navigate({ to: `/${LOCALE_ROUTE}${args}`, params: { locale } });
278
+ }
279
+
280
+ const { to, ...rest } = args;
285
281
 
286
- const localizedNavigate = (options: LocalizedNavigateOptions) => {
287
- const to = isExternal(options.to)
288
- ? options.to
289
- : getLocalizedUrl(options.to, locale);
282
+ const localedTo = `/${LOCALE_ROUTE}${to}` as any;
290
283
 
291
- navigate({ ...options, to: to as NavigateOptions["to"] });
284
+ return navigate({ to: localedTo, params: { locale, ...rest } as any });
292
285
  };
293
286
 
294
287
  return localizedNavigate;
@@ -299,26 +292,12 @@ export const useLocalizedNavigate = () => {
299
292
 
300
293
  Получайте доступ к вашим словарям контента по всему приложению:
301
294
 
302
- #### Страница перенаправления корня
303
-
304
- ```tsx fileName="src/routes/page.tsx" codeFormat="typescript"
305
- // src/routes/page.tsx
306
- import { useLocale } from "react-intlayer";
307
- import { Navigate } from "react-router";
308
-
309
- export default function Page() {
310
- const { locale } = useLocale();
311
-
312
- return <Navigate replace to={locale} />;
313
- }
314
- ```
315
-
316
295
  #### Локализованная главная страница
317
296
 
318
- ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
297
+ ```tsx fileName="src/routes/{-$locale}/index.tsx"
319
298
  import { createFileRoute } from "@tanstack/react-router";
320
299
  import { getIntlayer } from "intlayer";
321
- import { useIntlayer } from "react-intlayer";
300
+ import { useIntlayer } from "react.intlayer";
322
301
 
323
302
  import LocaleSwitcher from "@/components/locale-switcher";
324
303
  import { LocalizedLink } from "@/components/localized-link";
@@ -344,16 +323,15 @@ function RouteComponent() {
344
323
  const navigate = useLocalizedNavigate();
345
324
 
346
325
  return (
347
- <div className="grid place-items-center h-screen">
348
- <div className="flex flex-col gap-4 items-center text-center">
326
+ <div>
327
+ <div>
349
328
  {content.title}
350
329
  <LocaleSwitcher />
351
- <div className="flex gap-4">
352
- <a href="/">Индекс</a>
330
+ <div>
353
331
  <LocalizedLink to="/">{content.links.home}</LocalizedLink>
354
332
  <LocalizedLink to="/about">{content.links.about}</LocalizedLink>
355
333
  </div>
356
- <div className="flex gap-4">
334
+ <div>
357
335
  <button onClick={() => navigate({ to: "/" })}>
358
336
  {content.links.home}
359
337
  </button>
@@ -369,61 +347,69 @@ function RouteComponent() {
369
347
 
370
348
  > Чтобы узнать больше о хуке `useIntlayer`, обратитесь к [документации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/react-intlayer/useIntlayer.md).
371
349
 
372
- ### Шаг 9: Создайте компонент переключения локали
350
+ ### Шаг 9: Создайте компонент переключателя локали
373
351
 
374
352
  Создайте компонент, который позволит пользователям менять язык:
375
353
 
376
- ```tsx fileName="src/components/locale-switcher.tsx" codeFormat="typescript"
354
+ ```tsx fileName="src/components/locale-switcher.tsx"
355
+ import type { FC } from "react";
356
+
377
357
  import { useLocation } from "@tanstack/react-router";
378
- import {
379
- getHTMLTextDir,
380
- getLocaleName,
381
- getLocalizedUrl,
382
- Locales,
383
- } from "intlayer";
384
- import { useIntlayer, useLocale } from "react-intlayer";
385
-
386
- export default function LocaleSwitcher() {
387
- const { pathname, searchStr } = useLocation();
388
- const content = useIntlayer("locale-switcher");
389
-
390
- const { availableLocales, locale, setLocale } = useLocale({
391
- onLocaleChange: (newLocale) => {
392
- const pathWithLocale = getLocalizedUrl(pathname + searchStr, newLocale);
393
- location.replace(pathWithLocale);
394
- },
395
- });
358
+ import { getHTMLTextDir, getLocaleName, getPathWithoutLocale } from "intlayer";
359
+ import { setLocaleCookie, useIntlayer, useLocale } from "react-intlayer";
360
+
361
+ import { LocalizedLink, To } from "./localized-link";
362
+
363
+ export const LocaleSwitcher: FC = () => {
364
+ const { localeSwitcherLabel } = useIntlayer("locale-switcher");
365
+ const { pathname } = useLocation();
366
+
367
+ const { availableLocales, locale } = useLocale();
368
+
369
+ const pathWithoutLocale = getPathWithoutLocale(pathname);
396
370
 
397
371
  return (
398
- <select
399
- aria-label={content.label.toString()}
400
- onChange={(e) => setLocale(e.target.value)}
401
- value={locale}
402
- >
403
- {availableLocales.map((localeItem) => (
404
- <option
405
- dir={getHTMLTextDir(localeItem)}
406
- key={localeItem}
407
- lang={localeItem}
408
- value={localeItem}
409
- >
410
- {/* Пример: Français (Французский) */}
411
- {getLocaleName(localeItem, locale)} (
412
- {getLocaleName(localeItem, Locales.ENGLISH)})
413
- </option>
372
+ <ol>
373
+ {availableLocales.map((localeEl) => (
374
+ <li key={localeEl}>
375
+ <LocalizedLink
376
+ aria-current={localeEl === locale ? "page" : undefined}
377
+ aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeEl)}`}
378
+ onClick={() => setLocaleCookie(localeEl)}
379
+ params={{ locale: localeEl }}
380
+ to={pathWithoutLocale as To}
381
+ >
382
+ <span>
383
+ {/* Локаль - например, FR */}
384
+ {localeItem}
385
+ </span>
386
+ <span>
387
+ {/* Язык на его собственной локали - например, Français */}
388
+ {getLocaleName(localeItem, locale)}
389
+ </span>
390
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
391
+ {/* Язык на текущей локали - например, Francés при установленной локали Locales.SPANISH */}
392
+ {getLocaleName(localeItem)}
393
+ </span>
394
+ <span dir="ltr" lang={Locales.ENGLISH}>
395
+ {/* Язык на английском - например, French */}
396
+ {getLocaleName(localeItem, Locales.ENGLISH)}
397
+ </span>
398
+ </LocalizedLink>
399
+ </li>
414
400
  ))}
415
- </select>
401
+ </ol>
416
402
  );
417
- }
403
+ };
418
404
  ```
419
405
 
420
406
  > Чтобы узнать больше о хуке `useLocale`, обратитесь к [документации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/react-intlayer/useLocale.md).
421
407
 
422
- ### Шаг 10: Добавление управления атрибутами HTML (необязательно)
408
+ ### Шаг 10: Добавьте управление атрибутами HTML (необязательно)
423
409
 
424
410
  Создайте хук для управления атрибутами lang и dir в HTML:
425
411
 
426
- ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
412
+ ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx"
427
413
  // src/hooks/useI18nHTMLAttributes.tsx
428
414
  import { getHTMLTextDir } from "intlayer";
429
415
  import { useEffect } from "react";
@@ -433,77 +419,75 @@ export const useI18nHTMLAttributes = () => {
433
419
  const { locale } = useLocale();
434
420
 
435
421
  useEffect(() => {
436
- document.documentElement.lang = locale;
437
- document.documentElement.dir = getHTMLTextDir(locale); // установка атрибута dir для документа
422
+ document.documentElement.lang = locale; // установка атрибута lang для корневого элемента документа
423
+ document.documentElement.dir = getHTMLTextDir(locale); // установка атрибута dir для корневого элемента документа
438
424
  }, [locale]);
439
425
  };
440
426
  ```
441
427
 
442
428
  Затем используйте его в вашем корневом компоненте:
443
429
 
444
- ```tsx fileName="src/routes/{-$locale}/index.tsx" codeFormat="typescript"
430
+ ```tsx fileName="src/routes/{-$locale}/index.tsx"
445
431
  import { createFileRoute, Navigate, Outlet } from "@tanstack/react-router";
446
- import { configuration } from "intlayer";
447
432
  import { IntlayerProvider, useLocale } from "react-intlayer";
448
433
 
449
- import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // импорт хука
434
+ import { useI18nHTMLAttributes } from "@/hooks/useI18nHTMLAttributes"; // импортируем хук
450
435
 
451
436
  export const Route = createFileRoute("/{-$locale}")({
452
437
  component: LayoutComponent,
453
438
  });
454
439
 
455
440
  function LayoutComponent() {
456
- useI18nHTMLAttributes(); // добавьте эту строку
441
+ useI18nHTMLAttributes(); // добавляем эту строку
457
442
 
443
+ const { defaultLocale } = useLocale();
458
444
  const { locale } = Route.useParams();
459
445
 
460
446
  return (
461
- <IntlayerProvider locale={locale}>
447
+ <IntlayerProvider locale={locale ?? defaultLocale}>
462
448
  <Outlet />
463
449
  </IntlayerProvider>
464
450
  );
465
451
  }
466
452
  ```
467
453
 
468
- ### Шаг 11: Сборка и запуск вашего приложения
454
+ ---
469
455
 
470
- Соберите словари контента и запустите ваше приложение:
456
+ ### Шаг 11: Добавление middleware (необязательно)
471
457
 
472
- ```bash packageManager="npm"
473
- # Сборка словарей Intlayer
474
- npm run intlayer:build
458
+ Вы также можете использовать `intlayerMiddleware` для добавления маршрутизации на стороне сервера в ваше приложение. Этот плагин автоматически определит текущую локаль на основе URL и установит соответствующий cookie с локалью. Если локаль не указана, плагин определит наиболее подходящую локаль на основе языковых предпочтений браузера пользователя. Если локаль не будет обнаружена, произойдет перенаправление на локаль по умолчанию.
475
459
 
476
- # Запуск сервера разработки
477
- npm run dev
478
- ```
460
+ > Обратите внимание, что для использования `intlayerMiddleware` в продакшене необходимо переместить пакет `vite-intlayer` из `devDependencies` в `dependencies`.
479
461
 
480
- ```bash packageManager="pnpm"
481
- # Сборка словарей Intlayer
482
- pnpm intlayer:build
462
+ ```typescript {3,7} fileName="vite.config.ts"
463
+ import { reactRouter } from "@react-router/dev/vite";
464
+ import tailwindcss from "@tailwindcss/vite";
465
+ import { defineConfig } from "vite";
466
+ import { intlayer, intlayerMiddleware } from "vite-intlayer";
467
+ import tsconfigPaths from "vite-tsconfig-paths";
483
468
 
484
- # Запуск сервера разработки
485
- pnpm dev
469
+ export default defineConfig({
470
+ plugins: [
471
+ tailwindcss(),
472
+ reactRouter(),
473
+ tsconfigPaths(),
474
+ intlayer(),
475
+ intlayerMiddleware(),
476
+ ],
477
+ });
486
478
  ```
487
479
 
488
- ```bash packageManager="yarn"
489
- # Сборка словарей Intlayer
490
- yarn intlayer:build
491
-
492
- # Запуск сервера разработки
493
- yarn dev
494
- ```
480
+ ---
495
481
 
496
482
  ### Шаг 12: Настройка TypeScript (необязательно)
497
483
 
498
- Intlayer использует расширение модулей (module augmentation), чтобы использовать преимущества TypeScript и сделать ваш код более надежным.
484
+ Intlayer использует расширение модулей (module augmentation), чтобы использовать преимущества TypeScript и сделать вашу кодовую базу более надежной.
499
485
 
500
486
  Убедитесь, что ваша конфигурация TypeScript включает автоматически сгенерированные типы:
501
487
 
502
488
  ```json5 fileName="tsconfig.json"
503
489
  {
504
- compilerOptions: {
505
- // ... ваши существующие настройки TypeScript
506
- },
490
+ // ... ваши существующие настройки
507
491
  include: [
508
492
  // ... ваши существующие включения
509
493
  ".intlayer/**/*.ts", // Включить автоматически сгенерированные типы
@@ -511,11 +495,13 @@ Intlayer использует расширение модулей (module augmen
511
495
  }
512
496
  ```
513
497
 
498
+ ---
499
+
514
500
  ### Конфигурация Git
515
501
 
516
- Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш репозиторий Git.
502
+ Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит избежать их коммита в ваш Git-репозиторий.
517
503
 
518
- Для этого вы можете добавить следующие инструкции в ваш файл `.gitignore`:
504
+ Чтобы сделать это, вы можете добавить следующие инструкции в ваш файл `.gitignore`:
519
505
 
520
506
  ```plaintext fileName=".gitignore"
521
507
  # Игнорировать файлы, сгенерированные Intlayer
@@ -524,67 +510,9 @@ Intlayer использует расширение модулей (module augmen
524
510
 
525
511
  ---
526
512
 
527
- ### Шаг 13: Создание перенаправления (опционально)
528
-
529
- ```typescript fileName="src/routes/{-$locale}/rotue.tsx" codeFormat="typescript"
530
- function LayoutComponent() {
531
- useI18nHTMLAttributes();
532
-
533
- const { locale } = Route.useParams();
534
- const { locale: selectedLocale } = useLocale();
535
- const { defaultLocale } = configuration.internationalization;
536
- const { prefixDefault } = configuration.middleware;
537
-
538
- // Перенаправление на локаль по умолчанию, если в URL отсутствует локаль и prefixDefault установлен в true
539
- if (selectedLocale === defaultLocale && !locale && prefixDefault) {
540
- return <Navigate replace to={defaultLocale} />;
541
- }
542
-
543
- // Перенаправление на выбранную локаль, если локаль в URL не совпадает с выбранной локалью
544
- if (selectedLocale !== defaultLocale && !locale) {
545
- return <Navigate replace to={selectedLocale} />;
546
- }
547
-
548
- return (
549
- <IntlayerProvider locale={locale}>
550
- <Outlet />
551
- </IntlayerProvider>
552
- );
553
- }
554
- ```
555
-
556
- ## Развертывание в продакшн
557
-
558
- При развертывании вашего приложения:
559
-
560
- 1. **Соберите ваше приложение:**
561
-
562
- ```bash
563
- npm run build
564
- ```
565
-
566
- 2. **Соберите словари Intlayer:**
567
-
568
- ```bash
569
- npm run intlayer:build
570
- ```
571
-
572
- 3. **Переместите `vite-intlayer` в зависимости**, если используете middleware в продакшн:
573
- ```bash
574
- npm install vite-intlayer --save
575
- ```
576
-
577
- Теперь ваше приложение будет поддерживать:
578
-
579
- - **Структуру URL**: `/en`, `/en/about`, `/tr`, `/tr/about`
580
- - **Автоматическое определение локали** на основе настроек браузера
581
- - **Маршрутизацию с учётом локали** с использованием Tanstack Start
582
- - **Поддержку TypeScript** с автогенерируемыми типами
583
- - **Серверный рендеринг** с правильной обработкой локали
584
-
585
- ## Расширение для VS Code
513
+ ## Расширение VS Code
586
514
 
587
- Чтобы улучшить ваш опыт разработки с Intlayer, вы можете установить официальное расширение **Intlayer для VS Code**.
515
+ Для улучшения вашего опыта разработки с Intlayer вы можете установить официальное **расширение Intlayer для VS Code**.
588
516
 
589
517
  [Установить из VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
590
518
 
@@ -593,15 +521,15 @@ function LayoutComponent() {
593
521
  - **Автозаполнение** ключей переводов.
594
522
  - **Обнаружение ошибок в реальном времени** для отсутствующих переводов.
595
523
  - **Встроенный просмотр** переведённого контента.
596
- - **Быстрые действия** для удобного создания и обновления переводов.
524
+ - **Быстрые действия** для лёгкого создания и обновления переводов.
597
525
 
598
- Для получения дополнительной информации о том, как использовать расширение, обратитесь к [документации по расширению Intlayer для VS Code](https://intlayer.org/doc/vs-code-extension).
526
+ Для получения дополнительной информации о том, как использовать расширение, обратитесь к [документации расширения Intlayer для VS Code](https://intlayer.org/doc/vs-code-extension).
599
527
 
600
528
  ---
601
529
 
602
530
  ## Продвинутые возможности
603
531
 
604
- Чтобы продвинуться дальше, вы можете реализовать [визуальный редактор](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).
532
+ Для расширения возможностей вы можете реализовать [визуальный редактор](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).
605
533
 
606
534
  ---
607
535
 
@@ -610,11 +538,11 @@ function LayoutComponent() {
610
538
  - [Документация Intlayer](https://intlayer.org)
611
539
  - [Документация Tanstack Start](https://reactrouter.com/)
612
540
  - [Хук useIntlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/react-intlayer/useIntlayer.md)
613
- - [Хук useLocale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/react-intlayer/useLocale.md)
541
+ - [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/react-intlayer/useLocale.md)
614
542
  - [Объявление контента](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dictionary/get_started.md)
615
543
  - [Конфигурация](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md)
616
544
 
617
- Это подробное руководство содержит все необходимое для интеграции Intlayer с Tanstack Start для полностью интернационализированного приложения с маршрутизацией, учитывающей локаль, и поддержкой TypeScript.
545
+ Это исчерпывающее руководство содержит все необходимое для интеграции Intlayer с Tanstack Start для полностью интернационализированного приложения с маршрутизацией, учитывающей локаль, и поддержкой TypeScript.
618
546
 
619
547
  ## История документации
620
548