@intlayer/docs 5.5.8

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 (1135) hide show
  1. package/LICENSE +202 -0
  2. package/ar/CI_CD.md +149 -0
  3. package/ar/autoFill.md +157 -0
  4. package/ar/concept/content/file.md +1 -0
  5. package/ar/configuration.md +492 -0
  6. package/ar/dictionary/condition.md +213 -0
  7. package/ar/dictionary/content_extention_customization.md +81 -0
  8. package/ar/dictionary/enumeration.md +221 -0
  9. package/ar/dictionary/file.md +209 -0
  10. package/ar/dictionary/function_fetching.md +190 -0
  11. package/ar/dictionary/get_started.md +490 -0
  12. package/ar/dictionary/insertion.md +161 -0
  13. package/ar/dictionary/markdown.md +343 -0
  14. package/ar/dictionary/nesting.md +249 -0
  15. package/ar/dictionary/translation.md +307 -0
  16. package/ar/header.md +7 -0
  17. package/ar/how_works_intlayer.md +219 -0
  18. package/ar/index.md +125 -0
  19. package/ar/interest_of_intlayer.md +132 -0
  20. package/ar/intlayer_CMS.md +328 -0
  21. package/ar/intlayer_cli.md +258 -0
  22. package/ar/intlayer_visual_editor.md +210 -0
  23. package/ar/intlayer_with_angular.md +3 -0
  24. package/ar/intlayer_with_create_react_app.md +1196 -0
  25. package/ar/intlayer_with_express.md +270 -0
  26. package/ar/intlayer_with_lynx+react.md +482 -0
  27. package/ar/intlayer_with_nextjs_14.md +1260 -0
  28. package/ar/intlayer_with_nextjs_15.md +1311 -0
  29. package/ar/intlayer_with_nextjs_page_router.md +1099 -0
  30. package/ar/intlayer_with_react_native+expo.md +539 -0
  31. package/ar/intlayer_with_vite+preact.md +1679 -0
  32. package/ar/intlayer_with_vite+react.md +1582 -0
  33. package/ar/intlayer_with_vite+solid.md +3 -0
  34. package/ar/intlayer_with_vite+svelte.md +3 -0
  35. package/ar/intlayer_with_vite+vue.md +989 -0
  36. package/ar/introduction.md +190 -0
  37. package/ar/mcp_server.md +150 -0
  38. package/ar/packages/@intlayer/api/index.md +31 -0
  39. package/ar/packages/@intlayer/chokidar/index.md +31 -0
  40. package/ar/packages/@intlayer/cli/index.md +1 -0
  41. package/ar/packages/@intlayer/config/index.md +116 -0
  42. package/ar/packages/@intlayer/core/index.md +25 -0
  43. package/ar/packages/@intlayer/design-system/index.md +21 -0
  44. package/ar/packages/@intlayer/dictionary-entry/index.md +21 -0
  45. package/ar/packages/@intlayer/editor/index.md +21 -0
  46. package/ar/packages/@intlayer/editor-react/index.md +21 -0
  47. package/ar/packages/@intlayer/webpack/index.md +35 -0
  48. package/ar/packages/angular-intlayer/index.md +3 -0
  49. package/ar/packages/express-intlayer/index.md +232 -0
  50. package/ar/packages/express-intlayer/t.md +448 -0
  51. package/ar/packages/intlayer/getConfiguration.md +120 -0
  52. package/ar/packages/intlayer/getEnumeration.md +138 -0
  53. package/ar/packages/intlayer/getHTMLTextDir.md +97 -0
  54. package/ar/packages/intlayer/getLocaleLang.md +61 -0
  55. package/ar/packages/intlayer/getLocaleName.md +93 -0
  56. package/ar/packages/intlayer/getLocalizedUrl.md +221 -0
  57. package/ar/packages/intlayer/getMultilingualUrls.md +198 -0
  58. package/ar/packages/intlayer/getPathWithoutLocale.md +50 -0
  59. package/ar/packages/intlayer/getTranslation.md +175 -0
  60. package/ar/packages/intlayer/getTranslationContent.md +175 -0
  61. package/ar/packages/intlayer/index.md +254 -0
  62. package/ar/packages/intlayer-cli/index.md +41 -0
  63. package/ar/packages/intlayer-editor/index.md +113 -0
  64. package/ar/packages/lynx-intlayer/index.md +58 -0
  65. package/ar/packages/next-intlayer/index.md +267 -0
  66. package/ar/packages/next-intlayer/t.md +341 -0
  67. package/ar/packages/next-intlayer/useDictionary.md +248 -0
  68. package/ar/packages/next-intlayer/useIntlayer.md +237 -0
  69. package/ar/packages/next-intlayer/useIntlayerAsync.md +211 -0
  70. package/ar/packages/next-intlayer/useLocale.md +105 -0
  71. package/ar/packages/preact-intlayer/index.md +3 -0
  72. package/ar/packages/react-intlayer/index.md +261 -0
  73. package/ar/packages/react-intlayer/t.md +283 -0
  74. package/ar/packages/react-intlayer/useDictionary.md +268 -0
  75. package/ar/packages/react-intlayer/useIntlayer.md +225 -0
  76. package/ar/packages/react-intlayer/useIntlayerAsync.md +226 -0
  77. package/ar/packages/react-intlayer/useLocale.md +184 -0
  78. package/ar/packages/react-native-intlayer/index.md +57 -0
  79. package/ar/packages/react-scripts-intlayer/index.md +57 -0
  80. package/ar/packages/solid-intlayer/index.md +3 -0
  81. package/ar/packages/svelte-intlayer/index.md +3 -0
  82. package/ar/packages/vite-intlayer/index.md +53 -0
  83. package/ar/packages/vue-intlayer/index.md +3 -0
  84. package/ar/per_locale_file.md +298 -0
  85. package/ar/privacy_notice.md +61 -0
  86. package/ar/roadmap.md +208 -0
  87. package/ar/terms_of_service.md +33 -0
  88. package/ar/vs_code_extension.md +139 -0
  89. package/de/CI_CD.md +149 -0
  90. package/de/angular-intlayer/index.md +3 -0
  91. package/de/autoFill.md +157 -0
  92. package/de/configuration.md +501 -0
  93. package/de/dictionary/condition.md +213 -0
  94. package/de/dictionary/content_extention_customization.md +81 -0
  95. package/de/dictionary/enumeration.md +221 -0
  96. package/de/dictionary/file.md +207 -0
  97. package/de/dictionary/function_fetching.md +190 -0
  98. package/de/dictionary/get_started.md +466 -0
  99. package/de/dictionary/insertion.md +167 -0
  100. package/de/dictionary/markdown.md +345 -0
  101. package/de/dictionary/nesting.md +252 -0
  102. package/de/dictionary/translation.md +287 -0
  103. package/de/header.md +5 -0
  104. package/de/how_works_intlayer.md +216 -0
  105. package/de/index.md +125 -0
  106. package/de/insertion.md +0 -0
  107. package/de/interest_of_intlayer.md +132 -0
  108. package/de/intlayer_CMS.md +334 -0
  109. package/de/intlayer_cli.md +274 -0
  110. package/de/intlayer_visual_editor.md +210 -0
  111. package/de/intlayer_with_angular.md +3 -0
  112. package/de/intlayer_with_create_react_app.md +1200 -0
  113. package/de/intlayer_with_express.md +268 -0
  114. package/de/intlayer_with_lynx+react.md +482 -0
  115. package/de/intlayer_with_nextjs_14.md +1258 -0
  116. package/de/intlayer_with_nextjs_15.md +1306 -0
  117. package/de/intlayer_with_nextjs_page_router.md +1087 -0
  118. package/de/intlayer_with_react_native+expo.md +539 -0
  119. package/de/intlayer_with_vite+preact.md +1701 -0
  120. package/de/intlayer_with_vite+react.md +1584 -0
  121. package/de/intlayer_with_vite+solid.md +3 -0
  122. package/de/intlayer_with_vite+svelte.md +3 -0
  123. package/de/intlayer_with_vite+vue.md +989 -0
  124. package/de/introduction.md +186 -0
  125. package/de/mcp_server.md +150 -0
  126. package/de/packages/@intlayer/api/index.md +31 -0
  127. package/de/packages/@intlayer/chokidar/index.md +31 -0
  128. package/de/packages/@intlayer/cli/index.md +21 -0
  129. package/de/packages/@intlayer/config/index.md +116 -0
  130. package/de/packages/@intlayer/core/index.md +25 -0
  131. package/de/packages/@intlayer/design-system/index.md +21 -0
  132. package/de/packages/@intlayer/dictionary-entry/index.md +21 -0
  133. package/de/packages/@intlayer/editor/index.md +21 -0
  134. package/de/packages/@intlayer/editor-react/index.md +21 -0
  135. package/de/packages/@intlayer/webpack/index.md +35 -0
  136. package/de/packages/angular-intlayer/index.md +31 -0
  137. package/de/packages/express-intlayer/index.md +229 -0
  138. package/de/packages/express-intlayer/t.md +432 -0
  139. package/de/packages/intlayer/getConfiguration.md +120 -0
  140. package/de/packages/intlayer/getEnumeration.md +140 -0
  141. package/de/packages/intlayer/getHTMLTextDir.md +97 -0
  142. package/de/packages/intlayer/getLocaleLang.md +57 -0
  143. package/de/packages/intlayer/getLocaleName.md +93 -0
  144. package/de/packages/intlayer/getLocalizedUrl.md +221 -0
  145. package/de/packages/intlayer/getMultilingualUrls.md +198 -0
  146. package/de/packages/intlayer/getPathWithoutLocale.md +50 -0
  147. package/de/packages/intlayer/getTranslation.md +166 -0
  148. package/de/packages/intlayer/getTranslationContent.md +166 -0
  149. package/de/packages/intlayer/index.md +478 -0
  150. package/de/packages/intlayer-cli/index.md +41 -0
  151. package/de/packages/intlayer-editor/index.md +113 -0
  152. package/de/packages/lynx-intlayer/index.md +58 -0
  153. package/de/packages/next-intlayer/index.md +263 -0
  154. package/de/packages/next-intlayer/t.md +325 -0
  155. package/de/packages/next-intlayer/useDictionary.md +242 -0
  156. package/de/packages/next-intlayer/useIntlayer.md +237 -0
  157. package/de/packages/next-intlayer/useIntlayerAsync.md +211 -0
  158. package/de/packages/next-intlayer/useLocale.md +105 -0
  159. package/de/packages/preact-intlayer/index.md +3 -0
  160. package/de/packages/react-intlayer/index.md +260 -0
  161. package/de/packages/react-intlayer/t.md +277 -0
  162. package/de/packages/react-intlayer/useDictionary.md +260 -0
  163. package/de/packages/react-intlayer/useIntlayer.md +225 -0
  164. package/de/packages/react-intlayer/useIntlayerAsync.md +226 -0
  165. package/de/packages/react-intlayer/useLocale.md +184 -0
  166. package/de/packages/react-native-intlayer/index.md +57 -0
  167. package/de/packages/react-scripts-intlayer/index.md +57 -0
  168. package/de/packages/solid-intlayer/index.md +3 -0
  169. package/de/packages/svelte-intlayer/index.md +3 -0
  170. package/de/packages/vite-intlayer/index.md +53 -0
  171. package/de/packages/vue-intlayer/index.md +3 -0
  172. package/de/per_locale_file.md +298 -0
  173. package/de/privacy_notice.md +61 -0
  174. package/de/roadmap.md +206 -0
  175. package/de/terms_of_service.md +33 -0
  176. package/de/vs_code_extension.md +139 -0
  177. package/en/CI_CD.md +149 -0
  178. package/en/autoFill.md +157 -0
  179. package/en/configuration.md +506 -0
  180. package/en/dictionary/condition.md +213 -0
  181. package/en/dictionary/content_extention_customization.md +81 -0
  182. package/en/dictionary/enumeration.md +221 -0
  183. package/en/dictionary/file.md +198 -0
  184. package/en/dictionary/function_fetching.md +190 -0
  185. package/en/dictionary/get_started.md +504 -0
  186. package/en/dictionary/insertion.md +167 -0
  187. package/en/dictionary/markdown.md +355 -0
  188. package/en/dictionary/nesting.md +249 -0
  189. package/en/dictionary/translation.md +285 -0
  190. package/en/frequent_questions/build_dictionaries.md +37 -0
  191. package/en/frequent_questions/domain_routing.md +92 -0
  192. package/en/frequent_questions/esbuild_error.md +9 -0
  193. package/en/frequent_questions/get_locale_cookie.md +121 -0
  194. package/en/frequent_questions/intlayer_command_undefined.md +135 -0
  195. package/en/frequent_questions/locale_incorect_in_url.md +52 -0
  196. package/en/frequent_questions/static_rendering.md +24 -0
  197. package/en/frequent_questions/unknown_command.md +76 -0
  198. package/en/header.md +5 -0
  199. package/en/how_works_intlayer.md +219 -0
  200. package/en/index.md +139 -0
  201. package/en/interest_of_intlayer.md +133 -0
  202. package/en/intlayer_CMS.md +334 -0
  203. package/en/intlayer_cli.md +309 -0
  204. package/en/intlayer_visual_editor.md +244 -0
  205. package/en/intlayer_with_angular.md +139 -0
  206. package/en/intlayer_with_create_react_app.md +1209 -0
  207. package/en/intlayer_with_express.md +391 -0
  208. package/en/intlayer_with_lynx+react.md +483 -0
  209. package/en/intlayer_with_nextjs_14.md +1298 -0
  210. package/en/intlayer_with_nextjs_15.md +1347 -0
  211. package/en/intlayer_with_nextjs_page_router.md +1126 -0
  212. package/en/intlayer_with_react_native+expo.md +630 -0
  213. package/en/intlayer_with_vite+preact.md +1659 -0
  214. package/en/intlayer_with_vite+react.md +1605 -0
  215. package/en/intlayer_with_vite+solid.md +254 -0
  216. package/en/intlayer_with_vite+svelte.md +254 -0
  217. package/en/intlayer_with_vite+vue.md +1000 -0
  218. package/en/introduction.md +185 -0
  219. package/en/mcp_server.md +150 -0
  220. package/en/packages/@intlayer/api/index.md +31 -0
  221. package/en/packages/@intlayer/chokidar/index.md +31 -0
  222. package/en/packages/@intlayer/cli/index.md +21 -0
  223. package/en/packages/@intlayer/config/index.md +116 -0
  224. package/en/packages/@intlayer/core/index.md +25 -0
  225. package/en/packages/@intlayer/design-system/index.md +21 -0
  226. package/en/packages/@intlayer/dictionary-entry/index.md +21 -0
  227. package/en/packages/@intlayer/editor/index.md +21 -0
  228. package/en/packages/@intlayer/editor-react/index.md +21 -0
  229. package/en/packages/@intlayer/webpack/index.md +35 -0
  230. package/en/packages/angular-intlayer/index.md +31 -0
  231. package/en/packages/express-intlayer/index.md +229 -0
  232. package/en/packages/express-intlayer/t.md +432 -0
  233. package/en/packages/intlayer/getConfiguration.md +120 -0
  234. package/en/packages/intlayer/getEnumeration.md +138 -0
  235. package/en/packages/intlayer/getHTMLTextDir.md +97 -0
  236. package/en/packages/intlayer/getLocaleLang.md +57 -0
  237. package/en/packages/intlayer/getLocaleName.md +93 -0
  238. package/en/packages/intlayer/getLocalizedUrl.md +221 -0
  239. package/en/packages/intlayer/getMultilingualUrls.md +198 -0
  240. package/en/packages/intlayer/getPathWithoutLocale.md +50 -0
  241. package/en/packages/intlayer/getTranslation.md +166 -0
  242. package/en/packages/intlayer/getTranslationContent.md +166 -0
  243. package/en/packages/intlayer/index.md +476 -0
  244. package/en/packages/intlayer-cli/index.md +41 -0
  245. package/en/packages/intlayer-editor/index.md +113 -0
  246. package/en/packages/lynx-intlayer/index.md +60 -0
  247. package/en/packages/next-intlayer/index.md +263 -0
  248. package/en/packages/next-intlayer/t.md +326 -0
  249. package/en/packages/next-intlayer/useDictionary.md +242 -0
  250. package/en/packages/next-intlayer/useIntlayer.md +237 -0
  251. package/en/packages/next-intlayer/useIntlayerAsync.md +211 -0
  252. package/en/packages/next-intlayer/useLocale.md +105 -0
  253. package/en/packages/preact-intlayer/index.md +31 -0
  254. package/en/packages/react-intlayer/index.md +257 -0
  255. package/en/packages/react-intlayer/t.md +277 -0
  256. package/en/packages/react-intlayer/useDictionary.md +260 -0
  257. package/en/packages/react-intlayer/useIntlayer.md +225 -0
  258. package/en/packages/react-intlayer/useIntlayerAsync.md +226 -0
  259. package/en/packages/react-intlayer/useLocale.md +184 -0
  260. package/en/packages/react-native-intlayer/index.md +59 -0
  261. package/en/packages/react-scripts-intlayer/index.md +57 -0
  262. package/en/packages/solid-intlayer/index.md +31 -0
  263. package/en/packages/svelte-intlayer/index.md +31 -0
  264. package/en/packages/vite-intlayer/index.md +53 -0
  265. package/en/packages/vue-intlayer/index.md +31 -0
  266. package/en/per_locale_file.md +297 -0
  267. package/en/privacy_notice.md +61 -0
  268. package/en/roadmap.md +270 -0
  269. package/en/t.md +163 -0
  270. package/en/terms_of_service.md +33 -0
  271. package/en/vs_code_extension.md +129 -0
  272. package/en-GB/CI_CD.md +149 -0
  273. package/en-GB/autoFill.md +0 -0
  274. package/en-GB/configuration.md +490 -0
  275. package/en-GB/dictionary/condition.md +213 -0
  276. package/en-GB/dictionary/content_extention_customization.md +83 -0
  277. package/en-GB/dictionary/enumeration.md +221 -0
  278. package/en-GB/dictionary/file.md +201 -0
  279. package/en-GB/dictionary/function_fetching.md +190 -0
  280. package/en-GB/dictionary/get_started.md +466 -0
  281. package/en-GB/dictionary/insertion.md +167 -0
  282. package/en-GB/dictionary/markdown.md +343 -0
  283. package/en-GB/dictionary/nesting.md +249 -0
  284. package/en-GB/dictionary/translation.md +285 -0
  285. package/en-GB/header.md +1 -0
  286. package/en-GB/how_works_intlayer.md +217 -0
  287. package/en-GB/index.md +142 -0
  288. package/en-GB/interest_of_intlayer.md +123 -0
  289. package/en-GB/intlayer_CMS.md +334 -0
  290. package/en-GB/intlayer_cli.md +239 -0
  291. package/en-GB/intlayer_visual_editor.md +210 -0
  292. package/en-GB/intlayer_with_angular.md +3 -0
  293. package/en-GB/intlayer_with_create_react_app.md +1192 -0
  294. package/en-GB/intlayer_with_express.md +267 -0
  295. package/en-GB/intlayer_with_lynx+react.md +484 -0
  296. package/en-GB/intlayer_with_nextjs_14.md +1267 -0
  297. package/en-GB/intlayer_with_nextjs_15.md +1308 -0
  298. package/en-GB/intlayer_with_nextjs_page_router.md +1087 -0
  299. package/en-GB/intlayer_with_react_native+expo.md +539 -0
  300. package/en-GB/intlayer_with_vite+preact.md +1648 -0
  301. package/en-GB/intlayer_with_vite+react.md +1430 -0
  302. package/en-GB/intlayer_with_vite+solid.md +3 -0
  303. package/en-GB/intlayer_with_vite+svelte.md +3 -0
  304. package/en-GB/intlayer_with_vite+vue.md +993 -0
  305. package/en-GB/introduction.md +201 -0
  306. package/en-GB/mcp_server.md +150 -0
  307. package/en-GB/packages/@intlayer/api/index.md +31 -0
  308. package/en-GB/packages/@intlayer/chokidar/index.md +31 -0
  309. package/en-GB/packages/@intlayer/cli/index.md +21 -0
  310. package/en-GB/packages/@intlayer/config/index.md +116 -0
  311. package/en-GB/packages/@intlayer/core/index.md +25 -0
  312. package/en-GB/packages/@intlayer/design-system/index.md +21 -0
  313. package/en-GB/packages/@intlayer/dictionary-entry/index.md +21 -0
  314. package/en-GB/packages/@intlayer/editor/index.md +21 -0
  315. package/en-GB/packages/@intlayer/editor-react/index.md +21 -0
  316. package/en-GB/packages/@intlayer/webpack/index.md +35 -0
  317. package/en-GB/packages/angular-intlayer/index.md +3 -0
  318. package/en-GB/packages/express-intlayer/index.md +229 -0
  319. package/en-GB/packages/express-intlayer/t.md +432 -0
  320. package/en-GB/packages/intlayer/getConfiguration.md +120 -0
  321. package/en-GB/packages/intlayer/getEnumeration.md +140 -0
  322. package/en-GB/packages/intlayer/getHTMLTextDir.md +97 -0
  323. package/en-GB/packages/intlayer/getLocaleLang.md +57 -0
  324. package/en-GB/packages/intlayer/getLocaleName.md +93 -0
  325. package/en-GB/packages/intlayer/getLocalizedUrl.md +221 -0
  326. package/en-GB/packages/intlayer/getMultilingualUrls.md +198 -0
  327. package/en-GB/packages/intlayer/getPathWithoutLocale.md +50 -0
  328. package/en-GB/packages/intlayer/getTranslation.md +166 -0
  329. package/en-GB/packages/intlayer/getTranslationContent.md +166 -0
  330. package/en-GB/packages/intlayer/index.md +476 -0
  331. package/en-GB/packages/intlayer-cli/index.md +41 -0
  332. package/en-GB/packages/intlayer-editor/index.md +113 -0
  333. package/en-GB/packages/lynx-intlayer/index.md +58 -0
  334. package/en-GB/packages/next-intlayer/index.md +263 -0
  335. package/en-GB/packages/next-intlayer/t.md +326 -0
  336. package/en-GB/packages/next-intlayer/useDictionary.md +242 -0
  337. package/en-GB/packages/next-intlayer/useIntlayer.md +237 -0
  338. package/en-GB/packages/next-intlayer/useIntlayerAsync.md +211 -0
  339. package/en-GB/packages/next-intlayer/useLocale.md +105 -0
  340. package/en-GB/packages/preact-intlayer/index.md +3 -0
  341. package/en-GB/packages/react-intlayer/index.md +257 -0
  342. package/en-GB/packages/react-intlayer/t.md +277 -0
  343. package/en-GB/packages/react-intlayer/useDictionary.md +260 -0
  344. package/en-GB/packages/react-intlayer/useIntlayer.md +225 -0
  345. package/en-GB/packages/react-intlayer/useIntlayerAsync.md +226 -0
  346. package/en-GB/packages/react-intlayer/useLocale.md +184 -0
  347. package/en-GB/packages/react-native-intlayer/index.md +57 -0
  348. package/en-GB/packages/react-scripts-intlayer/index.md +57 -0
  349. package/en-GB/packages/solid-intlayer/index.md +3 -0
  350. package/en-GB/packages/svelte-intlayer/index.md +3 -0
  351. package/en-GB/packages/vite-intlayer/index.md +53 -0
  352. package/en-GB/packages/vue-intlayer/index.md +3 -0
  353. package/en-GB/per_locale_file.md +298 -0
  354. package/en-GB/privacy_notice.md +57 -0
  355. package/en-GB/roadmap.md +206 -0
  356. package/en-GB/terms_of_service.md +33 -0
  357. package/en-GB/vs_code_extension.md +139 -0
  358. package/es/CI_CD.md +149 -0
  359. package/es/autoFill.md +157 -0
  360. package/es/configuration.md +503 -0
  361. package/es/dictionary/condition.md +213 -0
  362. package/es/dictionary/content_extention_customization.md +81 -0
  363. package/es/dictionary/enumeration.md +221 -0
  364. package/es/dictionary/file.md +206 -0
  365. package/es/dictionary/function_fetching.md +190 -0
  366. package/es/dictionary/get_started.md +466 -0
  367. package/es/dictionary/insertion.md +161 -0
  368. package/es/dictionary/markdown.md +338 -0
  369. package/es/dictionary/nesting.md +249 -0
  370. package/es/dictionary/translation.md +287 -0
  371. package/es/header.md +5 -0
  372. package/es/how_works_intlayer.md +217 -0
  373. package/es/index.md +122 -0
  374. package/es/interest_of_intlayer.md +132 -0
  375. package/es/intlayer_CMS.md +334 -0
  376. package/es/intlayer_cli.md +274 -0
  377. package/es/intlayer_visual_editor.md +210 -0
  378. package/es/intlayer_with_angular.md +3 -0
  379. package/es/intlayer_with_create_react_app.md +1192 -0
  380. package/es/intlayer_with_express.md +276 -0
  381. package/es/intlayer_with_lynx+react.md +475 -0
  382. package/es/intlayer_with_nextjs_14.md +1258 -0
  383. package/es/intlayer_with_nextjs_15.md +1308 -0
  384. package/es/intlayer_with_nextjs_page_router.md +1088 -0
  385. package/es/intlayer_with_react_native+expo.md +180 -0
  386. package/es/intlayer_with_vite+preact.md +1637 -0
  387. package/es/intlayer_with_vite+react.md +1592 -0
  388. package/es/intlayer_with_vite+solid.md +3 -0
  389. package/es/intlayer_with_vite+svelte.md +3 -0
  390. package/es/intlayer_with_vite+vue.md +947 -0
  391. package/es/introduction.md +184 -0
  392. package/es/mcp_server.md +150 -0
  393. package/es/packages/@intlayer/api/index.md +31 -0
  394. package/es/packages/@intlayer/chokidar/index.md +31 -0
  395. package/es/packages/@intlayer/cli/index.md +21 -0
  396. package/es/packages/@intlayer/config/index.md +116 -0
  397. package/es/packages/@intlayer/core/index.md +25 -0
  398. package/es/packages/@intlayer/design-system/index.md +21 -0
  399. package/es/packages/@intlayer/dictionary-entry/index.md +21 -0
  400. package/es/packages/@intlayer/editor/index.md +21 -0
  401. package/es/packages/@intlayer/editor-react/index.md +21 -0
  402. package/es/packages/@intlayer/webpack/index.md +35 -0
  403. package/es/packages/angular-intlayer/index.md +3 -0
  404. package/es/packages/express-intlayer/index.md +229 -0
  405. package/es/packages/express-intlayer/t.md +432 -0
  406. package/es/packages/intlayer/getConfiguration.md +120 -0
  407. package/es/packages/intlayer/getEnumeration.md +138 -0
  408. package/es/packages/intlayer/getHTMLTextDir.md +97 -0
  409. package/es/packages/intlayer/getLocaleLang.md +57 -0
  410. package/es/packages/intlayer/getLocaleName.md +93 -0
  411. package/es/packages/intlayer/getLocalizedUrl.md +221 -0
  412. package/es/packages/intlayer/getMultilingualUrls.md +198 -0
  413. package/es/packages/intlayer/getPathWithoutLocale.md +50 -0
  414. package/es/packages/intlayer/getTranslation.md +166 -0
  415. package/es/packages/intlayer/getTranslationContent.md +166 -0
  416. package/es/packages/intlayer/index.md +478 -0
  417. package/es/packages/intlayer-cli/index.md +41 -0
  418. package/es/packages/intlayer-editor/index.md +115 -0
  419. package/es/packages/lynx-intlayer/index.md +58 -0
  420. package/es/packages/next-intlayer/index.md +263 -0
  421. package/es/packages/next-intlayer/t.md +325 -0
  422. package/es/packages/next-intlayer/useDictionary.md +242 -0
  423. package/es/packages/next-intlayer/useIntlayer.md +237 -0
  424. package/es/packages/next-intlayer/useIntlayerAsync.md +211 -0
  425. package/es/packages/next-intlayer/useLocale.md +105 -0
  426. package/es/packages/preact-intlayer/index.md +3 -0
  427. package/es/packages/react-intlayer/index.md +263 -0
  428. package/es/packages/react-intlayer/t.md +277 -0
  429. package/es/packages/react-intlayer/useDictionary.md +270 -0
  430. package/es/packages/react-intlayer/useIntlayer.md +225 -0
  431. package/es/packages/react-intlayer/useIntlayerAsync.md +226 -0
  432. package/es/packages/react-intlayer/useLocale.md +184 -0
  433. package/es/packages/react-native-intlayer/index.md +57 -0
  434. package/es/packages/react-scripts-intlayer/index.md +57 -0
  435. package/es/packages/solid-intlayer/index.md +3 -0
  436. package/es/packages/svelte-intlayer/index.md +5 -0
  437. package/es/packages/vite-intlayer/index.md +53 -0
  438. package/es/packages/vue-intlayer/index.md +3 -0
  439. package/es/per_locale_file.md +293 -0
  440. package/es/privacy_notice.md +61 -0
  441. package/es/roadmap.md +157 -0
  442. package/es/terms_of_service.md +33 -0
  443. package/es/vs_code_extension.md +139 -0
  444. package/fr/CI_CD.md +149 -0
  445. package/fr/autoFill.md +157 -0
  446. package/fr/configuration.md +481 -0
  447. package/fr/dictionary/condition.md +213 -0
  448. package/fr/dictionary/content_extention_customization.md +81 -0
  449. package/fr/dictionary/enumeration.md +221 -0
  450. package/fr/dictionary/file.md +206 -0
  451. package/fr/dictionary/function_fetching.md +190 -0
  452. package/fr/dictionary/get_started.md +466 -0
  453. package/fr/dictionary/insertion.md +161 -0
  454. package/fr/dictionary/markdown.md +335 -0
  455. package/fr/dictionary/nesting.md +249 -0
  456. package/fr/dictionary/translation.md +287 -0
  457. package/fr/header.md +5 -0
  458. package/fr/how_works_intlayer.md +217 -0
  459. package/fr/index.md +122 -0
  460. package/fr/interest_of_intlayer.md +132 -0
  461. package/fr/intlayer_CMS.md +334 -0
  462. package/fr/intlayer_cli.md +274 -0
  463. package/fr/intlayer_visual_editor.md +210 -0
  464. package/fr/intlayer_with_angular.md +3 -0
  465. package/fr/intlayer_with_create_react_app.md +1192 -0
  466. package/fr/intlayer_with_express.md +270 -0
  467. package/fr/intlayer_with_lynx+react.md +466 -0
  468. package/fr/intlayer_with_nextjs_14.md +1258 -0
  469. package/fr/intlayer_with_nextjs_15.md +1308 -0
  470. package/fr/intlayer_with_nextjs_page_router.md +1085 -0
  471. package/fr/intlayer_with_react_native+expo.md +535 -0
  472. package/fr/intlayer_with_vite+preact.md +1621 -0
  473. package/fr/intlayer_with_vite+react.md +1589 -0
  474. package/fr/intlayer_with_vite+solid.md +3 -0
  475. package/fr/intlayer_with_vite+svelte.md +3 -0
  476. package/fr/intlayer_with_vite+vue.md +947 -0
  477. package/fr/introduction.md +190 -0
  478. package/fr/mcp_server.md +152 -0
  479. package/fr/packages/@intlayer/api/index.md +31 -0
  480. package/fr/packages/@intlayer/chokidar/index.md +31 -0
  481. package/fr/packages/@intlayer/cli/index.md +21 -0
  482. package/fr/packages/@intlayer/config/index.md +116 -0
  483. package/fr/packages/@intlayer/core/index.md +25 -0
  484. package/fr/packages/@intlayer/design-system/index.md +21 -0
  485. package/fr/packages/@intlayer/dictionary-entry/index.md +21 -0
  486. package/fr/packages/@intlayer/editor/index.md +21 -0
  487. package/fr/packages/@intlayer/editor-react/index.md +21 -0
  488. package/fr/packages/@intlayer/webpack/index.md +35 -0
  489. package/fr/packages/angular-intlayer/index.md +3 -0
  490. package/fr/packages/express-intlayer/index.md +238 -0
  491. package/fr/packages/express-intlayer/t.md +432 -0
  492. package/fr/packages/intlayer/getConfiguration.md +120 -0
  493. package/fr/packages/intlayer/getEnumeration.md +138 -0
  494. package/fr/packages/intlayer/getHTMLTextDir.md +97 -0
  495. package/fr/packages/intlayer/getLocaleLang.md +57 -0
  496. package/fr/packages/intlayer/getLocaleName.md +93 -0
  497. package/fr/packages/intlayer/getLocalizedUrl.md +221 -0
  498. package/fr/packages/intlayer/getMultilingualUrls.md +198 -0
  499. package/fr/packages/intlayer/getPathWithoutLocale.md +50 -0
  500. package/fr/packages/intlayer/getTranslation.md +166 -0
  501. package/fr/packages/intlayer/getTranslationContent.md +166 -0
  502. package/fr/packages/intlayer/index.md +476 -0
  503. package/fr/packages/intlayer-cli/index.md +41 -0
  504. package/fr/packages/intlayer-editor/index.md +115 -0
  505. package/fr/packages/lynx-intlayer/index.md +58 -0
  506. package/fr/packages/next-intlayer/index.md +266 -0
  507. package/fr/packages/next-intlayer/t.md +325 -0
  508. package/fr/packages/next-intlayer/useDictionary.md +242 -0
  509. package/fr/packages/next-intlayer/useIntlayer.md +237 -0
  510. package/fr/packages/next-intlayer/useIntlayerAsync.md +211 -0
  511. package/fr/packages/next-intlayer/useLocale.md +105 -0
  512. package/fr/packages/preact-intlayer/index.md +3 -0
  513. package/fr/packages/react-intlayer/index.md +257 -0
  514. package/fr/packages/react-intlayer/t.md +277 -0
  515. package/fr/packages/react-intlayer/useDictionary.md +269 -0
  516. package/fr/packages/react-intlayer/useIntlayer.md +234 -0
  517. package/fr/packages/react-intlayer/useIntlayerAsync.md +226 -0
  518. package/fr/packages/react-intlayer/useLocale.md +184 -0
  519. package/fr/packages/react-native-intlayer/index.md +57 -0
  520. package/fr/packages/react-scripts-intlayer/index.md +57 -0
  521. package/fr/packages/solid-intlayer/index.md +3 -0
  522. package/fr/packages/svelte-intlayer/index.md +3 -0
  523. package/fr/packages/vite-intlayer/index.md +53 -0
  524. package/fr/packages/vue-intlayer/index.md +3 -0
  525. package/fr/per_locale_file.md +297 -0
  526. package/fr/privacy_notice.md +57 -0
  527. package/fr/roadmap.md +206 -0
  528. package/fr/terms_of_service.md +33 -0
  529. package/fr/vs_code_extension.md +139 -0
  530. package/hi/CI_CD.md +149 -0
  531. package/hi/autoFill.md +157 -0
  532. package/hi/configuration.md +509 -0
  533. package/hi/dictionary/condition.md +213 -0
  534. package/hi/dictionary/content_extention_customization.md +81 -0
  535. package/hi/dictionary/enumeration.md +221 -0
  536. package/hi/dictionary/file.md +209 -0
  537. package/hi/dictionary/function_fetching.md +188 -0
  538. package/hi/dictionary/get_started.md +490 -0
  539. package/hi/dictionary/insertion.md +167 -0
  540. package/hi/dictionary/markdown.md +344 -0
  541. package/hi/dictionary/nesting.md +249 -0
  542. package/hi/dictionary/translation.md +307 -0
  543. package/hi/header.md +7 -0
  544. package/hi/how_works_intlayer.md +217 -0
  545. package/hi/index.md +125 -0
  546. package/hi/interest_of_intlayer.md +132 -0
  547. package/hi/intlayer_CMS.md +334 -0
  548. package/hi/intlayer_cli.md +274 -0
  549. package/hi/intlayer_visual_editor.md +210 -0
  550. package/hi/intlayer_with_angular.md +3 -0
  551. package/hi/intlayer_with_create_react_app.md +1395 -0
  552. package/hi/intlayer_with_express.md +273 -0
  553. package/hi/intlayer_with_lynx+react.md +456 -0
  554. package/hi/intlayer_with_nextjs_14.md +1283 -0
  555. package/hi/intlayer_with_nextjs_15.md +1319 -0
  556. package/hi/intlayer_with_nextjs_page_router.md +1097 -0
  557. package/hi/intlayer_with_react_native+expo.md +554 -0
  558. package/hi/intlayer_with_vite+preact.md +1538 -0
  559. package/hi/intlayer_with_vite+react.md +1540 -0
  560. package/hi/intlayer_with_vite+solid.md +3 -0
  561. package/hi/intlayer_with_vite+svelte.md +3 -0
  562. package/hi/intlayer_with_vite+vue.md +840 -0
  563. package/hi/introduction.md +190 -0
  564. package/hi/mcp_server.md +150 -0
  565. package/hi/packages/@intlayer/api/index.md +31 -0
  566. package/hi/packages/@intlayer/chokidar/index.md +31 -0
  567. package/hi/packages/@intlayer/cli/index.md +21 -0
  568. package/hi/packages/@intlayer/config/index.md +116 -0
  569. package/hi/packages/@intlayer/core/index.md +25 -0
  570. package/hi/packages/@intlayer/design-system/index.md +21 -0
  571. package/hi/packages/@intlayer/dictionary-entry/index.md +21 -0
  572. package/hi/packages/@intlayer/editor/index.md +21 -0
  573. package/hi/packages/@intlayer/editor-react/index.md +21 -0
  574. package/hi/packages/@intlayer/webpack/index.md +35 -0
  575. package/hi/packages/angular-intlayer/index.md +3 -0
  576. package/hi/packages/express-intlayer/index.md +232 -0
  577. package/hi/packages/express-intlayer/t.md +445 -0
  578. package/hi/packages/intlayer/getConfiguration.md +120 -0
  579. package/hi/packages/intlayer/getEnumeration.md +138 -0
  580. package/hi/packages/intlayer/getHTMLTextDir.md +97 -0
  581. package/hi/packages/intlayer/getLocaleLang.md +57 -0
  582. package/hi/packages/intlayer/getLocaleName.md +93 -0
  583. package/hi/packages/intlayer/getLocalizedUrl.md +221 -0
  584. package/hi/packages/intlayer/getMultilingualUrls.md +198 -0
  585. package/hi/packages/intlayer/getPathWithoutLocale.md +50 -0
  586. package/hi/packages/intlayer/getTranslation.md +175 -0
  587. package/hi/packages/intlayer/getTranslationContent.md +175 -0
  588. package/hi/packages/intlayer/index.md +314 -0
  589. package/hi/packages/intlayer-cli/index.md +41 -0
  590. package/hi/packages/intlayer-editor/index.md +113 -0
  591. package/hi/packages/lynx-intlayer/index.md +58 -0
  592. package/hi/packages/next-intlayer/index.md +270 -0
  593. package/hi/packages/next-intlayer/t.md +337 -0
  594. package/hi/packages/next-intlayer/useDictionary.md +248 -0
  595. package/hi/packages/next-intlayer/useIntlayer.md +237 -0
  596. package/hi/packages/next-intlayer/useIntlayerAsync.md +211 -0
  597. package/hi/packages/next-intlayer/useLocale.md +105 -0
  598. package/hi/packages/preact-intlayer/index.md +3 -0
  599. package/hi/packages/react-intlayer/index.md +261 -0
  600. package/hi/packages/react-intlayer/t.md +283 -0
  601. package/hi/packages/react-intlayer/useDictionary.md +268 -0
  602. package/hi/packages/react-intlayer/useIntlayer.md +225 -0
  603. package/hi/packages/react-intlayer/useIntlayerAsync.md +226 -0
  604. package/hi/packages/react-intlayer/useLocale.md +184 -0
  605. package/hi/packages/react-native-intlayer/index.md +57 -0
  606. package/hi/packages/react-scripts-intlayer/index.md +57 -0
  607. package/hi/packages/solid-intlayer/index.md +3 -0
  608. package/hi/packages/svelte-intlayer/index.md +3 -0
  609. package/hi/packages/vite-intlayer/index.md +53 -0
  610. package/hi/packages/vue-intlayer/index.md +3 -0
  611. package/hi/per_locale_file.md +298 -0
  612. package/hi/privacy_notice.md +61 -0
  613. package/hi/roadmap.md +206 -0
  614. package/hi/terms_of_service.md +33 -0
  615. package/hi/vs_code_extension.md +139 -0
  616. package/index.cjs +1265 -0
  617. package/index.d.ts +100 -0
  618. package/it/CI_CD.md +149 -0
  619. package/it/autoFill.md +157 -0
  620. package/it/configuration.md +503 -0
  621. package/it/dictionary/condition.md +213 -0
  622. package/it/dictionary/content_extention_customization.md +81 -0
  623. package/it/dictionary/enumeration.md +221 -0
  624. package/it/dictionary/file.md +207 -0
  625. package/it/dictionary/function_fetching.md +190 -0
  626. package/it/dictionary/get_started.md +466 -0
  627. package/it/dictionary/insertion.md +161 -0
  628. package/it/dictionary/markdown.md +343 -0
  629. package/it/dictionary/nesting.md +249 -0
  630. package/it/dictionary/translation.md +287 -0
  631. package/it/header.md +7 -0
  632. package/it/how_works_intlayer.md +217 -0
  633. package/it/index.md +125 -0
  634. package/it/interest_of_intlayer.md +132 -0
  635. package/it/intlayer_CMS.md +334 -0
  636. package/it/intlayer_cli.md +274 -0
  637. package/it/intlayer_visual_editor.md +210 -0
  638. package/it/intlayer_with_angular.md +3 -0
  639. package/it/intlayer_with_create_react_app.md +413 -0
  640. package/it/intlayer_with_express.md +267 -0
  641. package/it/intlayer_with_lynx+react.md +482 -0
  642. package/it/intlayer_with_nextjs_14.md +1269 -0
  643. package/it/intlayer_with_nextjs_15.md +1319 -0
  644. package/it/intlayer_with_nextjs_page_router.md +1095 -0
  645. package/it/intlayer_with_react_native+expo.md +261 -0
  646. package/it/intlayer_with_vite+preact.md +1681 -0
  647. package/it/intlayer_with_vite+react.md +1580 -0
  648. package/it/intlayer_with_vite+solid.md +3 -0
  649. package/it/intlayer_with_vite+svelte.md +3 -0
  650. package/it/intlayer_with_vite+vue.md +989 -0
  651. package/it/introduction.md +192 -0
  652. package/it/mcp_server.md +152 -0
  653. package/it/packages/@intlayer/api/index.md +31 -0
  654. package/it/packages/@intlayer/chokidar/index.md +31 -0
  655. package/it/packages/@intlayer/cli/index.md +21 -0
  656. package/it/packages/@intlayer/config/index.md +116 -0
  657. package/it/packages/@intlayer/core/index.md +25 -0
  658. package/it/packages/@intlayer/design-system/index.md +21 -0
  659. package/it/packages/@intlayer/dictionary-entry/index.md +21 -0
  660. package/it/packages/@intlayer/editor/index.md +21 -0
  661. package/it/packages/@intlayer/editor-react/index.md +21 -0
  662. package/it/packages/@intlayer/webpack/index.md +35 -0
  663. package/it/packages/angular-intlayer/index.md +3 -0
  664. package/it/packages/express-intlayer/index.md +229 -0
  665. package/it/packages/express-intlayer/t.md +432 -0
  666. package/it/packages/intlayer/getConfiguration.md +120 -0
  667. package/it/packages/intlayer/getEnumeration.md +138 -0
  668. package/it/packages/intlayer/getHTMLTextDir.md +97 -0
  669. package/it/packages/intlayer/getLocaleLang.md +57 -0
  670. package/it/packages/intlayer/getLocaleName.md +93 -0
  671. package/it/packages/intlayer/getLocalizedUrl.md +221 -0
  672. package/it/packages/intlayer/getMultilingualUrls.md +200 -0
  673. package/it/packages/intlayer/getPathWithoutLocale.md +50 -0
  674. package/it/packages/intlayer/getTranslation.md +166 -0
  675. package/it/packages/intlayer/getTranslationContent.md +166 -0
  676. package/it/packages/intlayer/index.md +479 -0
  677. package/it/packages/intlayer-cli/index.md +41 -0
  678. package/it/packages/intlayer-editor/index.md +113 -0
  679. package/it/packages/lynx-intlayer/index.md +58 -0
  680. package/it/packages/next-intlayer/index.md +267 -0
  681. package/it/packages/next-intlayer/t.md +326 -0
  682. package/it/packages/next-intlayer/useDictionary.md +242 -0
  683. package/it/packages/next-intlayer/useIntlayer.md +237 -0
  684. package/it/packages/next-intlayer/useIntlayerAsync.md +211 -0
  685. package/it/packages/next-intlayer/useLocale.md +105 -0
  686. package/it/packages/preact-intlayer/index.md +3 -0
  687. package/it/packages/react-intlayer/index.md +260 -0
  688. package/it/packages/react-intlayer/t.md +277 -0
  689. package/it/packages/react-intlayer/useDictionary.md +260 -0
  690. package/it/packages/react-intlayer/useIntlayer.md +225 -0
  691. package/it/packages/react-intlayer/useIntlayerAsync.md +226 -0
  692. package/it/packages/react-intlayer/useLocale.md +184 -0
  693. package/it/packages/react-native-intlayer/index.md +57 -0
  694. package/it/packages/react-scripts-intlayer/index.md +57 -0
  695. package/it/packages/solid-intlayer/index.md +5 -0
  696. package/it/packages/svelte-intlayer/index.md +3 -0
  697. package/it/packages/vite-intlayer/index.md +53 -0
  698. package/it/packages/vue-intlayer/index.md +5 -0
  699. package/it/per_locale_file.md +298 -0
  700. package/it/privacy_notice.md +61 -0
  701. package/it/roadmap.md +206 -0
  702. package/it/terms_of_service.md +33 -0
  703. package/it/vs_code_extension.md +139 -0
  704. package/ja/CI_CD.md +149 -0
  705. package/ja/autoFill.md +157 -0
  706. package/ja/configuration.md +507 -0
  707. package/ja/dictionary/condition.md +213 -0
  708. package/ja/dictionary/content_extention_customization.md +81 -0
  709. package/ja/dictionary/enumeration.md +221 -0
  710. package/ja/dictionary/file.md +209 -0
  711. package/ja/dictionary/function_fetching.md +190 -0
  712. package/ja/dictionary/get_started.md +466 -0
  713. package/ja/dictionary/insertion.md +161 -0
  714. package/ja/dictionary/markdown.md +343 -0
  715. package/ja/dictionary/nesting.md +249 -0
  716. package/ja/dictionary/translation.md +287 -0
  717. package/ja/header.md +7 -0
  718. package/ja/how_works_intlayer.md +217 -0
  719. package/ja/index.md +125 -0
  720. package/ja/interest_of_intlayer.md +132 -0
  721. package/ja/intlayer_CMS.md +334 -0
  722. package/ja/intlayer_cli.md +274 -0
  723. package/ja/intlayer_visual_editor.md +213 -0
  724. package/ja/intlayer_with_angular.md +3 -0
  725. package/ja/intlayer_with_create_react_app.md +1186 -0
  726. package/ja/intlayer_with_express.md +267 -0
  727. package/ja/intlayer_with_lynx+react.md +482 -0
  728. package/ja/intlayer_with_nextjs_14.md +1256 -0
  729. package/ja/intlayer_with_nextjs_15.md +1308 -0
  730. package/ja/intlayer_with_nextjs_page_router.md +1085 -0
  731. package/ja/intlayer_with_react_native+expo.md +537 -0
  732. package/ja/intlayer_with_vite+preact.md +1601 -0
  733. package/ja/intlayer_with_vite+react.md +1555 -0
  734. package/ja/intlayer_with_vite+solid.md +3 -0
  735. package/ja/intlayer_with_vite+svelte.md +3 -0
  736. package/ja/intlayer_with_vite+vue.md +990 -0
  737. package/ja/introduction.md +186 -0
  738. package/ja/mcp_server.md +150 -0
  739. package/ja/packages/@intlayer/api/index.md +31 -0
  740. package/ja/packages/@intlayer/chokidar/index.md +31 -0
  741. package/ja/packages/@intlayer/cli/index.md +21 -0
  742. package/ja/packages/@intlayer/config/index.md +116 -0
  743. package/ja/packages/@intlayer/core/index.md +25 -0
  744. package/ja/packages/@intlayer/design-system/index.md +21 -0
  745. package/ja/packages/@intlayer/dictionary-entry/index.md +21 -0
  746. package/ja/packages/@intlayer/editor/index.md +21 -0
  747. package/ja/packages/@intlayer/editor-react/index.md +21 -0
  748. package/ja/packages/@intlayer/webpack/index.md +35 -0
  749. package/ja/packages/angular-intlayer/index.md +3 -0
  750. package/ja/packages/express-intlayer/index.md +229 -0
  751. package/ja/packages/express-intlayer/t.md +432 -0
  752. package/ja/packages/intlayer/getConfiguration.md +120 -0
  753. package/ja/packages/intlayer/getEnumeration.md +140 -0
  754. package/ja/packages/intlayer/getHTMLTextDir.md +97 -0
  755. package/ja/packages/intlayer/getLocaleLang.md +59 -0
  756. package/ja/packages/intlayer/getLocaleName.md +93 -0
  757. package/ja/packages/intlayer/getLocalizedUrl.md +221 -0
  758. package/ja/packages/intlayer/getMultilingualUrls.md +198 -0
  759. package/ja/packages/intlayer/getPathWithoutLocale.md +50 -0
  760. package/ja/packages/intlayer/getTranslation.md +166 -0
  761. package/ja/packages/intlayer/getTranslationContent.md +166 -0
  762. package/ja/packages/intlayer/index.md +479 -0
  763. package/ja/packages/intlayer-cli/index.md +41 -0
  764. package/ja/packages/intlayer-editor/index.md +115 -0
  765. package/ja/packages/lynx-intlayer/index.md +58 -0
  766. package/ja/packages/next-intlayer/index.md +263 -0
  767. package/ja/packages/next-intlayer/t.md +326 -0
  768. package/ja/packages/next-intlayer/useDictionary.md +242 -0
  769. package/ja/packages/next-intlayer/useIntlayer.md +237 -0
  770. package/ja/packages/next-intlayer/useIntlayerAsync.md +211 -0
  771. package/ja/packages/next-intlayer/useLocale.md +105 -0
  772. package/ja/packages/preact-intlayer/index.md +3 -0
  773. package/ja/packages/react-intlayer/index.md +257 -0
  774. package/ja/packages/react-intlayer/t.md +277 -0
  775. package/ja/packages/react-intlayer/useDictionary.md +260 -0
  776. package/ja/packages/react-intlayer/useIntlayer.md +225 -0
  777. package/ja/packages/react-intlayer/useIntlayerAsync.md +226 -0
  778. package/ja/packages/react-intlayer/useLocale.md +184 -0
  779. package/ja/packages/react-native-intlayer/index.md +57 -0
  780. package/ja/packages/react-scripts-intlayer/index.md +57 -0
  781. package/ja/packages/solid-intlayer/index.md +3 -0
  782. package/ja/packages/svelte-intlayer/index.md +3 -0
  783. package/ja/packages/vite-intlayer/index.md +53 -0
  784. package/ja/packages/vue-intlayer/index.md +3 -0
  785. package/ja/per_locale_file.md +298 -0
  786. package/ja/privacy_notice.md +57 -0
  787. package/ja/roadmap.md +206 -0
  788. package/ja/terms_of_service.md +33 -0
  789. package/ja/vs_code_extension.md +139 -0
  790. package/ko/CI_CD.md +149 -0
  791. package/ko/autoFill.md +157 -0
  792. package/ko/configuration.md +507 -0
  793. package/ko/dictionary/condition.md +213 -0
  794. package/ko/dictionary/content_extention_customization.md +81 -0
  795. package/ko/dictionary/enumeration.md +221 -0
  796. package/ko/dictionary/file.md +207 -0
  797. package/ko/dictionary/function_fetching.md +190 -0
  798. package/ko/dictionary/get_started.md +466 -0
  799. package/ko/dictionary/insertion.md +167 -0
  800. package/ko/dictionary/markdown.md +343 -0
  801. package/ko/dictionary/nesting.md +249 -0
  802. package/ko/dictionary/translation.md +287 -0
  803. package/ko/header.md +7 -0
  804. package/ko/how_works_intlayer.md +216 -0
  805. package/ko/index.md +125 -0
  806. package/ko/interest_of_intlayer.md +132 -0
  807. package/ko/intlayer_CMS.md +334 -0
  808. package/ko/intlayer_cli.md +274 -0
  809. package/ko/intlayer_visual_editor.md +210 -0
  810. package/ko/intlayer_with_angular.md +3 -0
  811. package/ko/intlayer_with_create_react_app.md +1186 -0
  812. package/ko/intlayer_with_express.md +267 -0
  813. package/ko/intlayer_with_lynx+react.md +482 -0
  814. package/ko/intlayer_with_nextjs_14.md +1267 -0
  815. package/ko/intlayer_with_nextjs_15.md +1319 -0
  816. package/ko/intlayer_with_nextjs_page_router.md +1097 -0
  817. package/ko/intlayer_with_react_native+expo.md +537 -0
  818. package/ko/intlayer_with_vite+preact.md +1682 -0
  819. package/ko/intlayer_with_vite+react.md +1582 -0
  820. package/ko/intlayer_with_vite+solid.md +3 -0
  821. package/ko/intlayer_with_vite+svelte.md +3 -0
  822. package/ko/intlayer_with_vite+vue.md +988 -0
  823. package/ko/introduction.md +186 -0
  824. package/ko/mcp_server.md +150 -0
  825. package/ko/packages/@intlayer/api/index.md +31 -0
  826. package/ko/packages/@intlayer/chokidar/index.md +31 -0
  827. package/ko/packages/@intlayer/cli/index.md +21 -0
  828. package/ko/packages/@intlayer/config/index.md +116 -0
  829. package/ko/packages/@intlayer/core/index.md +25 -0
  830. package/ko/packages/@intlayer/design-system/index.md +21 -0
  831. package/ko/packages/@intlayer/dictionary-entry/index.md +21 -0
  832. package/ko/packages/@intlayer/editor/index.md +21 -0
  833. package/ko/packages/@intlayer/editor-react/index.md +21 -0
  834. package/ko/packages/@intlayer/webpack/index.md +35 -0
  835. package/ko/packages/angular-intlayer/index.md +5 -0
  836. package/ko/packages/express-intlayer/index.md +229 -0
  837. package/ko/packages/express-intlayer/t.md +432 -0
  838. package/ko/packages/intlayer/getConfiguration.md +120 -0
  839. package/ko/packages/intlayer/getEnumeration.md +138 -0
  840. package/ko/packages/intlayer/getHTMLTextDir.md +97 -0
  841. package/ko/packages/intlayer/getLocaleLang.md +57 -0
  842. package/ko/packages/intlayer/getLocaleName.md +93 -0
  843. package/ko/packages/intlayer/getLocalizedUrl.md +221 -0
  844. package/ko/packages/intlayer/getMultilingualUrls.md +198 -0
  845. package/ko/packages/intlayer/getPathWithoutLocale.md +50 -0
  846. package/ko/packages/intlayer/getTranslation.md +166 -0
  847. package/ko/packages/intlayer/getTranslationContent.md +166 -0
  848. package/ko/packages/intlayer/index.md +480 -0
  849. package/ko/packages/intlayer-cli/index.md +41 -0
  850. package/ko/packages/intlayer-editor/index.md +113 -0
  851. package/ko/packages/lynx-intlayer/index.md +58 -0
  852. package/ko/packages/next-intlayer/index.md +267 -0
  853. package/ko/packages/next-intlayer/t.md +337 -0
  854. package/ko/packages/next-intlayer/useDictionary.md +242 -0
  855. package/ko/packages/next-intlayer/useIntlayer.md +237 -0
  856. package/ko/packages/next-intlayer/useIntlayerAsync.md +211 -0
  857. package/ko/packages/next-intlayer/useLocale.md +105 -0
  858. package/ko/packages/preact-intlayer/index.md +3 -0
  859. package/ko/packages/react-intlayer/index.md +260 -0
  860. package/ko/packages/react-intlayer/t.md +277 -0
  861. package/ko/packages/react-intlayer/useDictionary.md +268 -0
  862. package/ko/packages/react-intlayer/useIntlayer.md +225 -0
  863. package/ko/packages/react-intlayer/useIntlayerAsync.md +226 -0
  864. package/ko/packages/react-intlayer/useLocale.md +184 -0
  865. package/ko/packages/react-native-intlayer/index.md +57 -0
  866. package/ko/packages/react-scripts-intlayer/index.md +57 -0
  867. package/ko/packages/solid-intlayer/index.md +3 -0
  868. package/ko/packages/svelte-intlayer/index.md +3 -0
  869. package/ko/packages/vite-intlayer/index.md +53 -0
  870. package/ko/packages/vue-intlayer/index.md +3 -0
  871. package/ko/per_locale_file.md +300 -0
  872. package/ko/privacy_notice.md +61 -0
  873. package/ko/roadmap.md +206 -0
  874. package/ko/terms_of_service.md +33 -0
  875. package/ko/vs_code_extension.md +139 -0
  876. package/package.json +96 -0
  877. package/pt/CI_CD.md +149 -0
  878. package/pt/autoFill.md +157 -0
  879. package/pt/configuration.md +503 -0
  880. package/pt/dictionary/condition.md +213 -0
  881. package/pt/dictionary/content_extention_customization.md +81 -0
  882. package/pt/dictionary/enumeration.md +221 -0
  883. package/pt/dictionary/file.md +210 -0
  884. package/pt/dictionary/function_fetching.md +190 -0
  885. package/pt/dictionary/get_started.md +490 -0
  886. package/pt/dictionary/insertion.md +161 -0
  887. package/pt/dictionary/markdown.md +339 -0
  888. package/pt/dictionary/nesting.md +249 -0
  889. package/pt/dictionary/translation.md +322 -0
  890. package/pt/header.md +7 -0
  891. package/pt/how_works_intlayer.md +216 -0
  892. package/pt/index.md +125 -0
  893. package/pt/interest_of_intlayer.md +132 -0
  894. package/pt/intlayer_CMS.md +334 -0
  895. package/pt/intlayer_cli.md +274 -0
  896. package/pt/intlayer_visual_editor.md +210 -0
  897. package/pt/intlayer_with_angular.md +3 -0
  898. package/pt/intlayer_with_create_react_app.md +1204 -0
  899. package/pt/intlayer_with_express.md +270 -0
  900. package/pt/intlayer_with_lynx+react.md +467 -0
  901. package/pt/intlayer_with_nextjs_14.md +1269 -0
  902. package/pt/intlayer_with_nextjs_15.md +1319 -0
  903. package/pt/intlayer_with_nextjs_page_router.md +1109 -0
  904. package/pt/intlayer_with_react_native+expo.md +259 -0
  905. package/pt/intlayer_with_vite+preact.md +1663 -0
  906. package/pt/intlayer_with_vite+react.md +1621 -0
  907. package/pt/intlayer_with_vite+solid.md +3 -0
  908. package/pt/intlayer_with_vite+svelte.md +3 -0
  909. package/pt/intlayer_with_vite+vue.md +989 -0
  910. package/pt/introduction.md +193 -0
  911. package/pt/mcp_server.md +150 -0
  912. package/pt/packages/@intlayer/api/index.md +31 -0
  913. package/pt/packages/@intlayer/chokidar/index.md +31 -0
  914. package/pt/packages/@intlayer/cli/index.md +21 -0
  915. package/pt/packages/@intlayer/config/index.md +116 -0
  916. package/pt/packages/@intlayer/core/index.md +25 -0
  917. package/pt/packages/@intlayer/design-system/index.md +21 -0
  918. package/pt/packages/@intlayer/dictionary-entry/index.md +21 -0
  919. package/pt/packages/@intlayer/editor/index.md +21 -0
  920. package/pt/packages/@intlayer/editor-react/index.md +21 -0
  921. package/pt/packages/@intlayer/webpack/index.md +35 -0
  922. package/pt/packages/angular-intlayer/index.md +3 -0
  923. package/pt/packages/express-intlayer/index.md +232 -0
  924. package/pt/packages/express-intlayer/t.md +267 -0
  925. package/pt/packages/intlayer/getConfiguration.md +120 -0
  926. package/pt/packages/intlayer/getEnumeration.md +138 -0
  927. package/pt/packages/intlayer/getHTMLTextDir.md +97 -0
  928. package/pt/packages/intlayer/getLocaleLang.md +57 -0
  929. package/pt/packages/intlayer/getLocaleName.md +93 -0
  930. package/pt/packages/intlayer/getLocalizedUrl.md +221 -0
  931. package/pt/packages/intlayer/getMultilingualUrls.md +198 -0
  932. package/pt/packages/intlayer/getPathWithoutLocale.md +50 -0
  933. package/pt/packages/intlayer/getTranslation.md +175 -0
  934. package/pt/packages/intlayer/getTranslationContent.md +177 -0
  935. package/pt/packages/intlayer/index.md +484 -0
  936. package/pt/packages/intlayer-cli/index.md +41 -0
  937. package/pt/packages/intlayer-editor/index.md +113 -0
  938. package/pt/packages/lynx-intlayer/index.md +58 -0
  939. package/pt/packages/next-intlayer/index.md +270 -0
  940. package/pt/packages/next-intlayer/t.md +341 -0
  941. package/pt/packages/next-intlayer/useDictionary.md +248 -0
  942. package/pt/packages/next-intlayer/useIntlayer.md +237 -0
  943. package/pt/packages/next-intlayer/useIntlayerAsync.md +211 -0
  944. package/pt/packages/next-intlayer/useLocale.md +105 -0
  945. package/pt/packages/preact-intlayer/index.md +3 -0
  946. package/pt/packages/react-intlayer/index.md +261 -0
  947. package/pt/packages/react-intlayer/t.md +289 -0
  948. package/pt/packages/react-intlayer/useDictionary.md +268 -0
  949. package/pt/packages/react-intlayer/useIntlayer.md +225 -0
  950. package/pt/packages/react-intlayer/useIntlayerAsync.md +226 -0
  951. package/pt/packages/react-intlayer/useLocale.md +184 -0
  952. package/pt/packages/react-native-intlayer/index.md +57 -0
  953. package/pt/packages/react-scripts-intlayer/index.md +57 -0
  954. package/pt/packages/solid-intlayer/index.md +3 -0
  955. package/pt/packages/svelte-intlayer/index.md +3 -0
  956. package/pt/packages/vite-intlayer/index.md +53 -0
  957. package/pt/packages/vue-intlayer/index.md +3 -0
  958. package/pt/per_locale_file.md +298 -0
  959. package/pt/privacy_notice.md +61 -0
  960. package/pt/roadmap.md +206 -0
  961. package/pt/terms_of_service.md +33 -0
  962. package/pt/vs_code_extension.md +139 -0
  963. package/ru/CI_CD.md +149 -0
  964. package/ru/autoFill.md +157 -0
  965. package/ru/configuration.md +507 -0
  966. package/ru/dictionary/condition.md +213 -0
  967. package/ru/dictionary/content_extention_customization.md +81 -0
  968. package/ru/dictionary/enumeration.md +221 -0
  969. package/ru/dictionary/file.md +209 -0
  970. package/ru/dictionary/function_fetching.md +188 -0
  971. package/ru/dictionary/get_started.md +311 -0
  972. package/ru/dictionary/insertion.md +161 -0
  973. package/ru/dictionary/markdown.md +339 -0
  974. package/ru/dictionary/nesting.md +249 -0
  975. package/ru/dictionary/translation.md +322 -0
  976. package/ru/environment/angular.md +3 -0
  977. package/ru/header.md +7 -0
  978. package/ru/how_works_intlayer.md +217 -0
  979. package/ru/index.md +125 -0
  980. package/ru/interest_of_intlayer.md +132 -0
  981. package/ru/intlayer_CMS.md +334 -0
  982. package/ru/intlayer_cli.md +274 -0
  983. package/ru/intlayer_visual_editor.md +210 -0
  984. package/ru/intlayer_with_angular.md +3 -0
  985. package/ru/intlayer_with_create_react_app.md +1196 -0
  986. package/ru/intlayer_with_express.md +273 -0
  987. package/ru/intlayer_with_lynx+react.md +482 -0
  988. package/ru/intlayer_with_nextjs_14.md +1274 -0
  989. package/ru/intlayer_with_nextjs_15.md +1318 -0
  990. package/ru/intlayer_with_nextjs_page_router.md +1100 -0
  991. package/ru/intlayer_with_react_native+expo.md +537 -0
  992. package/ru/intlayer_with_vite+preact.md +1663 -0
  993. package/ru/intlayer_with_vite+react.md +1546 -0
  994. package/ru/intlayer_with_vite+solid.md +3 -0
  995. package/ru/intlayer_with_vite+svelte.md +3 -0
  996. package/ru/intlayer_with_vite+vue.md +987 -0
  997. package/ru/introduction.md +190 -0
  998. package/ru/mcp_server.md +152 -0
  999. package/ru/packages/@intlayer/api/index.md +31 -0
  1000. package/ru/packages/@intlayer/chokidar/index.md +31 -0
  1001. package/ru/packages/@intlayer/cli/index.md +23 -0
  1002. package/ru/packages/@intlayer/config/index.md +116 -0
  1003. package/ru/packages/@intlayer/core/index.md +25 -0
  1004. package/ru/packages/@intlayer/design-system/index.md +21 -0
  1005. package/ru/packages/@intlayer/dictionary-entry/index.md +21 -0
  1006. package/ru/packages/@intlayer/editor/index.md +21 -0
  1007. package/ru/packages/@intlayer/editor-react/index.md +21 -0
  1008. package/ru/packages/@intlayer/webpack/index.md +35 -0
  1009. package/ru/packages/angular-intlayer/index.md +3 -0
  1010. package/ru/packages/express-intlayer/index.md +235 -0
  1011. package/ru/packages/express-intlayer/t.md +445 -0
  1012. package/ru/packages/intlayer/getConfiguration.md +120 -0
  1013. package/ru/packages/intlayer/getEnumeration.md +140 -0
  1014. package/ru/packages/intlayer/getHTMLTextDir.md +97 -0
  1015. package/ru/packages/intlayer/getLocaleLang.md +59 -0
  1016. package/ru/packages/intlayer/getLocaleName.md +93 -0
  1017. package/ru/packages/intlayer/getLocalizedUrl.md +221 -0
  1018. package/ru/packages/intlayer/getMultilingualUrls.md +198 -0
  1019. package/ru/packages/intlayer/getPathWithoutLocale.md +50 -0
  1020. package/ru/packages/intlayer/getTranslation.md +177 -0
  1021. package/ru/packages/intlayer/getTranslationContent.md +175 -0
  1022. package/ru/packages/intlayer/index.md +275 -0
  1023. package/ru/packages/intlayer-cli/index.md +41 -0
  1024. package/ru/packages/intlayer-editor/index.md +115 -0
  1025. package/ru/packages/lynx-intlayer/index.md +58 -0
  1026. package/ru/packages/next-intlayer/index.md +267 -0
  1027. package/ru/packages/next-intlayer/t.md +340 -0
  1028. package/ru/packages/next-intlayer/useDictionary.md +248 -0
  1029. package/ru/packages/next-intlayer/useIntlayer.md +237 -0
  1030. package/ru/packages/next-intlayer/useIntlayerAsync.md +211 -0
  1031. package/ru/packages/next-intlayer/useLocale.md +105 -0
  1032. package/ru/packages/preact-intlayer/index.md +3 -0
  1033. package/ru/packages/react-intlayer/index.md +261 -0
  1034. package/ru/packages/react-intlayer/t.md +289 -0
  1035. package/ru/packages/react-intlayer/useDictionary.md +268 -0
  1036. package/ru/packages/react-intlayer/useIntlayer.md +225 -0
  1037. package/ru/packages/react-intlayer/useIntlayerAsync.md +226 -0
  1038. package/ru/packages/react-intlayer/useLocale.md +184 -0
  1039. package/ru/packages/react-native-intlayer/index.md +57 -0
  1040. package/ru/packages/react-scripts-intlayer/index.md +57 -0
  1041. package/ru/packages/solid-intlayer/index.md +3 -0
  1042. package/ru/packages/svelte-intlayer/index.md +3 -0
  1043. package/ru/packages/vite-intlayer/index.md +53 -0
  1044. package/ru/packages/vue-intlayer/index.md +3 -0
  1045. package/ru/per_locale_file.md +298 -0
  1046. package/ru/privacy_notice.md +61 -0
  1047. package/ru/roadmap.md +206 -0
  1048. package/ru/terms_of_service.md +33 -0
  1049. package/ru/vs_code_extension.md +139 -0
  1050. package/zh/CI_CD.md +149 -0
  1051. package/zh/autoFill.md +157 -0
  1052. package/zh/configuration.md +484 -0
  1053. package/zh/dictionary/condition.md +213 -0
  1054. package/zh/dictionary/content_extention_customization.md +81 -0
  1055. package/zh/dictionary/enumeration.md +221 -0
  1056. package/zh/dictionary/file.md +209 -0
  1057. package/zh/dictionary/function_fetching.md +188 -0
  1058. package/zh/dictionary/get_started.md +490 -0
  1059. package/zh/dictionary/insertion.md +161 -0
  1060. package/zh/dictionary/markdown.md +342 -0
  1061. package/zh/dictionary/nesting.md +249 -0
  1062. package/zh/dictionary/translation.md +287 -0
  1063. package/zh/header.md +7 -0
  1064. package/zh/how_works_intlayer.md +217 -0
  1065. package/zh/index.md +125 -0
  1066. package/zh/interest_of_intlayer.md +132 -0
  1067. package/zh/intlayer_CMS.md +334 -0
  1068. package/zh/intlayer_cli.md +274 -0
  1069. package/zh/intlayer_visual_editor.md +210 -0
  1070. package/zh/intlayer_with_angular.md +3 -0
  1071. package/zh/intlayer_with_create_react_app.md +1196 -0
  1072. package/zh/intlayer_with_express.md +267 -0
  1073. package/zh/intlayer_with_lynx+react.md +484 -0
  1074. package/zh/intlayer_with_nextjs_14.md +1286 -0
  1075. package/zh/intlayer_with_nextjs_15.md +1322 -0
  1076. package/zh/intlayer_with_nextjs_page_router.md +1097 -0
  1077. package/zh/intlayer_with_react_native+expo.md +539 -0
  1078. package/zh/intlayer_with_vite+preact.md +1681 -0
  1079. package/zh/intlayer_with_vite+react.md +1577 -0
  1080. package/zh/intlayer_with_vite+solid.md +3 -0
  1081. package/zh/intlayer_with_vite+svelte.md +3 -0
  1082. package/zh/intlayer_with_vite+vue.md +988 -0
  1083. package/zh/introduction.md +186 -0
  1084. package/zh/mcp_server.md +152 -0
  1085. package/zh/packages/@intlayer/api/index.md +31 -0
  1086. package/zh/packages/@intlayer/chokidar/index.md +31 -0
  1087. package/zh/packages/@intlayer/cli/index.md +21 -0
  1088. package/zh/packages/@intlayer/config/index.md +116 -0
  1089. package/zh/packages/@intlayer/core/index.md +25 -0
  1090. package/zh/packages/@intlayer/design-system/index.md +21 -0
  1091. package/zh/packages/@intlayer/dictionary-entry/index.md +21 -0
  1092. package/zh/packages/@intlayer/editor/index.md +21 -0
  1093. package/zh/packages/@intlayer/editor-react/index.md +21 -0
  1094. package/zh/packages/@intlayer/webpack/index.md +35 -0
  1095. package/zh/packages/angular-intlayer/index.md +3 -0
  1096. package/zh/packages/express-intlayer/index.md +229 -0
  1097. package/zh/packages/express-intlayer/t.md +432 -0
  1098. package/zh/packages/intlayer/getConfiguration.md +120 -0
  1099. package/zh/packages/intlayer/getEnumeration.md +140 -0
  1100. package/zh/packages/intlayer/getHTMLTextDir.md +97 -0
  1101. package/zh/packages/intlayer/getLocaleLang.md +57 -0
  1102. package/zh/packages/intlayer/getLocaleName.md +93 -0
  1103. package/zh/packages/intlayer/getLocalizedUrl.md +221 -0
  1104. package/zh/packages/intlayer/getMultilingualUrls.md +198 -0
  1105. package/zh/packages/intlayer/getPathWithoutLocale.md +50 -0
  1106. package/zh/packages/intlayer/getTranslation.md +166 -0
  1107. package/zh/packages/intlayer/getTranslationContent.md +166 -0
  1108. package/zh/packages/intlayer/index.md +360 -0
  1109. package/zh/packages/intlayer-cli/index.md +41 -0
  1110. package/zh/packages/intlayer-editor/index.md +113 -0
  1111. package/zh/packages/lynx-intlayer/index.md +60 -0
  1112. package/zh/packages/next-intlayer/index.md +267 -0
  1113. package/zh/packages/next-intlayer/t.md +338 -0
  1114. package/zh/packages/next-intlayer/useDictionary.md +242 -0
  1115. package/zh/packages/next-intlayer/useIntlayer.md +237 -0
  1116. package/zh/packages/next-intlayer/useIntlayerAsync.md +211 -0
  1117. package/zh/packages/next-intlayer/useLocale.md +105 -0
  1118. package/zh/packages/preact-intlayer/index.md +3 -0
  1119. package/zh/packages/react-intlayer/index.md +257 -0
  1120. package/zh/packages/react-intlayer/t.md +271 -0
  1121. package/zh/packages/react-intlayer/useDictionary.md +260 -0
  1122. package/zh/packages/react-intlayer/useIntlayer.md +225 -0
  1123. package/zh/packages/react-intlayer/useIntlayerAsync.md +226 -0
  1124. package/zh/packages/react-intlayer/useLocale.md +184 -0
  1125. package/zh/packages/react-native-intlayer/index.md +57 -0
  1126. package/zh/packages/react-scripts-intlayer/index.md +57 -0
  1127. package/zh/packages/solid-intlayer/index.md +3 -0
  1128. package/zh/packages/svelte-intlayer/index.md +3 -0
  1129. package/zh/packages/vite-intlayer/index.md +53 -0
  1130. package/zh/packages/vue-intlayer/index.md +3 -0
  1131. package/zh/per_locale_file.md +298 -0
  1132. package/zh/privacy_notice.md +61 -0
  1133. package/zh/roadmap.md +206 -0
  1134. package/zh/terms_of_service.md +33 -0
  1135. package/zh/vs_code_extension.md +139 -0
@@ -0,0 +1,1546 @@
1
+ # Начало работы с интернационализацией (i18n) с Intlayer, Vite и React
2
+
3
+ <iframe title="Vite + React: Build a Multilingual App from Scratch using 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/dS9L7uJeak4?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
4
+
5
+ Смотрите [шаблон приложения](https://github.com/aymericzip/intlayer-vite-react-template) на GitHub.
6
+
7
+ ## Что такое Intlayer?
8
+
9
+ **Intlayer** , это инновационная библиотека с открытым исходным кодом для интернационализации (i18n), разработанная для упрощения поддержки многоязычности в современных веб-приложениях.
10
+
11
+ С помощью Intlayer вы можете:
12
+
13
+ - **Легко управлять переводами** с использованием декларативных словарей на уровне компонентов.
14
+ - **Динамически локализовать метаданные**, маршруты и контент.
15
+ - **Обеспечить поддержку TypeScript** с автогенерируемыми типами, улучшая автозаполнение и обнаружение ошибок.
16
+ - **Использовать расширенные функции**, такие как динамическое определение и переключение локали.
17
+
18
+ ---
19
+
20
+ ## Пошаговое руководство по настройке Intlayer в приложении Vite и React
21
+
22
+ ### Шаг 1: Установка зависимостей
23
+
24
+ Установите необходимые пакеты с помощью npm:
25
+
26
+ ```bash packageManager="npm"
27
+ npm install intlayer react-intlayer vite-intlayer
28
+ ```
29
+
30
+ ```bash packageManager="pnpm"
31
+ pnpm add intlayer react-intlayer vite-intlayer
32
+ ```
33
+
34
+ ```bash packageManager="yarn"
35
+ yarn add intlayer react-intlayer vite-intlayer
36
+ ```
37
+
38
+ - **intlayer**
39
+
40
+ Основной пакет, предоставляющий инструменты интернационализации для управления конфигурацией, переводами, [объявления контента](https://github.com/aymericzip/intlayer/blob/main/docs/ru/dictionary/get_started.md), транспиляции и [CLI-команд](https://github.com/aymericzip/intlayer/blob/main/docs/ru/intlayer_cli.md).
41
+
42
+ - **react-intlayer**
43
+ Пакет, интегрирующий Intlayer с приложением React. Он предоставляет провайдеры контекста и хуки для интернационализации в React.
44
+
45
+ - **vite-intlayer**
46
+ Включает плагин Vite для интеграции Intlayer с [сборщиком Vite](https://vite.dev/guide/why.html#why-bundle-for-production), а также middleware для определения предпочтительной локали пользователя, управления cookies и обработки перенаправлений URL.
47
+
48
+ ### Шаг 2: Конфигурация вашего проекта
49
+
50
+ Создайте файл конфигурации для настройки языков вашего приложения:
51
+
52
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
53
+ import { Locales, type IntlayerConfig } from "intlayer";
54
+
55
+ const config: IntlayerConfig = {
56
+ internationalization: {
57
+ locales: [
58
+ Locales.ENGLISH,
59
+ Locales.FRENCH,
60
+ Locales.SPANISH,
61
+ // Ваши другие локали
62
+ ],
63
+ defaultLocale: Locales.ENGLISH,
64
+ },
65
+ };
66
+
67
+ export default config;
68
+ ```
69
+
70
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
71
+ import { Locales } from "intlayer";
72
+
73
+ /** @type {import('intlayer').IntlayerConfig} */
74
+ const config = {
75
+ internationalization: {
76
+ locales: [
77
+ Locales.ENGLISH,
78
+ Locales.FRENCH,
79
+ Locales.SPANISH,
80
+ // Ваши другие локали
81
+ ],
82
+ defaultLocale: Locales.ENGLISH,
83
+ },
84
+ };
85
+
86
+ export default config;
87
+ ```
88
+
89
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
90
+ const { Locales } = require("intlayer");
91
+
92
+ /** @type {import('intlayer').IntlayerConfig} */
93
+ const config = {
94
+ internationalization: {
95
+ locales: [
96
+ Locales.ENGLISH,
97
+ Locales.FRENCH,
98
+ Locales.SPANISH,
99
+ // Ваши другие локали
100
+ ],
101
+ defaultLocale: Locales.ENGLISH,
102
+ },
103
+ };
104
+
105
+ module.exports = config;
106
+ ```
107
+
108
+ > Через этот файл конфигурации вы можете настроить локализованные URL, перенаправления middleware, имена cookies, расположение и расширение ваших деклараций контента, отключить логи Intlayer в консоли и многое другое. Для полного списка доступных параметров обратитесь к [документации по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/ru/configuration.md).
109
+
110
+ ### Шаг 3: Интеграция Intlayer в конфигурацию Vite
111
+
112
+ Добавьте плагин intlayer в вашу конфигурацию.
113
+
114
+ ```typescript fileName="vite.config.ts" codeFormat="typescript"
115
+ import { defineConfig } from "vite";
116
+ import react from "@vitejs/plugin-react-swc";
117
+ import { intlayerPlugin } from "vite-intlayer";
118
+
119
+ // https://vitejs.dev/config/
120
+ export default defineConfig({
121
+ plugins: [react(), intlayerPlugin()],
122
+ });
123
+ ```
124
+
125
+ ```javascript fileName="vite.config.mjs" codeFormat="esm"
126
+ import { defineConfig } from "vite";
127
+ import react from "@vitejs/plugin-react-swc";
128
+ import { intlayerPlugin } from "vite-intlayer";
129
+
130
+ // https://vitejs.dev/config/
131
+ export default defineConfig({
132
+ plugins: [react(), intlayerPlugin()],
133
+ });
134
+ ```
135
+
136
+ ```javascript fileName="vite.config.cjs" codeFormat="commonjs"
137
+ const { defineConfig } = require("vite");
138
+ const react = require("@vitejs/plugin-react-swc");
139
+ const { intlayerPlugin } = require("vite-intlayer");
140
+
141
+ // https://vitejs.dev/config/
142
+ module.exports = defineConfig({
143
+ plugins: [react(), intlayerPlugin()],
144
+ });
145
+ ```
146
+
147
+ > Плагин `intlayerPlugin()` для Vite используется для интеграции Intlayer с Vite. Он обеспечивает создание файлов декларации контента и их мониторинг в режиме разработки. Он определяет переменные окружения Intlayer в приложении Vite. Кроме того, он предоставляет алиасы для оптимизации производительности.
148
+
149
+ ### Шаг 4: Объявление вашего контента
150
+
151
+ Создайте и управляйте декларациями контента для хранения переводов:
152
+
153
+ ```tsx fileName="src/app.content.tsx" contentDeclarationFormat="typescript"
154
+ import { t, type Dictionary } from "intlayer";
155
+ import type { ReactNode } from "react";
156
+
157
+ const appContent = {
158
+ key: "app",
159
+ content: {
160
+ viteLogo: t({
161
+ ru: "Логотип Vite",
162
+ en: "Vite logo",
163
+ fr: "Logo Vite",
164
+ es: "Logo Vite",
165
+ }),
166
+ reactLogo: t({
167
+ ru: "Логотип React",
168
+ en: "React logo",
169
+ fr: "Logo React",
170
+ es: "Logo React",
171
+ }),
172
+
173
+ title: "Vite + React",
174
+
175
+ count: t({
176
+ ru: "счет равен ",
177
+ en: "count is ",
178
+ fr: "le compte est ",
179
+ es: "el recuento es ",
180
+ }),
181
+
182
+ edit: t<ReactNode>({
183
+ ru: (
184
+ <>
185
+ Редактируйте <code>src/App.tsx</code> и сохраните, чтобы
186
+ протестировать HMR
187
+ </>
188
+ ),
189
+ en: (
190
+ <>
191
+ Edit <code>src/App.tsx</code> and save to test HMR
192
+ </>
193
+ ),
194
+ fr: (
195
+ <>
196
+ Éditez <code>src/App.tsx</code> et enregistrez pour tester HMR
197
+ </>
198
+ ),
199
+ es: (
200
+ <>
201
+ Edita <code>src/App.tsx</code> y guarda para probar HMR
202
+ </>
203
+ ),
204
+ }),
205
+
206
+ readTheDocs: t({
207
+ ru: "Нажмите на логотипы Vite и React, чтобы узнать больше",
208
+ en: "Click on the Vite and React logos to learn more",
209
+ fr: "Cliquez sur les logos Vite et React pour en savoir plus",
210
+ es: "Haga clic en los logotipos de Vite y React para obtener más información",
211
+ }),
212
+ },
213
+ } satisfies Dictionary;
214
+
215
+ export default appContent;
216
+ ```
217
+
218
+ ```javascript fileName="src/app.content.mjs" contentDeclarationFormat="esm"
219
+ import { t } from "intlayer";
220
+
221
+ /** @type {import('intlayer').Dictionary} */
222
+ const appContent = {
223
+ key: "app",
224
+ content: {
225
+ viteLogo: t({
226
+ ru: "Логотип Vite",
227
+ en: "Vite logo",
228
+ fr: "Logo Vite",
229
+ es: "Logo Vite",
230
+ }),
231
+ reactLogo: t({
232
+ ru: "Логотип React",
233
+ en: "React logo",
234
+ fr: "Logo React",
235
+ es: "Logo React",
236
+ }),
237
+
238
+ title: "Vite + React",
239
+
240
+ count: t({
241
+ ru: "счет равен ",
242
+ en: "count is ",
243
+ fr: "le compte est ",
244
+ es: "el recuento es ",
245
+ }),
246
+
247
+ edit:
248
+ t <
249
+ ReactNode >
250
+ {
251
+ // Не забудьте импортировать React, если вы используете React node в вашем контенте
252
+ ru: (
253
+ <>
254
+ Редактируйте <code>src/App.tsx</code> и сохраните, чтобы
255
+ протестировать HMR
256
+ </>
257
+ ),
258
+ en: (
259
+ <>
260
+ Edit <code>src/App.tsx</code> and save to test HMR
261
+ </>
262
+ ),
263
+ fr: (
264
+ <>
265
+ Éditez <code>src/App.tsx</code> et enregistrez pour tester HMR
266
+ </>
267
+ ),
268
+ es: (
269
+ <>
270
+ Edita <code>src/App.tsx</code> y guarda para probar HMR
271
+ </>
272
+ ),
273
+ },
274
+
275
+ readTheDocs: t({
276
+ ru: "Нажмите на логотипы Vite и React, чтобы узнать больше",
277
+ en: "Click on the Vite and React logos to learn more",
278
+ fr: "Cliquez sur les logos Vite et React pour en savoir plus",
279
+ es: "Haga clic en los logotipos de Vite y React para obtener más información",
280
+ }),
281
+ },
282
+ };
283
+
284
+ export default appContent;
285
+ ```
286
+
287
+ ```javascript fileName="src/app.content.cjs" contentDeclarationFormat="commonjs"
288
+ const { t } = require("intlayer");
289
+
290
+ /** @type {import('intlayer').Dictionary} */
291
+ const appContent = {
292
+ key: "app",
293
+ content: {
294
+ viteLogo: t({
295
+ ru: "Логотип Vite",
296
+ en: "Vite logo",
297
+ fr: "Logo Vite",
298
+ es: "Logo Vite",
299
+ }),
300
+ reactLogo: t({
301
+ ru: "Логотип React",
302
+ en: "React logo",
303
+ fr: "Logo React",
304
+ es: "Logo React",
305
+ }),
306
+
307
+ title: "Vite + React",
308
+
309
+ count: t({
310
+ ru: "счет равен ",
311
+ en: "count is ",
312
+ fr: "le compte est ",
313
+ ---
314
+
315
+ {
316
+ "$schema": "https://intlayer.org/schema.json",
317
+ "key": "app",
318
+ "content": {
319
+ "viteLogo": {
320
+ "nodeType": "translation",
321
+ "translation": {
322
+ "en": "Vite logo",
323
+ "fr": "Logo Vite",
324
+ "es": "Logo Vite",
325
+ "ru": "Логотип Vite"
326
+ }
327
+ },
328
+ "reactLogo": {
329
+ "nodeType": "translation",
330
+ "translation": {
331
+ "en": "React logo",
332
+ "fr": "Logo React",
333
+ "es": "Logo React",
334
+ "ru": "Логотип React"
335
+ }
336
+ },
337
+ "title": {
338
+ "nodeType": "translation",
339
+ "translation": {
340
+ "en": "Vite + React",
341
+ "fr": "Vite + React",
342
+ "es": "Vite + React",
343
+ "ru": "Vite + React"
344
+ }
345
+ },
346
+ "count": {
347
+ "nodeType": "translation",
348
+ "translation": {
349
+ "en": "count is ",
350
+ "fr": "le compte est ",
351
+ "es": "el recuento es ",
352
+ "ru": "счёт равен "
353
+ }
354
+ },
355
+ "edit": {
356
+ "nodeType": "translation",
357
+ "translation": {
358
+ "en": "Edit src/App.tsx and save to test HMR",
359
+ "fr": "Éditez src/App.tsx et enregistrez pour tester HMR",
360
+ "es": "Edita src/App.tsx y guarda para probar HMR",
361
+ "ru": "Отредактируйте src/App.tsx и сохраните, чтобы протестировать HMR"
362
+ }
363
+ },
364
+ "readTheDocs": {
365
+ "nodeType": "translation",
366
+ "translation": {
367
+ "en": "Click on the Vite and React logos to learn more",
368
+ "fr": "Cliquez sur les logos Vite et React pour en savoir plus",
369
+ "es": "Haga clic en los logotipos de Vite y React para obtener más información",
370
+ "ru": "Нажмите на логотипы Vite и React, чтобы узнать больше"
371
+ }
372
+ }
373
+ }
374
+ }
375
+ ```
376
+
377
+ > Ваши декларации контента могут быть определены в любом месте вашего приложения, если они включены в каталог `contentDir` (по умолчанию, `./src`). И соответствуют расширению файла декларации контента (по умолчанию, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
378
+
379
+ > Для получения более подробной информации обратитесь к [документации по декларации контента](https://github.com/aymericzip/intlayer/blob/main/docs/ru/dictionary/get_started.md).
380
+
381
+ > Если ваш файл контента включает код TSX, вам следует рассмотреть возможность импорта `import React from "react";` в ваш файл контента.
382
+
383
+ ### Шаг 5: Используйте Intlayer в вашем коде
384
+
385
+ Получите доступ к словарям контента через ваше приложение:
386
+
387
+ ```tsx {5,9} fileName="src/App.tsx" codeFormat="typescript"
388
+ import { useState, type FC } from "react";
389
+ import reactLogo from "./assets/react.svg";
390
+ import viteLogo from "/vite.svg";
391
+ import "./App.css";
392
+ import { IntlayerProvider, useIntlayer } from "react-intlayer";
393
+
394
+ const AppContent: FC = () => {
395
+ const [count, setCount] = useState(0);
396
+ const content = useIntlayer("app");
397
+
398
+ return (
399
+ <>
400
+ <div>
401
+ <a href="https://vitejs.dev" target="_blank">
402
+ <img src={viteLogo} className="logo" alt={content.viteLogo.value} />
403
+ </a>
404
+ <a href="https://react.dev" target="_blank">
405
+ <img
406
+ src={reactLogo}
407
+ className="logo react"
408
+ alt={content.reactLogo.value}
409
+ />
410
+ </a>
411
+ </div>
412
+ <h1>{content.title}</h1>
413
+ <div className="card">
414
+ <button onClick={() => setCount((count) => count + 1)}>
415
+ {content.count}
416
+ {count}
417
+ </button>
418
+ <p>{content.edit}</p>
419
+ </div>
420
+ <p className="read-the-docs">{content.readTheDocs}</p>
421
+ </>
422
+ );
423
+ };
424
+
425
+ const App: FC = () => (
426
+ <IntlayerProvider>
427
+ <AppContent />
428
+ </IntlayerProvider>
429
+ );
430
+
431
+ export default App;
432
+ ```
433
+
434
+ ```tsx {5,9} fileName="src/App.msx" codeFormat="esm"
435
+ import { useState } from "react";
436
+ import reactLogo from "./assets/react.svg";
437
+ import viteLogo from "/vite.svg";
438
+ import "./App.css";
439
+ import { IntlayerProvider, useIntlayer } from "react-intlayer";
440
+
441
+ const AppContent = () => {
442
+ const [count, setCount] = useState(0);
443
+ const content = useIntlayer("app");
444
+
445
+ return (
446
+ <>
447
+ <div>
448
+ <a href="https://vitejs.dev" target="_blank">
449
+ <img src={viteLogo} className="logo" alt={content.viteLogo.value} />
450
+ </a>
451
+ <a href="https://react.dev" target="_blank">
452
+ <img
453
+ src={reactLogo}
454
+ className="logo react"
455
+ alt={content.reactLogo.value}
456
+ />
457
+ </a>
458
+ </div>
459
+ <h1>{content.title}</h1>
460
+ <div className="card">
461
+ <button onClick={() => setCount((count) => count + 1)}>
462
+ {content.count}
463
+ {count}
464
+ </button>
465
+ <p>{content.edit}</p>
466
+ </div>
467
+ <p className="read-the-docs">{content.readTheDocs}</p>
468
+ </>
469
+ );
470
+ };
471
+
472
+ const App = () => (
473
+ <IntlayerProvider>
474
+ <AppContent />
475
+ </IntlayerProvider>
476
+ );
477
+
478
+ export default App;
479
+ ```
480
+
481
+ ```tsx {5,9} fileName="src/App.csx" codeFormat="commonjs"
482
+ const { useState } = require("react");
483
+ const reactLogo = require("./assets/react.svg");
484
+ const viteLogo = require("/vite.svg");
485
+ require("./App.css");
486
+ const { IntlayerProvider, useIntlayer } = require("react-intlayer");
487
+
488
+ const AppContent = () => {
489
+ const [count, setCount] = useState(0);
490
+ const content = useIntlayer("app");
491
+
492
+ return (
493
+ <>
494
+ <div>
495
+ <a href="https://vitejs.dev" target="_blank">
496
+ <img src={viteLogo} className="logo" alt={content.viteLogo.value} />
497
+ </a>
498
+ <a href="https://react.dev" target="_blank">
499
+ <img
500
+ src={reactLogo}
501
+ className="logo react"
502
+ alt={content.reactLogo.value}
503
+ />
504
+ </a>
505
+ </div>
506
+ <h1>{content.title}</h1>
507
+ <div className="card">
508
+ <button onClick={() => setCount((count) => count + 1)}>
509
+ {content.count}
510
+ {count}
511
+ </button>
512
+ <p>{content.edit}</p>
513
+ </div>
514
+ <p className="read-the-docs">{content.readTheDocs}</p>
515
+ </>
516
+ );
517
+ };
518
+
519
+ const App = () => (
520
+ <IntlayerProvider>
521
+ <AppContent />
522
+ </IntlayerProvider>
523
+ );
524
+
525
+ module.exports = App;
526
+ ```
527
+
528
+ > Если вы хотите использовать ваш контент в атрибуте `string`, таком как `alt`, `title`, `href`, `aria-label` и т.д., вы должны вызвать значение функции, например:
529
+
530
+ > ```jsx
531
+ >
532
+ > ```
533
+
534
+ > <img src={content.image.src.value} alt={content.image.value} />
535
+
536
+ > ```
537
+ >
538
+ > ```
539
+
540
+ > Чтобы узнать больше о хуке `useIntlayer`, обратитесь к [документации](https://github.com/aymericzip/intlayer/blob/main/docs/ru/packages/react-intlayer/useIntlayer.md).
541
+
542
+ ### (Опционально) Шаг 6: Измените язык вашего контента
543
+
544
+ Чтобы изменить язык вашего контента, вы можете использовать функцию `setLocale`, предоставляемую хуком `useLocale`. Эта функция позволяет установить локаль приложения и обновить контент соответствующим образом.
545
+
546
+ ```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
547
+ import type { FC } from "react";
548
+ import { Locales } from "intlayer";
549
+ import { useLocale } from "react-intlayer";
550
+
551
+ const LocaleSwitcher: FC = () => {
552
+ const { setLocale } = useLocale();
553
+
554
+ return (
555
+ <button onClick={() => setLocale(Locales.English)}>
556
+ Изменить язык на английский
557
+ </button>
558
+ );
559
+ };
560
+ ```
561
+
562
+ ```jsx fileName="src/components/LocaleSwitcher.msx" codeFormat="esm"
563
+ import { Locales } from "intlayer";
564
+ import { useLocale } from "react-intlayer";
565
+
566
+ const LocaleSwitcher = () => {
567
+ const { setLocale } = useLocale();
568
+
569
+ return (
570
+ <button onClick={() => setLocale(Locales.English)}>
571
+ Изменить язык на английский
572
+ </button>
573
+ );
574
+ };
575
+ ```
576
+
577
+ ```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
578
+ const { Locales } = require("intlayer");
579
+
580
+ const { useLocale } = require("react-intlayer");
581
+
582
+ const LocaleSwitcher = () => {
583
+ const { setLocale } = useLocale();
584
+
585
+ return (
586
+ <button onClick={() => setLocale(Locales.English)}>
587
+ Изменить язык на английский
588
+ </button>
589
+ );
590
+ };
591
+ ```
592
+
593
+ > Чтобы узнать больше о хуке `useLocale`, обратитесь к [документации](https://github.com/aymericzip/intlayer/blob/main/docs/ru/packages/react-intlayer/useLocale.md).
594
+
595
+ ### (Необязательно) Шаг 7: Добавьте локализованные маршруты в ваше приложение
596
+
597
+ Цель этого шага , создать уникальные маршруты для каждого языка. Это полезно для SEO и SEO-дружественных URL.
598
+ Пример:
599
+
600
+ ```plaintext
601
+ - https://example.com/about
602
+ - https://example.com/es/about
603
+ - https://example.com/fr/about
604
+ ```
605
+
606
+ > По умолчанию маршруты не имеют префикса для языка по умолчанию. Если вы хотите добавить префикс для языка по умолчанию, вы можете установить опцию `middleware.prefixDefault` в `true` в вашей конфигурации. Подробнее см. в [документации по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/ru/configuration.md).
607
+
608
+ Чтобы добавить локализованные маршруты в ваше приложение, вы можете создать компонент `LocaleRouter`, который оборачивает маршруты вашего приложения и обрабатывает маршрутизацию на основе языка. Вот пример с использованием [React Router](https://reactrouter.com/home):
609
+
610
+ ```tsx fileName="src/components/LocaleRouter.tsx" codeFormat="typescript"
611
+ // Импорт необходимых зависимостей и функций
612
+ import { type Locales, configuration, getPathWithoutLocale } from "intlayer"; // Утилиты и типы из 'intlayer'
613
+ import type { FC, PropsWithChildren } from "react"; // Типы React для функциональных компонентов и пропсов
614
+ import { IntlayerProvider } from "react-intlayer"; // Провайдер для контекста интернационализации
615
+ import {
616
+ BrowserRouter,
617
+ Routes,
618
+ Route,
619
+ Navigate,
620
+ useLocation,
621
+ } from "react-router-dom"; // Компоненты маршрутизации для управления навигацией
622
+
623
+ // Деструктуризация конфигурации из Intlayer
624
+ const { internationalization, middleware } = configuration;
625
+ const { locales, defaultLocale } = internationalization;
626
+
627
+ /**
628
+ * Компонент, который обрабатывает локализацию и оборачивает дочерние элементы в соответствующий контекст языка.
629
+ * Управляет определением и проверкой языка на основе URL.
630
+ */
631
+ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
632
+ children,
633
+ locale,
634
+ }) => {
635
+ const { pathname, search } = useLocation(); // Получение текущего пути URL
636
+
637
+ // Определение текущего языка, с использованием языка по умолчанию, если не указан
638
+ const currentLocale = locale ?? defaultLocale;
639
+
640
+ // Удаление префикса языка из пути для создания базового пути
641
+ const pathWithoutLocale = getPathWithoutLocale(
642
+ pathname // Текущий путь URL
643
+ );
644
+
645
+ /**
646
+ * Если middleware.prefixDefault установлено в true, язык по умолчанию всегда должен быть с префиксом.
647
+ */
648
+ if (middleware.prefixDefault) {
649
+ // Проверка языка
650
+ if (!locale || !locales.includes(locale)) {
651
+ // Перенаправление на язык по умолчанию с обновленным путем
652
+ return (
653
+ <Navigate
654
+ to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
655
+ replace // Замена текущей записи в истории на новую
656
+ />
657
+ );
658
+ }
659
+
660
+ // Оборачивание дочерних элементов с помощью IntlayerProvider и установка текущего языка
661
+ return (
662
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
663
+ );
664
+ } else {
665
+ /**
666
+ * Когда middleware.prefixDefault установлено в false, язык по умолчанию не имеет префикса.
667
+ * Убедитесь, что текущий язык действителен и не является языком по умолчанию.
668
+ */
669
+ if (
670
+ currentLocale.toString() !== defaultLocale.toString() &&
671
+ !locales
672
+ .filter(
673
+ (locale) => locale.toString() !== defaultLocale.toString() // Исключение языка по умолчанию
674
+ )
675
+ .includes(currentLocale) // Проверка, находится ли текущий язык в списке допустимых языков
676
+ ) {
677
+ // Перенаправление на путь без префикса языка
678
+ return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
679
+ }
680
+
681
+ // Оборачивание дочерних элементов с помощью IntlayerProvider и установка текущего языка
682
+ return (
683
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
684
+ );
685
+ }
686
+ };
687
+
688
+ /**
689
+ * Компонент маршрутизатора, который настраивает маршруты для конкретных языков.
690
+ * Использует React Router для управления навигацией и рендеринга локализованных компонентов.
691
+ */
692
+ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
693
+ <BrowserRouter>
694
+ <Routes>
695
+ {locales
696
+ .filter(
697
+ (locale) => middleware.prefixDefault || locale !== defaultLocale
698
+ )
699
+ .map((locale) => (
700
+ <Route
701
+ // Шаблон маршрута для захвата языка (например, /en/, /fr/) и соответствия всем последующим путям
702
+ path={`/${locale}/*`}
703
+ key={locale}
704
+ element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Оборачивает дочерние элементы с управлением языком
705
+ />
706
+ ))}
707
+
708
+ {
709
+ // Если префикс для языка по умолчанию отключен, рендеринг дочерних элементов непосредственно в корневом пути
710
+ !middleware.prefixDefault && (
711
+ <Route
712
+ path="*"
713
+ element={
714
+ <AppLocalized locale={defaultLocale}>{children}</AppLocalized>
715
+ } // Оборачивает дочерние элементы с управлением языком
716
+ />
717
+ )
718
+ }
719
+ </Routes>
720
+ </BrowserRouter>
721
+ );
722
+ ```
723
+
724
+ ```jsx fileName="src/components/LocaleRouter.mjx" codeFormat="esm"
725
+ // Импорт необходимых зависимостей и функций
726
+ import { configuration, getPathWithoutLocale } from "intlayer"; // Утилиты и типы из 'intlayer'
727
+ import { IntlayerProvider } from "react-intlayer"; // Провайдер для контекста интернационализации
728
+ import {
729
+ BrowserRouter,
730
+ Routes,
731
+ Route,
732
+ Navigate,
733
+ useLocation,
734
+ } from "react-router-dom"; // Компоненты маршрутизации для управления навигацией
735
+
736
+ // Деструктуризация конфигурации из Intlayer
737
+ const { internationalization, middleware } = configuration;
738
+ const { locales, defaultLocale } = internationalization;
739
+
740
+ /**
741
+ * Компонент, который обрабатывает локализацию и оборачивает дочерние элементы в соответствующий контекст языка.
742
+ * Управляет определением и проверкой языка на основе URL.
743
+ */
744
+ const AppLocalized = ({ children, locale }) => {
745
+ const { pathname, search } = useLocation(); // Получение текущего пути URL
746
+
747
+ // Определение текущего языка, с использованием языка по умолчанию, если не указан
748
+ const currentLocale = locale ?? defaultLocale;
749
+
750
+ // Удаление префикса языка из пути для создания базового пути
751
+ const pathWithoutLocale = getPathWithoutLocale(
752
+ pathname // Текущий путь URL
753
+ );
754
+
755
+ /**
756
+ * Если middleware.prefixDefault установлено в true, язык по умолчанию всегда должен быть с префиксом.
757
+ */
758
+ if (middleware.prefixDefault) {
759
+ // Проверка языка
760
+ if (!locale || !locales.includes(locale)) {
761
+ // Перенаправление на язык по умолчанию с обновленным путем
762
+ return (
763
+ <Navigate
764
+ to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
765
+ replace // Замена текущей записи в истории на новую
766
+ />
767
+ );
768
+ }
769
+
770
+ // Оборачивание дочерних элементов с помощью IntlayerProvider и установка текущего языка
771
+ return (
772
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
773
+ );
774
+ } else {
775
+ /**
776
+ * Когда middleware.prefixDefault установлено в false, язык по умолчанию не имеет префикса.
777
+ * Убедитесь, что текущий язык действителен и не является языком по умолчанию.
778
+ */
779
+ if (
780
+ currentLocale.toString() !== defaultLocale.toString() &&
781
+ !locales
782
+ .filter(
783
+ (locale) => locale.toString() !== defaultLocale.toString() // Исключение языка по умолчанию
784
+ )
785
+ .includes(currentLocale) // Проверка, находится ли текущий язык в списке допустимых языков
786
+ ) {
787
+ // Перенаправление на путь без префикса языка
788
+ return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
789
+ }
790
+
791
+ // Оборачивание дочерних элементов с помощью IntlayerProvider и установка текущего языка
792
+ return (
793
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
794
+ );
795
+ }
796
+ };
797
+
798
+ // Импорт необходимых зависимостей и функций
799
+ const { configuration, getPathWithoutLocale } = require("intlayer"); // Утилиты и типы из 'intlayer'
800
+ const { IntlayerProvider, useLocale } = require("react-intlayer"); // Провайдер для контекста интернационализации
801
+ const {
802
+ BrowserRouter,
803
+ Routes,
804
+ Route,
805
+ Navigate,
806
+ useLocation,
807
+ } = require("react-router-dom"); // Компоненты маршрутизации для управления навигацией
808
+
809
+ // Деструктуризация конфигурации из Intlayer
810
+ const { internationalization, middleware } = configuration;
811
+ const { locales, defaultLocale } = internationalization;
812
+
813
+ /**
814
+ * Компонент, который обрабатывает локализацию и оборачивает дочерние элементы в соответствующий контекст локали.
815
+ * Управляет определением и проверкой локали на основе URL.
816
+ */
817
+ const AppLocalized = ({ children, locale }) => {
818
+ const { pathname, search } = useLocation(); // Получение текущего пути URL
819
+
820
+ // Определение текущей локали, с использованием локали по умолчанию, если она не указана
821
+ const currentLocale = locale ?? defaultLocale;
822
+
823
+ // Удаление префикса локали из пути для создания базового пути
824
+ const pathWithoutLocale = getPathWithoutLocale(
825
+ pathname // Текущий путь URL
826
+ );
827
+
828
+ /**
829
+ * Если middleware.prefixDefault равно true, локаль по умолчанию всегда должна быть с префиксом.
830
+ */
831
+ if (middleware.prefixDefault) {
832
+ // Проверка локали
833
+ if (!locale || !locales.includes(locale)) {
834
+ // Перенаправление на локаль по умолчанию с обновленным путем
835
+ return (
836
+ <Navigate
837
+ to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
838
+ replace // Замена текущей записи в истории на новую
839
+ />
840
+ );
841
+ }
842
+
843
+ // Оборачивание дочерних элементов с использованием IntlayerProvider и установка текущей локали
844
+ return (
845
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
846
+ );
847
+ } else {
848
+ /**
849
+ * Когда middleware.prefixDefault равно false, локаль по умолчанию не имеет префикса.
850
+ * Убедитесь, что текущая локаль действительна и не является локалью по умолчанию.
851
+ */
852
+ if (
853
+ currentLocale.toString() !== defaultLocale.toString() &&
854
+ !locales
855
+ .filter(
856
+ (locale) => locale.toString() !== defaultLocale.toString() // Исключение локали по умолчанию
857
+ )
858
+ .includes(currentLocale) // Проверка, находится ли текущая локаль в списке допустимых локалей
859
+ ) {
860
+ // Перенаправление на путь без префикса локали
861
+ return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
862
+ }
863
+
864
+ // Оборачивание дочерних элементов с использованием IntlayerProvider и установка текущей локали
865
+ return (
866
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
867
+ );
868
+ }
869
+ };
870
+
871
+ /**
872
+ * Компонент маршрутизатора, который настраивает маршруты, зависящие от локали.
873
+ * Использует React Router для управления навигацией и отображения локализованных компонентов.
874
+ */
875
+ const LocaleRouter = ({ children }) => (
876
+ <BrowserRouter>
877
+ <Routes>
878
+ {locales
879
+ .filter(
880
+ (locale) => middleware.prefixDefault || locale !== defaultLocale
881
+ )
882
+ .map((locale) => (
883
+ <Route
884
+ // Шаблон маршрута для захвата локали (например, /en/, /fr/) и сопоставления всех последующих путей
885
+ path={`/${locale}/*`}
886
+ key={locale}
887
+ element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Оборачивание дочерних элементов с управлением локалями
888
+ />
889
+ ))}
890
+
891
+ {
892
+ // Если префикс локали по умолчанию отключен, отображайте дочерние элементы непосредственно в корневом пути
893
+ !middleware.prefixDefault && (
894
+ <Route
895
+ path="*"
896
+ element={
897
+ <AppLocalized locale={defaultLocale}>{children}</AppLocalized>
898
+ } // Оборачивание дочерних элементов с управлением локалями
899
+ />
900
+ )
901
+ }
902
+ </Routes>
903
+ </BrowserRouter>
904
+ );
905
+ ```
906
+
907
+ Затем вы можете использовать компонент `LocaleRouter` в своем приложении:
908
+
909
+ ```tsx fileName="src/App.tsx" codeFormat="typescript"
910
+ import { LocaleRouter } from "./components/LocaleRouter";
911
+ import type { FC } from "react";
912
+
913
+ // ... Ваш компонент AppContent
914
+
915
+ const App: FC = () => (
916
+ <LocaleRouter>
917
+ <AppContent />
918
+ </LocaleRouter>
919
+ );
920
+ ```
921
+
922
+ ```jsx fileName="src/App.mjx" codeFormat="esm"
923
+ import { LocaleRouter } from "./components/LocaleRouter";
924
+
925
+ // ... Ваш компонент AppContent
926
+
927
+ const App = () => (
928
+ <LocaleRouter>
929
+ <AppContent />
930
+ </LocaleRouter>
931
+ );
932
+ ```
933
+
934
+ ```jsx fileName="src/App.cjx" codeFormat="commonjs"
935
+ const { LocaleRouter } = require("./components/LocaleRouter");
936
+
937
+ // ... Ваш компонент AppContent
938
+
939
+ const App = () => (
940
+ <LocaleRouter>
941
+ <AppContent />
942
+ </LocaleRouter>
943
+ );
944
+ ```
945
+
946
+ Параллельно вы также можете использовать `intLayerMiddlewarePlugin` для добавления маршрутизации на стороне сервера в ваше приложение. Этот плагин автоматически определяет текущую локаль на основе URL и устанавливает соответствующий cookie локали. Если локаль не указана, плагин определяет наиболее подходящую локаль на основе языковых предпочтений браузера пользователя. Если локаль не обнаружена, он перенаправляет на локаль по умолчанию.
947
+
948
+ ```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
949
+ import { defineConfig } from "vite";
950
+ import react from "@vitejs/plugin-react-swc";
951
+ import { intlayerPlugin, intLayerMiddlewarePlugin } from "vite-intlayer";
952
+
953
+ // https://vitejs.dev/config/
954
+ export default defineConfig({
955
+ plugins: [react(), intlayerPlugin(), intLayerMiddlewarePlugin()],
956
+ });
957
+ ```
958
+
959
+ ```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
960
+ import { defineConfig } from "vite";
961
+ import react from "@vitejs/plugin-react-swc";
962
+ import { intlayerPlugin, intLayerMiddlewarePlugin } from "vite-intlayer";
963
+
964
+ // https://vitejs.dev/config/
965
+ export default defineConfig({
966
+ plugins: [react(), intlayerPlugin(), intLayerMiddlewarePlugin()],
967
+ });
968
+ ```
969
+
970
+ ```javascript {5,10} fileName="vite.config.cjs" codeFormat="commonjs"
971
+ const { defineConfig } = require("vite");
972
+ const react = require("@vitejs/plugin-react-swc");
973
+ const { intlayerPlugin, intLayerMiddlewarePlugin } = require("vite-intlayer");
974
+
975
+ // https://vitejs.dev/config/
976
+ module.exports = defineConfig({
977
+ plugins: [react(), intlayerPlugin(), intLayerMiddlewarePlugin()],
978
+ });
979
+ ```
980
+
981
+ ### (Опционально) Шаг 8: Изменение URL при смене локали
982
+
983
+ Чтобы изменить URL при смене локали, вы можете использовать проп `onLocaleChange`, предоставляемый хуком `useLocale`. Параллельно вы можете использовать хуки `useLocation` и `useNavigate` из `react-router-dom` для обновления пути URL.
984
+
985
+ ```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
986
+ import { useLocation, useNavigate } from "react-router-dom";
987
+ import {
988
+ Locales,
989
+ getHTMLTextDir,
990
+ getLocaleName,
991
+ getLocalizedUrl,
992
+ } from "intlayer";
993
+ import { useLocale } from "react-intlayer";
994
+ import { type FC } from "react";
995
+
996
+ const LocaleSwitcher: FC = () => {
997
+ const { pathname, search } = useLocation(); // Получение текущего пути URL. Пример: /fr/about?foo=bar
998
+ const navigate = useNavigate();
999
+
1000
+ const { locale, availableLocales, setLocale } = useLocale({
1001
+ onLocaleChange: (locale) => {
1002
+ // Построить URL с обновленным языком
1003
+ // Пример: /es/about?foo=bar
1004
+ const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
1005
+
1006
+ // Обновить путь URL
1007
+ navigate(pathWithLocale);
1008
+ },
1009
+ });
1010
+
1011
+ return (
1012
+ <div>
1013
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
1014
+ <div id="localePopover" popover="auto">
1015
+ {availableLocales.map((localeItem) => (
1016
+ <a
1017
+ href={getLocalizedUrl(location.pathname, localeItem)}
1018
+ hrefLang={localeItem}
1019
+ aria-current={locale === localeItem ? "page" : undefined}
1020
+ onClick={(e) => {
1021
+ e.preventDefault();
1022
+ setLocale(localeItem);
1023
+ }}
1024
+ key={localeItem}
1025
+ >
1026
+ <span>
1027
+ {/* Локаль - например, FR */}
1028
+ {localeItem}
1029
+ </span>
1030
+ <span>
1031
+ {/* Язык на своем языке - например, Français */}
1032
+ {getLocaleName(localeItem, locale)}
1033
+ </span>
1034
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1035
+ {/* Язык на текущем языке - например, Francés, если текущая локаль установлена на Locales.SPANISH */}
1036
+ {getLocaleName(localeItem)}
1037
+ </span>
1038
+ <span dir="ltr" lang={Locales.ENGLISH}>
1039
+ {/* Язык на английском - например, French */}
1040
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1041
+ </span>
1042
+ </a>
1043
+ ))}
1044
+ </div>
1045
+ </div>
1046
+ );
1047
+ };
1048
+ ```
1049
+
1050
+ ```jsx fileName="src/components/LocaleSwitcher.msx" codeFormat="esm"
1051
+ import { useLocation, useNavigate } from "react-router-dom";
1052
+ import {
1053
+ Locales,
1054
+ getHTMLTextDir,
1055
+ getLocaleName,
1056
+ getLocalizedUrl,
1057
+ } from "intlayer";
1058
+ import { useLocale } from "react-intlayer";
1059
+
1060
+ const LocaleSwitcher = () => {
1061
+ const { pathname, search } = useLocation(); // Получить текущий путь URL. Пример: /fr/about?foo=bar
1062
+ const navigate = useNavigate();
1063
+
1064
+ const { locale, availableLocales, setLocale } = useLocale({
1065
+ onLocaleChange: (locale) => {
1066
+ // Построить URL с обновленным языком
1067
+ // Пример: /es/about?foo=bar
1068
+ const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
1069
+
1070
+ // Обновить путь URL
1071
+ navigate(pathWithLocale);
1072
+ },
1073
+ });
1074
+
1075
+ return (
1076
+ <div>
1077
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
1078
+ <div id="localePopover" popover="auto">
1079
+ {availableLocales.map((localeItem) => (
1080
+ <a
1081
+ href={getLocalizedUrl(location.pathname, localeItem)}
1082
+ hrefLang={localeItem}
1083
+ aria-current={locale === localeItem ? "page" : undefined}
1084
+ onClick={(e) => {
1085
+ e.preventDefault();
1086
+ setLocale(localeItem);
1087
+ }}
1088
+ key={localeItem}
1089
+ >
1090
+ <span>
1091
+ {/* Локаль - например, FR */}
1092
+ {localeItem}
1093
+ </span>
1094
+ <span>
1095
+ {/* Язык на своем языке - например, Français */}
1096
+ {getLocaleName(localeItem, locale)}
1097
+ </span>
1098
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1099
+ {/* Язык на текущем языке - например, Francés, если текущая локаль установлена на Locales.SPANISH */}
1100
+ {getLocaleName(localeItem)}
1101
+ </span>
1102
+ <span dir="ltr" lang={Locales.ENGLISH}>
1103
+ {/* Язык на английском - например, French */}
1104
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1105
+ </span>
1106
+ </a>
1107
+ ))}
1108
+ </div>
1109
+ </div>
1110
+ );
1111
+ };
1112
+ ```
1113
+
1114
+ ```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
1115
+ const { useLocation, useNavigate } = require("react-router-dom");
1116
+ const {
1117
+ Locales,
1118
+ getHTMLTextDir,
1119
+ getLocaleName,
1120
+ getLocalizedUrl,
1121
+ } = require("intlayer");
1122
+ const { useLocale } = require("react-intlayer");
1123
+
1124
+ const LocaleSwitcher = () => {
1125
+ const { pathname, search } = useLocation(); // Получить текущий путь URL. Пример: /fr/about?foo=bar
1126
+ const navigate = useNavigate();
1127
+
1128
+ const { locale, availableLocales, setLocale } = useLocale({
1129
+ onLocaleChange: (locale) => {
1130
+ // Построить URL с обновленным языком
1131
+ // Пример: /es/about?foo=bar
1132
+ const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
1133
+
1134
+ // Обновить путь URL
1135
+ navigate(pathWithLocale);
1136
+ },
1137
+ });
1138
+
1139
+ return (
1140
+ <div>
1141
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
1142
+ <div id="localePopover" popover="auto">
1143
+ {availableLocales.map((localeItem) => (
1144
+ <a
1145
+ href={getLocalizedUrl(location.pathname, localeItem)}
1146
+ hrefLang={localeItem}
1147
+ aria-current={locale === localeItem ? "page" : undefined}
1148
+ onClick={(e) => {
1149
+ e.preventDefault();
1150
+ setLocale(localeItem);
1151
+ }}
1152
+ key={localeItem}
1153
+ >
1154
+ <span>
1155
+ {/* Локаль - например, FR */}
1156
+ {localeItem}
1157
+ </span>
1158
+ <span>
1159
+ {/* Язык на своем языке - например, Français */}
1160
+ {getLocaleName(localeItem, locale)}
1161
+ </span>
1162
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1163
+ {/* Язык на текущем языке - например, Francés, если текущая локаль установлена на Locales.SPANISH */}
1164
+ {getLocaleName(localeItem)}
1165
+ </span>
1166
+ <span dir="ltr" lang={Locales.ENGLISH}>
1167
+ {/* Язык на английском - например, French */}
1168
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1169
+ </span>
1170
+ </a>
1171
+ ))}
1172
+ </div>
1173
+ </div>
1174
+ );
1175
+ };
1176
+ ```
1177
+
1178
+ > Ссылки на документацию:
1179
+
1180
+ > - [`useLocale` hook](https://github.com/aymericzip/intlayer/blob/main/docs/ru/packages/react-intlayer/useLocale.md)
1181
+
1182
+ > - [`getLocaleName` hook](https://github.com/aymericzip/intlayer/blob/main/docs/ru/packages/intlayer/getLocaleName.md)
1183
+
1184
+ > - [`getLocalizedUrl` hook](https://github.com/aymericzip/intlayer/blob/main/docs/ru/packages/intlayer/getLocalizedUrl.md)
1185
+
1186
+ > - [`getHTMLTextDir` hook](https://github.com/aymericzip/intlayer/blob/main/docs/ru/packages/intlayer/getHTMLTextDir.md)
1187
+
1188
+ > - [`hrefLang` attribute](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=ru)
1189
+
1190
+ > - [`lang` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang)
1191
+
1192
+ > - [`dir` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir)
1193
+
1194
+ > - [`aria-current` attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current)
1195
+
1196
+ ---
1197
+
1198
+ ### (Опционально) Шаг 9: Переключение атрибутов языка и направления HTML
1199
+
1200
+ Когда ваше приложение поддерживает несколько языков, важно обновлять атрибуты `lang` и `dir` тега `<html>` в соответствии с текущей локалью. Это обеспечивает:
1201
+
1202
+ - **Доступность**: Читалки экрана и вспомогательные технологии используют правильный атрибут `lang` для точного произношения и интерпретации контента.
1203
+ - **Отображение текста**: Атрибут `dir` (направление) гарантирует, что текст отображается в правильном порядке (например, слева направо для английского, справа налево для арабского или иврита), что важно для читаемости.
1204
+ - **SEO**: Поисковые системы используют атрибут `lang` для определения языка вашей страницы, помогая предоставлять правильный локализованный контент в результатах поиска.
1205
+
1206
+ Динамически обновляя эти атрибуты при изменении локали, вы гарантируете последовательный и доступный опыт для пользователей на всех поддерживаемых языках.
1207
+
1208
+ #### Реализация Hook
1209
+
1210
+ Создайте пользовательский hook для управления атрибутами HTML. Hook отслеживает изменения локали и обновляет атрибуты соответствующим образом:
1211
+
1212
+ ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
1213
+ import { useEffect } from "react";
1214
+ import { useLocale } from "react-intlayer";
1215
+ import { getHTMLTextDir } from "intlayer";
1216
+
1217
+ /**
1218
+
1219
+ * - `lang`: Информирует браузеры и поисковые системы о языке страницы.
1220
+ * - `dir`: Обеспечивает правильный порядок чтения (например, 'ltr' для английского, 'rtl' для арабского).
1221
+ *
1222
+ * Это динамическое обновление необходимо для корректного отображения текста, доступности и SEO.
1223
+ */
1224
+ export const useI18nHTMLAttributes = () => {
1225
+ const { locale } = useLocale();
1226
+
1227
+ useEffect(() => {
1228
+ // Обновить атрибут языка до текущей локали.
1229
+ document.documentElement.lang = locale;
1230
+
1231
+ // Установить направление текста в зависимости от текущей локали.
1232
+ document.documentElement.dir = getHTMLTextDir(locale);
1233
+ }, [locale]);
1234
+ };
1235
+ ```
1236
+
1237
+ ```jsx fileName="src/hooks/useI18nHTMLAttributes.msx" codeFormat="esm"
1238
+ import { useEffect } from "react";
1239
+ import { useLocale } from "react-intlayer";
1240
+ import { getHTMLTextDir } from "intlayer";
1241
+
1242
+ /**
1243
+ * Обновляет атрибуты `lang` и `dir` элемента HTML <html> в зависимости от текущей локали.
1244
+ * - `lang`: Информирует браузеры и поисковые системы о языке страницы.
1245
+ * - `dir`: Обеспечивает правильный порядок чтения (например, 'ltr' для английского, 'rtl' для арабского).
1246
+ *
1247
+ * Это динамическое обновление необходимо для корректного отображения текста, доступности и SEO.
1248
+ */
1249
+ export const useI18nHTMLAttributes = () => {
1250
+ const { locale } = useLocale();
1251
+
1252
+ useEffect(() => {
1253
+ // Обновить атрибут языка до текущей локали.
1254
+ document.documentElement.lang = locale;
1255
+
1256
+ // Установить направление текста в зависимости от текущей локали.
1257
+ document.documentElement.dir = getHTMLTextDir(locale);
1258
+ }, [locale]);
1259
+ };
1260
+ ```
1261
+
1262
+ ```jsx fileName="src/hooks/useI18nHTMLAttributes.csx" codeFormat="commonjs"
1263
+ const { useEffect } = require("react");
1264
+ const { useLocale } = require("react-intlayer");
1265
+ const { getHTMLTextDir } = require("intlayer");
1266
+
1267
+ /**
1268
+ * Обновляет атрибуты `lang` и `dir` элемента HTML <html> в зависимости от текущей локали.
1269
+ * - `lang`: Информирует браузеры и поисковые системы о языке страницы.
1270
+ * - `dir`: Обеспечивает правильный порядок чтения (например, 'ltr' для английского, 'rtl' для арабского).
1271
+ *
1272
+ * Это динамическое обновление необходимо для корректного отображения текста, доступности и SEO.
1273
+ */
1274
+ const useI18nHTMLAttributes = () => {
1275
+ const { locale } = useLocale();
1276
+
1277
+ useEffect(() => {
1278
+ // Обновить атрибут языка до текущей локали.
1279
+ document.documentElement.lang = locale;
1280
+
1281
+ // Установить направление текста в зависимости от текущей локали.
1282
+ document.documentElement.dir = getHTMLTextDir(locale);
1283
+ }, [locale]);
1284
+ };
1285
+
1286
+ module.exports = { useI18nHTMLAttributes };
1287
+ ```
1288
+
1289
+ #### Использование хука в вашем приложении
1290
+
1291
+ Интегрируйте хук в ваш основной компонент, чтобы атрибуты HTML обновлялись при изменении локали:
1292
+
1293
+ ```tsx fileName="src/App.tsx" codeFormat="typescript"
1294
+ import type { FC } from "react";
1295
+ import { IntlayerProvider, useIntlayer } from "react-intlayer";
1296
+ import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
1297
+ import "./App.css";
1298
+
1299
+ const AppContent: FC = () => {
1300
+ // Применить хук для обновления атрибутов lang и dir тега <html> в зависимости от локали.
1301
+ useI18nHTMLAttributes();
1302
+
1303
+ // ... Остальная часть вашего компонента
1304
+ };
1305
+
1306
+ const App: FC = () => (
1307
+ <IntlayerProvider>
1308
+ <AppContent />
1309
+ </IntlayerProvider>
1310
+ );
1311
+
1312
+ export default App;
1313
+ ```
1314
+
1315
+ ```jsx fileName="src/App.msx" codeFormat="esm"
1316
+ import { IntlayerProvider, useIntlayer } from "react-intlayer";
1317
+ import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
1318
+ import "./App.css";
1319
+
1320
+ const AppContent = () => {
1321
+ // Применить хук для обновления атрибутов lang и dir тега <html> в зависимости от локали.
1322
+ useI18nHTMLAttributes();
1323
+
1324
+ // ... Остальная часть вашего компонента
1325
+ };
1326
+
1327
+ const App = () => (
1328
+ <IntlayerProvider>
1329
+ <AppContent />
1330
+ </IntlayerProvider>
1331
+ );
1332
+
1333
+ export default App;
1334
+ ```
1335
+
1336
+ ```jsx fileName="src/App.csx" codeFormat="commonjs"
1337
+ const { FC } = require("react");
1338
+ const { IntlayerProvider, useIntlayer } = require("react-intlayer");
1339
+ const { useI18nHTMLAttributes } = require("./hooks/useI18nHTMLAttributes");
1340
+ require("./App.css");
1341
+
1342
+ const AppContent = () => {
1343
+ // Применить хук для обновления атрибутов lang и dir тега <html> в зависимости от локали.
1344
+ useI18nHTMLAttributes();
1345
+
1346
+ // ... Остальная часть вашего компонента
1347
+ };
1348
+
1349
+ const App = () => (
1350
+ <IntlayerProvider>
1351
+ <AppContent />
1352
+ </IntlayerProvider>
1353
+ );
1354
+
1355
+ module.exports = App;
1356
+ ```
1357
+
1358
+ Применяя эти изменения, ваше приложение будет:
1359
+
1360
+ - Обеспечивать, чтобы атрибут **языка** (`lang`) корректно отражал текущую локаль, что важно для SEO и поведения браузера.
1361
+ - Настраивать **направление текста** (`dir`) в соответствии с локалью, улучшая читаемость и удобство использования для языков с разным порядком чтения.
1362
+ - Предоставлять более **доступный** опыт, так как вспомогательные технологии зависят от этих атрибутов для оптимальной работы.
1363
+
1364
+ ### (Опционально) Шаг 10: Создание локализованного компонента Link
1365
+
1366
+ Чтобы обеспечить, что навигация вашего приложения учитывает текущую локаль, вы можете создать пользовательский компонент `Link`. Этот компонент автоматически добавляет префикс к внутренним URL-адресам с текущим языком, например, когда пользователь, говорящий на французском, нажимает на ссылку на страницу "О нас", он будет перенаправлен на `/ru/about` вместо `/about`.
1367
+
1368
+ Это поведение полезно по нескольким причинам:
1369
+
1370
+ - **SEO и пользовательский опыт**: Локализованные URL-адреса помогают поисковым системам правильно индексировать страницы на определенных языках и предоставляют пользователям контент на их предпочтительном языке.
1371
+ - **Последовательность**: Используя локализованную ссылку по всему приложению, вы гарантируете, что навигация остается в рамках текущей локали, предотвращая неожиданные переключения языка.
1372
+ - **Поддерживаемость**: Централизация логики локализации в одном компоненте упрощает управление URL-адресами, делая ваш код более удобным для поддержки и расширения по мере роста приложения.
1373
+
1374
+ Ниже представлена реализация локализованного компонента `Link` на TypeScript:
1375
+
1376
+ ```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
1377
+ import { getLocalizedUrl } from "intlayer";
1378
+ import {
1379
+ forwardRef,
1380
+ type DetailedHTMLProps,
1381
+ type AnchorHTMLAttributes,
1382
+ } from "react";
1383
+ import { useLocale } from "react-intlayer";
1384
+
1385
+ export interface LinkProps
1386
+ extends DetailedHTMLProps<
1387
+ AnchorHTMLAttributes<HTMLAnchorElement>,
1388
+ HTMLAnchorElement
1389
+ > {}
1390
+
1391
+ /**
1392
+ * Утилита для проверки, является ли данный URL внешним.
1393
+ * Если URL начинается с http:// или https://, он считается внешним.
1394
+ */
1395
+ export const checkIsExternalLink = (href?: string): boolean =>
1396
+ /^https?:\/\//.test(href ?? "");
1397
+
1398
+ /**
1399
+ * Пользовательский компонент Link, который адаптирует атрибут href в зависимости от текущей локали.
1400
+ * Для внутренних ссылок используется `getLocalizedUrl` для добавления префикса URL с локалью (например, /ru/about).
1401
+ * Это гарантирует, что навигация остается в рамках текущей локали.
1402
+ */
1403
+ export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
1404
+ ({ href, children, ...props }, ref) => {
1405
+ const { locale } = useLocale();
1406
+ const isExternalLink = checkIsExternalLink(href);
1407
+
1408
+ // Если ссылка внутренняя и предоставлен допустимый href, получить локализованный URL.
1409
+ const hrefI18n =
1410
+ href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
1411
+
1412
+ return (
1413
+ <a href={hrefI18n} ref={ref} {...props}>
1414
+ {children}
1415
+ </a>
1416
+ );
1417
+ }
1418
+ );
1419
+
1420
+ Link.displayName = "Link";
1421
+ ```
1422
+
1423
+ ```jsx fileName="src/components/Link.mjx" codeFormat="esm"
1424
+ import { getLocalizedUrl } from "intlayer";
1425
+ import { useLocale } from "react-intlayer";
1426
+ import { forwardRef } from "react";
1427
+
1428
+ /**
1429
+ * Утилита для проверки, является ли данный URL внешним.
1430
+ * Если URL начинается с http:// или https://, он считается внешним.
1431
+ */
1432
+ export const checkIsExternalLink = (href?: string): boolean =>
1433
+ /^https?:\/\//.test(href ?? "");
1434
+
1435
+ /**
1436
+ * Пользовательский компонент Link, который адаптирует атрибут href в зависимости от текущей локали.
1437
+ * Для внутренних ссылок используется `getLocalizedUrl` для добавления префикса URL с локалью (например, /ru/about).
1438
+ * Это гарантирует, что навигация остается в рамках текущей локали.
1439
+ */
1440
+ export const Link = forwardRef(({ href, children, ...props }, ref) => {
1441
+
1442
+ const { locale } = useLocale();
1443
+ const isExternalLink = checkIsExternalLink(href);
1444
+
1445
+ // Если ссылка внутренняя и предоставлен допустимый href, получить локализованный URL.
1446
+ const hrefI18n =
1447
+ href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
1448
+
1449
+ return (
1450
+ <a href={hrefI18n} ref={ref} {...props}>
1451
+ {children}
1452
+ </a>
1453
+ );
1454
+ });
1455
+
1456
+ Link.displayName = "Link";
1457
+ ```
1458
+
1459
+ ```jsx fileName="src/components/Link.csx" codeFormat="commonjs"
1460
+ const { getLocalizedUrl } = require("intlayer");
1461
+ const { useLocale } = require("react-intlayer");
1462
+ const { forwardRef } = require("react");
1463
+
1464
+ /**
1465
+ * Утилита для проверки, является ли данный URL внешним.
1466
+ * Если URL начинается с http:// или https://, он считается внешним.
1467
+ */
1468
+ const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
1469
+
1470
+ /**
1471
+ * Кастомный компонент Link, который адаптирует атрибут href в зависимости от текущей локали.
1472
+ * Для внутренних ссылок используется `getLocalizedUrl`, чтобы добавить префикс локали к URL (например, /ru/about).
1473
+ * Это гарантирует, что навигация остается в рамках одной локали.
1474
+ */
1475
+ const Link = forwardRef(({ href, children, ...props }, ref) => {
1476
+ const { locale } = useLocale();
1477
+ const isExternalLink = checkIsExternalLink(href);
1478
+
1479
+ // Если ссылка внутренняя и предоставлен допустимый href, получить локализованный URL.
1480
+ const localizedHref = isExternalLink ? href : getLocalizedUrl(href, locale);
1481
+
1482
+ return (
1483
+ <a
1484
+ href={localizedHref}
1485
+ ref={ref}
1486
+ {...props}
1487
+ aria-current={isExternalLink ? "external" : undefined}
1488
+ >
1489
+ {children}
1490
+ </a>
1491
+ );
1492
+ });
1493
+
1494
+ Link.displayName = "Link";
1495
+ ```
1496
+
1497
+ #### Как это работает
1498
+
1499
+ - **Определение внешних ссылок**:
1500
+ Вспомогательная функция `checkIsExternalLink` определяет, является ли URL внешним. Внешние ссылки остаются неизменными, так как они не требуют локализации.
1501
+
1502
+ - **Получение текущей локали**:
1503
+ Хук `useLocale` предоставляет текущую локаль (например, `ru` для русского).
1504
+
1505
+ - **Локализация URL**:
1506
+ Для внутренних ссылок (т.е. не внешних) используется `getLocalizedUrl`, чтобы автоматически добавить префикс локали к URL. Это означает, что если ваш пользователь находится на русском языке, передача `/about` в качестве `href` преобразует его в `/ru/about`.
1507
+
1508
+ - **Возврат ссылки**:
1509
+ Компонент возвращает элемент `<a>` с локализованным URL, обеспечивая навигацию, соответствующую локали.
1510
+
1511
+ Интегрируя этот компонент `Link` в вашем приложении, вы поддерживаете согласованный и ориентированный на язык пользовательский опыт, а также улучшаете SEO и удобство использования.
1512
+
1513
+ ### Настройка TypeScript
1514
+
1515
+ Intlayer использует расширение модулей для получения преимуществ TypeScript и укрепления вашей кодовой базы.
1516
+
1517
+ ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)
1518
+
1519
+ ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)
1520
+
1521
+ Убедитесь, что ваша конфигурация TypeScript включает автоматически сгенерированные типы.
1522
+
1523
+ ```json5 fileName="tsconfig.json"
1524
+ {
1525
+ // ... Ваша существующая конфигурация TypeScript
1526
+ "include": [
1527
+ // ... Ваша существующая конфигурация TypeScript
1528
+ ".intlayer/**/*.ts", // Включите автоматически сгенерированные типы
1529
+ ],
1530
+ }
1531
+ ```
1532
+
1533
+ ### Конфигурация Git
1534
+
1535
+ Рекомендуется игнорировать файлы, сгенерированные Intlayer. Это позволит вам избежать их добавления в ваш Git-репозиторий.
1536
+
1537
+ Для этого вы можете добавить следующие инструкции в ваш файл `.gitignore`:
1538
+
1539
+ ```plaintext
1540
+ # Игнорировать файлы, сгенерированные Intlayer
1541
+ .intlayer
1542
+ ```
1543
+
1544
+ ### Дальнейшие шаги
1545
+
1546
+ Чтобы углубиться, вы можете реализовать [визуальный редактор](https://github.com/aymericzip/intlayer/blob/main/docs/ru/intlayer_visual_editor.md) или вынести ваш контент с помощью [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/ru/intlayer_CMS.md).