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