@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,1577 @@
1
+ # 开始使用 Intlayer 和 Vite 及 React 进行国际化 (i18n)
2
+
3
+ <iframe title="Vite + React: Build a Multilingual App from Scratch using Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
4
+
5
+ 在 GitHub 上查看 [应用程序模板](https://github.com/aymericzip/intlayer-vite-react-template)。
6
+
7
+ ## 什么是 Intlayer?
8
+
9
+ **Intlayer** 是一个创新的开源国际化 (i18n) 库,旨在简化现代 Web 应用程序中的多语言支持。
10
+
11
+ 使用 Intlayer,您可以:
12
+
13
+ - **轻松管理翻译**,在组件级别使用声明式字典。
14
+ - **动态本地化元数据**、路由和内容。
15
+ - **确保 TypeScript 支持**,通过自动生成类型,提高自动补全和错误检测能力。
16
+ - **享受高级功能**,如动态语言检测和切换。
17
+
18
+ ---
19
+
20
+ ## 在 Vite 和 React 应用中设置 Intlayer 的分步指南
21
+
22
+ ### 第一步:安装依赖
23
+
24
+ 使用 npm 安装必要的包:
25
+
26
+ ```bash packageManager="npm"
27
+ npm install intlayer react-intlayer vite-intlayer
28
+ ```
29
+
30
+ ```bash packageManager="pnpm"
31
+ pnpm add intlayer react-intlayer vite-intlayer
32
+ ```
33
+
34
+ ```bash packageManager="yarn"
35
+ yarn add intlayer react-intlayer vite-intlayer
36
+ ```
37
+
38
+ - **intlayer**
39
+
40
+ 核心包,提供用于配置管理、翻译、[内容声明](https://github.com/aymericzip/intlayer/blob/main/docs/zh/dictionary/get_started.md)、转译和 [CLI 命令](https://github.com/aymericzip/intlayer/blob/main/docs/zh/intlayer_cli.md) 的国际化工具。
41
+
42
+ - **react-intlayer**
43
+ 将 Intlayer 集成到 React 应用程序的包。它为 React 国际化提供上下文提供者和钩子。
44
+
45
+ - **vite-intlayer**
46
+ 包括用于将 Intlayer 集成到 [Vite 打包工具](https://vite.dev/guide/why.html#why-bundle-for-production) 的 Vite 插件,以及用于检测用户首选语言、管理 Cookie 和处理 URL 重定向的中间件。
47
+
48
+ ### 第二步:配置您的项目
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、中间件重定向、Cookie 名称、内容声明的位置和扩展名、禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅 [配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/zh/configuration.md)。
109
+
110
+ ### 第三步:在 Vite 配置中集成 Intlayer
111
+
112
+ 将 intlayer 插件添加到您的配置中。
113
+
114
+ ```typescript fileName="vite.config.ts" codeFormat="typescript"
115
+ import { defineConfig } from "vite";
116
+ import react from "@vitejs/plugin-react-swc";
117
+ import { intlayerPlugin } from "vite-intlayer";
118
+
119
+ // https://vitejs.dev/config/
120
+ export default defineConfig({
121
+ plugins: [react(), intlayerPlugin()],
122
+ });
123
+ ```
124
+
125
+ ```javascript fileName="vite.config.mjs" codeFormat="esm"
126
+ import { defineConfig } from "vite";
127
+ import react from "@vitejs/plugin-react-swc";
128
+ import { intlayerPlugin } from "vite-intlayer";
129
+
130
+ // https://vitejs.dev/config/
131
+ export default defineConfig({
132
+ plugins: [react(), intlayerPlugin()],
133
+ });
134
+ ```
135
+
136
+ ```javascript fileName="vite.config.cjs" codeFormat="commonjs"
137
+ const { defineConfig } = require("vite");
138
+ const react = require("@vitejs/plugin-react-swc");
139
+ const { intlayerPlugin } = require("vite-intlayer");
140
+
141
+ // https://vitejs.dev/config/
142
+ module.exports = defineConfig({
143
+ plugins: [react(), intlayerPlugin()],
144
+ });
145
+ ```
146
+
147
+ > `intlayerPlugin()` Vite 插件用于将 Intlayer 集成到 Vite 中。它确保构建内容声明文件并在开发模式下监视它们。它在 Vite 应用程序中定义 Intlayer 环境变量。此外,它提供了别名以优化性能。
148
+
149
+ ### 第四步:声明您的内容
150
+
151
+ 创建并管理您的内容声明以存储翻译:
152
+
153
+ ```tsx fileName="src/app.content.tsx" contentDeclarationFormat="typescript"
154
+ import { t, type Dictionary } from "intlayer";
155
+ import type { ReactNode } from "react";
156
+
157
+ const appContent = {
158
+ key: "app",
159
+ content: {
160
+ viteLogo: t({
161
+ zh: "Vite 标志",
162
+ en: "Vite logo",
163
+ fr: "Logo Vite",
164
+ es: "Logo Vite",
165
+ }),
166
+ reactLogo: t({
167
+ zh: "React 标志",
168
+ en: "React logo",
169
+ fr: "Logo React",
170
+ es: "Logo React",
171
+ }),
172
+
173
+ title: "Vite + React",
174
+
175
+ count: t({
176
+ zh: "计数是 ",
177
+ en: "count is ",
178
+ fr: "le compte est ",
179
+ es: "el recuento es ",
180
+ }),
181
+
182
+ edit: t<ReactNode>({
183
+ zh: (
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
+ zh: "点击 Vite 和 React 标志以了解更多信息",
207
+ en: "Click on the Vite and React logos to learn more",
208
+ fr: "Cliquez sur les logos Vite et React pour en savoir plus",
209
+ es: "Haga clic en los logotipos de Vite y React 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
+
220
+ /** @type {import('intlayer').Dictionary} */
221
+ const appContent = {
222
+ key: "app",
223
+ content: {
224
+ viteLogo: t({
225
+ zh: "Vite 标志",
226
+ en: "Vite logo",
227
+ fr: "Logo Vite",
228
+ es: "Logo Vite",
229
+ }),
230
+ reactLogo: t({
231
+ zh: "React 标志",
232
+ en: "React logo",
233
+ fr: "Logo React",
234
+ es: "Logo React",
235
+ }),
236
+
237
+ title: "Vite + React",
238
+
239
+ count: t({
240
+ zh: "计数是 ",
241
+ en: "count is ",
242
+ fr: "le compte est ",
243
+ es: "el recuento es ",
244
+ }),
245
+
246
+ edit:
247
+ t <
248
+ ReactNode >
249
+ {
250
+ // 如果在内容中使用 React 节点,请记得导入 React
251
+ zh: (
252
+ <>
253
+ 编辑 <code>src/App.tsx</code> 并保存以测试 HMR
254
+ </>
255
+ ),
256
+ en: (
257
+ <>
258
+ Edit <code>src/App.tsx</code> and save to test HMR
259
+ </>
260
+ ),
261
+ fr: (
262
+ <>
263
+ Éditez <code>src/App.tsx</code> et enregistrez pour tester HMR
264
+ </>
265
+ ),
266
+ es: (
267
+ <>
268
+ Edita <code>src/App.tsx</code> y guarda para probar HMR
269
+ </>
270
+ ),
271
+ },
272
+
273
+ readTheDocs: t({
274
+ zh: "点击 Vite 和 React 标志以了解更多信息",
275
+ en: "Click on the Vite and React logos to learn more",
276
+ fr: "Cliquez sur les logos Vite et React pour en savoir plus",
277
+ es: "Haga clic en los logotipos de Vite y React para obtener más información",
278
+ }),
279
+ },
280
+ };
281
+
282
+ export default appContent;
283
+ ```
284
+
285
+ ```javascript fileName="src/app.content.cjs" contentDeclarationFormat="commonjs"
286
+ const { t } = require("intlayer");
287
+
288
+ /** @type {import('intlayer').Dictionary} */
289
+ const appContent = {
290
+ key: "app",
291
+ content: {
292
+ viteLogo: t({
293
+ zh: "Vite 标志",
294
+ en: "Vite logo",
295
+ fr: "Logo Vite",
296
+ es: "Logo Vite",
297
+ }),
298
+ reactLogo: t({
299
+ zh: "React 标志",
300
+ en: "React logo",
301
+ fr: "Logo React",
302
+ es: "Logo React",
303
+ }),
304
+
305
+ title: "Vite + React",
306
+
307
+ count: t({
308
+ zh: "计数是 ",
309
+ en: "count is ",
310
+ fr: "le compte est ",
311
+ ---
312
+
313
+ {
314
+ "$schema": "https://intlayer.org/schema.json",
315
+ "key": "app",
316
+ "content": {
317
+ "viteLogo": {
318
+ "nodeType": "translation",
319
+ "translation": {
320
+ "zh": "Vite 徽标",
321
+ "en": "Vite logo",
322
+ "fr": "Logo Vite",
323
+ "es": "Logo Vite"
324
+ }
325
+ },
326
+ "reactLogo": {
327
+ "nodeType": "translation",
328
+ "translation": {
329
+ "zh": "React 徽标",
330
+ "en": "React logo",
331
+ "fr": "Logo React",
332
+ "es": "Logo React"
333
+ }
334
+ },
335
+ "title": {
336
+ "nodeType": "translation",
337
+ "translation": {
338
+ "zh": "Vite + React",
339
+ "en": "Vite + React",
340
+ "fr": "Vite + React",
341
+ "es": "Vite + React"
342
+ }
343
+ },
344
+ "count": {
345
+ "nodeType": "translation",
346
+ "translation": {
347
+ "zh": "计数是 ",
348
+ "en": "count is ",
349
+ "fr": "le compte est ",
350
+ "es": "el recuento es "
351
+ }
352
+ },
353
+ "edit": {
354
+ "nodeType": "translation",
355
+ "translation": {
356
+ "zh": "编辑 src/App.tsx 并保存以测试 HMR",
357
+ "en": "Edit src/App.tsx and save to test HMR",
358
+ "fr": "Éditez src/App.tsx et enregistrez pour tester HMR",
359
+ "es": "Edita src/App.tsx y guarda para probar HMR"
360
+ }
361
+ },
362
+ "readTheDocs": {
363
+ "nodeType": "translation",
364
+ "translation": {
365
+ "zh": "点击 Vite 和 React 徽标以了解更多",
366
+ "en": "Click on the Vite and React logos to learn more",
367
+ "fr": "Cliquez sur les logos Vite et React pour en savoir plus",
368
+ "es": "Haga clic en los logotipos de Vite y React para obtener más información"
369
+ }
370
+ }
371
+ }
372
+ }
373
+ ```
374
+
375
+ > 您的内容声明可以在应用程序中的任何地方定义,只要它们包含在 `contentDir` 目录中(默认情况下为 `./src`)。并且匹配内容声明文件扩展名(默认情况下为 `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`)。
376
+
377
+ > 有关更多详细信息,请参阅[内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/zh/dictionary/get_started.md)。
378
+
379
+ > 如果您的内容文件包含 TSX 代码,您应该考虑在内容文件中导入 `import React from "react";`。
380
+
381
+ ### 第五步:在代码中使用 Intlayer
382
+
383
+ 在整个应用程序中访问您的内容字典:
384
+
385
+ ```tsx {5,9} fileName="src/App.tsx" codeFormat="typescript"
386
+ import { useState, type FC } from "react";
387
+ import reactLogo from "./assets/react.svg";
388
+ import viteLogo from "/vite.svg";
389
+ import "./App.css";
390
+ import { IntlayerProvider, useIntlayer } from "react-intlayer";
391
+
392
+ const AppContent: FC = () => {
393
+ const [count, setCount] = useState(0);
394
+ const content = useIntlayer("app");
395
+
396
+ return (
397
+ <>
398
+ <div>
399
+ <a href="https://vitejs.dev" target="_blank">
400
+ <img src={viteLogo} className="logo" alt={content.viteLogo.value} />
401
+ </a>
402
+ <a href="https://react.dev" target="_blank">
403
+ <img
404
+ src={reactLogo}
405
+ className="logo react"
406
+ alt={content.reactLogo.value}
407
+ />
408
+ </a>
409
+ </div>
410
+ <h1>{content.title}</h1>
411
+ <div className="card">
412
+ <button onClick={() => setCount((count) => count + 1)}>
413
+ {content.count}
414
+ {count}
415
+ </button>
416
+ <p>{content.edit}</p>
417
+ </div>
418
+ <p className="read-the-docs">{content.readTheDocs}</p>
419
+ </>
420
+ );
421
+ };
422
+
423
+ const App: FC = () => (
424
+ <IntlayerProvider>
425
+ <AppContent />
426
+ </IntlayerProvider>
427
+ );
428
+
429
+ export default App;
430
+ ```
431
+
432
+ ```tsx {5,9} fileName="src/App.msx" codeFormat="esm"
433
+ import { useState } from "react";
434
+ import reactLogo from "./assets/react.svg";
435
+ import viteLogo from "/vite.svg";
436
+ import "./App.css";
437
+ import { IntlayerProvider, useIntlayer } from "react-intlayer";
438
+
439
+ const AppContent = () => {
440
+ const [count, setCount] = useState(0);
441
+ const content = useIntlayer("app");
442
+
443
+ return (
444
+ <>
445
+ <div>
446
+ <a href="https://vitejs.dev" target="_blank">
447
+ <img src={viteLogo} className="logo" alt={content.viteLogo.value} />
448
+ </a>
449
+ <a href="https://react.dev" target="_blank">
450
+ <img
451
+ src={reactLogo}
452
+ className="logo react"
453
+ alt={content.reactLogo.value}
454
+ />
455
+ </a>
456
+ </div>
457
+ <h1>{content.title}</h1>
458
+ <div className="card">
459
+ <button onClick={() => setCount((count) => count + 1)}>
460
+ {content.count}
461
+ {count}
462
+ </button>
463
+ <p>{content.edit}</p>
464
+ </div>
465
+ <p className="read-the-docs">{content.readTheDocs}</p>
466
+ </>
467
+ );
468
+ };
469
+
470
+ const App = () => (
471
+ <IntlayerProvider>
472
+ <AppContent />
473
+ </IntlayerProvider>
474
+ );
475
+
476
+ export default App;
477
+ ```
478
+
479
+ ```tsx {5,9} fileName="src/App.csx" codeFormat="commonjs"
480
+ const { useState } = require("react");
481
+ const reactLogo = require("./assets/react.svg");
482
+ const viteLogo = require("/vite.svg");
483
+ require("./App.css");
484
+ const { IntlayerProvider, useIntlayer } = require("react-intlayer");
485
+
486
+ const AppContent = () => {
487
+ const [count, setCount] = useState(0);
488
+ const content = useIntlayer("app");
489
+
490
+ return (
491
+ <>
492
+ <div>
493
+ <a href="https://vitejs.dev" target="_blank">
494
+ <img src={viteLogo} className="logo" alt={content.viteLogo.value} />
495
+ </a>
496
+ <a href="https://react.dev" target="_blank">
497
+ <img
498
+ src={reactLogo}
499
+ className="logo react"
500
+ alt={content.reactLogo.value}
501
+ />
502
+ </a>
503
+ </div>
504
+ <h1>{content.title}</h1>
505
+ <div className="card">
506
+ <button onClick={() => setCount((count) => count + 1)}>
507
+ {content.count}
508
+ {count}
509
+ </button>
510
+ <p>{content.edit}</p>
511
+ </div>
512
+ <p className="read-the-docs">{content.readTheDocs}</p>
513
+ </>
514
+ );
515
+ };
516
+
517
+ const App = () => (
518
+ <IntlayerProvider>
519
+ <AppContent />
520
+ </IntlayerProvider>
521
+ );
522
+
523
+ module.exports = App;
524
+ ```
525
+
526
+ > 如果您想在 `string` 属性中使用您的内容,例如 `alt`、`title`、`href`、`aria-label` 等,您必须调用函数的值,例如:
527
+
528
+ > ```jsx
529
+ >
530
+ > ```
531
+
532
+ > <img src={content.image.src.value} alt={content.image.value} />
533
+
534
+ > ```
535
+ >
536
+ > ```
537
+
538
+ > 要了解有关 `useIntlayer` 钩子的更多信息,请参阅[文档](https://github.com/aymericzip/intlayer/blob/main/docs/zh/packages/react-intlayer/useIntlayer.md)。
539
+
540
+ ### (可选)第六步:更改内容语言
541
+
542
+ 要更改内容的语言,您可以使用 `useLocale` 钩子提供的 `setLocale` 函数。此函数允许您设置应用程序的语言环境并相应地更新内容。
543
+
544
+ ```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
545
+ import type { FC } from "react";
546
+ import { Locales } from "intlayer";
547
+ import { useLocale } from "react-intlayer";
548
+
549
+ const LocaleSwitcher: FC = () => {
550
+ const { setLocale } = useLocale();
551
+
552
+ return (
553
+ <button onClick={() => setLocale(Locales.English)}>切换语言为英语</button>
554
+ );
555
+ };
556
+ ```
557
+
558
+ ```jsx fileName="src/components/LocaleSwitcher.msx" codeFormat="esm"
559
+ import { Locales } from "intlayer";
560
+ import { useLocale } from "react-intlayer";
561
+
562
+ const LocaleSwitcher = () => {
563
+ const { setLocale } = useLocale();
564
+
565
+ return (
566
+ <button onClick={() => setLocale(Locales.English)}>切换语言为英语</button>
567
+ );
568
+ };
569
+ ```
570
+
571
+ ```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
572
+ const { Locales } = require("intlayer");
573
+
574
+ const { useLocale } = require("react-intlayer");
575
+
576
+ const LocaleSwitcher = () => {
577
+ const { setLocale } = useLocale();
578
+
579
+ return (
580
+ <button onClick={() => setLocale(Locales.English)}>更改语言为英语</button>
581
+ );
582
+ };
583
+ ```
584
+
585
+ > 要了解更多关于 `useLocale` 钩子的内容,请参阅[文档](https://github.com/aymericzip/intlayer/blob/main/docs/zh/packages/react-intlayer/useLocale.md)。
586
+
587
+ ### (可选)步骤 7:为您的应用程序添加本地化路由
588
+
589
+ 此步骤的目的是为每种语言创建唯一的路由。这对于 SEO 和 SEO 友好的 URL 非常有用。
590
+ 示例:
591
+
592
+ ```plaintext
593
+ - https://example.com/about
594
+ - https://example.com/es/about
595
+ - https://example.com/fr/about
596
+ ```
597
+
598
+ > 默认情况下,默认语言的路由不会添加前缀。如果您希望为默认语言添加前缀,可以在配置中将 `middleware.prefixDefault` 选项设置为 `true`。有关更多信息,请参阅[配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/zh/configuration.md)。
599
+
600
+ 要为您的应用程序添加本地化路由,您可以创建一个 `LocaleRouter` 组件,该组件包装您的应用程序路由并处理基于语言的路由。以下是使用 [React Router](https://reactrouter.com/home) 的示例:
601
+
602
+ ```tsx fileName="src/components/LocaleRouter.tsx" codeFormat="typescript"
603
+ // 导入必要的依赖项和函数
604
+ // 来自 'intlayer' 的实用函数和类型
605
+ import { type Locales, configuration, getPathWithoutLocale } from "intlayer"; // 来自 'intlayer' 的实用函数和类型
606
+ import type { FC, PropsWithChildren } from "react"; // React 的函数组件和属性类型
607
+ import { IntlayerProvider } from "react-intlayer"; // 国际化上下文的提供者
608
+ import {
609
+ BrowserRouter,
610
+ Routes,
611
+ Route,
612
+ Navigate,
613
+ useLocation,
614
+ } from "react-router-dom"; // 用于管理导航的路由组件
615
+
616
+ // 从 Intlayer 中解构配置
617
+ const { internationalization, middleware } = configuration;
618
+ const { locales, defaultLocale } = internationalization;
619
+
620
+ /**
621
+ * 一个处理本地化并使用适当的语言上下文包装子组件的组件。
622
+ * 它管理基于 URL 的语言检测和验证。
623
+ */
624
+ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
625
+ children,
626
+ locale,
627
+ }) => {
628
+ const { pathname, search } = useLocation(); // 获取当前的 URL 路径
629
+
630
+ // 确定当前语言,如果未提供则回退到默认语言
631
+ const currentLocale = locale ?? defaultLocale;
632
+
633
+ // 从路径中移除语言前缀以构造基础路径
634
+ const pathWithoutLocale = getPathWithoutLocale(
635
+ pathname // 当前的 URL 路径
636
+ );
637
+
638
+ /**
639
+ * 如果 middleware.prefixDefault 为 true,则默认语言应始终添加前缀。
640
+ */
641
+ if (middleware.prefixDefault) {
642
+ // 验证语言
643
+ if (!locale || !locales.includes(locale)) {
644
+ // 重定向到默认语言并更新路径
645
+ return (
646
+ <Navigate
647
+ to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
648
+ replace // 用新路径替换当前历史记录条目
649
+ />
650
+ );
651
+ }
652
+
653
+ // 使用 IntlayerProvider 包装子组件并设置当前语言
654
+ return (
655
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
656
+ );
657
+ } else {
658
+ /**
659
+ * 当 middleware.prefixDefault 为 false 时,默认语言不会添加前缀。
660
+ * 确保当前语言有效且不是默认语言。
661
+ */
662
+ if (
663
+ currentLocale.toString() !== defaultLocale.toString() &&
664
+ !locales
665
+ .filter(
666
+ (locale) => locale.toString() !== defaultLocale.toString() // 排除默认语言
667
+ )
668
+ .includes(currentLocale) // 检查当前语言是否在有效语言列表中
669
+ ) {
670
+ // 重定向到没有语言前缀的路径
671
+ return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
672
+ }
673
+
674
+ // 使用 IntlayerProvider 包装子组件并设置当前语言
675
+ return (
676
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
677
+ );
678
+ }
679
+ };
680
+
681
+ /**
682
+ * 一个设置语言特定路由的路由组件。
683
+ * 它使用 React Router 管理导航并渲染本地化组件。
684
+ */
685
+ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
686
+ <BrowserRouter>
687
+ <Routes>
688
+ {locales
689
+ .filter(
690
+ (locale) => middleware.prefixDefault || locale !== defaultLocale
691
+ )
692
+ .map((locale) => (
693
+ <Route
694
+ // 路由模式,用于捕获语言(例如 /en/, /fr/)并匹配所有后续路径
695
+ path={`/${locale}/*`}
696
+ key={locale}
697
+ element={<AppLocalized locale={locale}>{children}</AppLocalized>} // 使用语言管理包装子组件
698
+ />
699
+ ))}
700
+
701
+ {
702
+ // 如果禁用了默认语言的前缀,则直接在根路径渲染子组件
703
+ !middleware.prefixDefault && (
704
+ <Route
705
+ path="*"
706
+ element={
707
+ <AppLocalized locale={defaultLocale}>{children}</AppLocalized>
708
+ } // 使用语言管理包装子组件
709
+ />
710
+ )
711
+ }
712
+ </Routes>
713
+ </BrowserRouter>
714
+ );
715
+ ```
716
+
717
+ ```jsx fileName="src/components/LocaleRouter.mjx" codeFormat="esm"
718
+ // 导入必要的依赖项和函数
719
+ // 来自 'intlayer' 的实用函数和类型
720
+ import { configuration, getPathWithoutLocale } from "intlayer"; // 来自 'intlayer' 的实用函数和类型
721
+ import { IntlayerProvider } from "react-intlayer"; // 国际化上下文的提供者
722
+ import {
723
+ BrowserRouter,
724
+ Routes,
725
+ Route,
726
+ Navigate,
727
+ useLocation,
728
+ } from "react-router-dom"; // 用于管理导航的路由组件
729
+
730
+ // 从 Intlayer 中解构配置
731
+ const { internationalization, middleware } = configuration;
732
+ const { locales, defaultLocale } = internationalization;
733
+
734
+ /**
735
+ * 一个处理本地化并使用适当的语言上下文包装子组件的组件。
736
+ * 它管理基于 URL 的语言检测和验证。
737
+ */
738
+ const AppLocalized = ({ children, locale }) => {
739
+ const { pathname, search } = useLocation(); // 获取当前的 URL 路径
740
+
741
+ // 确定当前语言,如果未提供则回退到默认语言
742
+ const currentLocale = locale ?? defaultLocale;
743
+
744
+ // 从路径中移除语言前缀以构造基础路径
745
+ const pathWithoutLocale = getPathWithoutLocale(
746
+ pathname // 当前的 URL 路径
747
+ );
748
+
749
+ /**
750
+ * 如果 middleware.prefixDefault 为 true,则默认语言应始终添加前缀。
751
+ */
752
+ if (middleware.prefixDefault) {
753
+ // 验证语言
754
+ if (!locale || !locales.includes(locale)) {
755
+ // 重定向到默认语言并更新路径
756
+ return (
757
+ <Navigate
758
+ to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
759
+ replace // 用新路径替换当前历史记录条目
760
+ />
761
+ );
762
+ }
763
+
764
+ // 使用 IntlayerProvider 包装子组件并设置当前语言
765
+ return (
766
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
767
+ );
768
+ } else {
769
+ /**
770
+ * 当 middleware.prefixDefault 为 false 时,默认语言不会添加前缀。
771
+ * 确保当前语言有效且不是默认语言。
772
+ */
773
+ if (
774
+ currentLocale.toString() !== defaultLocale.toString() &&
775
+ !locales
776
+ .filter(
777
+ (locale) => locale.toString() !== defaultLocale.toString() // 排除默认语言
778
+ )
779
+ .includes(currentLocale) // 检查当前语言是否在有效语言列表中
780
+ ) {
781
+ // 重定向到没有语言前缀的路径
782
+ return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
783
+ }
784
+
785
+ // 使用 IntlayerProvider 包装子组件并设置当前语言
786
+ return (
787
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
788
+ );
789
+ }
790
+ };
791
+
792
+ /**
793
+ * 一个设置特定语言环境路由的路由组件。
794
+ * 它使用 React Router 来管理导航并渲染本地化组件。
795
+ */
796
+ export const LocaleRouter = ({ children }) => (
797
+ <BrowserRouter>
798
+ <Routes>
799
+ {locales
800
+ .filter(
801
+ (locale) => middleware.prefixDefault || locale !== defaultLocale
802
+ )
803
+ .map((locale) => (
804
+ <Route
805
+ // 路由模式,用于捕获语言环境(例如 /en/, /fr/)并匹配所有后续路径
806
+ path={`/${locale}/*`}
807
+ key={locale}
808
+ element={<AppLocalized locale={locale}>{children}</AppLocalized>} // 使用语言环境管理包装子组件
809
+ />
810
+ ))}
811
+
812
+ {
813
+ // 如果默认语言环境的前缀被禁用,则直接在根路径渲染子组件
814
+ !middleware.prefixDefault && (
815
+ <Route
816
+ path="*"
817
+ element={
818
+ <AppLocalized locale={defaultLocale}>{children}</AppLocalized>
819
+ } // 使用语言环境管理包装子组件
820
+ />
821
+ )
822
+ }
823
+ </Routes>
824
+ </BrowserRouter>
825
+ );
826
+ ```
827
+
828
+ ```jsx fileName="src/components/LocaleRouter.cjx" codeFormat="commonjs"
829
+ // 导入必要的依赖和函数
830
+ const { configuration, getPathWithoutLocale } = require("intlayer"); // 从 'intlayer' 获取的工具函数和类型
831
+ const { IntlayerProvider, useLocale } = require("react-intlayer"); // 国际化上下文的提供者
832
+ const {
833
+ BrowserRouter,
834
+ Routes,
835
+ Route,
836
+ Navigate,
837
+ useLocation,
838
+ } = require("react-router-dom"); // 用于管理导航的路由组件
839
+
840
+ // 从 Intlayer 解构配置
841
+ const { internationalization, middleware } = configuration;
842
+ const { locales, defaultLocale } = internationalization;
843
+
844
+ /**
845
+ * 一个处理本地化的组件,用适当的语言环境上下文包装子组件。
846
+ * 它管理基于 URL 的语言环境检测和验证。
847
+ */
848
+ const AppLocalized = ({ children, locale }) => {
849
+ const { pathname, search } = useLocation(); // 获取当前的 URL 路径
850
+
851
+ // 确定当前语言环境,如果未提供则回退到默认值
852
+ const currentLocale = locale ?? defaultLocale;
853
+
854
+ // 从路径中移除语言环境前缀以构建基础路径
855
+ const pathWithoutLocale = getPathWithoutLocale(
856
+ pathname // 当前的 URL 路径
857
+ );
858
+
859
+ /**
860
+ * 如果 middleware.prefixDefault 为 true,默认语言环境应始终带有前缀。
861
+ */
862
+ if (middleware.prefixDefault) {
863
+ // 验证语言环境
864
+ if (!locale || !locales.includes(locale)) {
865
+ // 重定向到带有更新路径的默认语言环境
866
+ return (
867
+ <Navigate
868
+ to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
869
+ replace // 用新路径替换当前历史记录条目
870
+ />
871
+ );
872
+ }
873
+
874
+ // 使用 IntlayerProvider 包装子组件并设置当前语言环境
875
+ return (
876
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
877
+ );
878
+ } else {
879
+ /**
880
+ * 当 middleware.prefixDefault 为 false 时,默认语言环境不带前缀。
881
+ * 确保当前语言环境有效且不是默认语言环境。
882
+ */
883
+ if (
884
+ currentLocale.toString() !== defaultLocale.toString() &&
885
+ !locales
886
+ .filter(
887
+ (locale) => locale.toString() !== defaultLocale.toString() // 排除默认语言环境
888
+ )
889
+ .includes(currentLocale) // 检查当前语言环境是否在有效语言环境列表中
890
+ ) {
891
+ // 重定向到没有语言环境前缀的路径
892
+ return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
893
+ }
894
+
895
+ // 使用 IntlayerProvider 包装子组件并设置当前语言环境
896
+ return (
897
+ <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
898
+ );
899
+ }
900
+ };
901
+
902
+ /**
903
+ * 一个设置特定语言环境路由的路由组件。
904
+ * 它使用 React Router 来管理导航并渲染本地化组件。
905
+ */
906
+ const LocaleRouter = ({ children }) => (
907
+ <BrowserRouter>
908
+ <Routes>
909
+ {locales
910
+ .filter(
911
+ (locale) => middleware.prefixDefault || locale !== defaultLocale
912
+ )
913
+ .map((locale) => (
914
+ <Route
915
+ // 路由模式,用于捕获语言环境(例如 /en/, /fr/)并匹配所有后续路径
916
+ path={`/${locale}/*`}
917
+ key={locale}
918
+ element={<AppLocalized locale={locale}>{children}</AppLocalized>} // 使用语言环境管理包装子组件
919
+ />
920
+ ))}
921
+
922
+ {
923
+ // 如果默认语言环境的前缀被禁用,则直接在根路径渲染子组件
924
+ !middleware.prefixDefault && (
925
+ <Route
926
+ path="*"
927
+ element={
928
+ <AppLocalized locale={defaultLocale}>{children}</AppLocalized>
929
+ } // 使用语言环境管理包装子组件
930
+ />
931
+ )
932
+ }
933
+ </Routes>
934
+ </BrowserRouter>
935
+ );
936
+ ```
937
+
938
+ 然后,您可以在应用程序中使用 `LocaleRouter` 组件:
939
+
940
+ ```tsx fileName="src/App.tsx" codeFormat="typescript"
941
+ import { LocaleRouter } from "./components/LocaleRouter";
942
+ import type { FC } from "react";
943
+
944
+ // ... 您的 AppContent 组件
945
+
946
+ const App: FC = () => (
947
+ <LocaleRouter>
948
+ <AppContent />
949
+ </LocaleRouter>
950
+ );
951
+ ```
952
+
953
+ ```jsx fileName="src/App.mjx" codeFormat="esm"
954
+ import { LocaleRouter } from "./components/LocaleRouter";
955
+
956
+ // ... 您的 AppContent 组件
957
+
958
+ const App = () => (
959
+ <LocaleRouter>
960
+ <AppContent />
961
+ </LocaleRouter>
962
+ );
963
+ ```
964
+
965
+ ```jsx fileName="src/App.cjx" codeFormat="commonjs"
966
+ const { LocaleRouter } = require("./components/LocaleRouter");
967
+
968
+ // ... 您的 AppContent 组件
969
+
970
+ const App = () => (
971
+ <LocaleRouter>
972
+ <AppContent />
973
+ </LocaleRouter>
974
+ );
975
+ ```
976
+
977
+ 同时,您还可以使用 `intLayerMiddlewarePlugin` 为您的应用程序添加服务器端路由。此插件将根据 URL 自动检测当前语言环境并设置适当的语言环境 Cookie。如果未指定语言环境,插件将根据用户的浏览器语言偏好确定最合适的语言环境。如果未检测到语言环境,它将重定向到默认语言环境。
978
+
979
+ ```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
980
+ import { defineConfig } from "vite";
981
+ import react from "@vitejs/plugin-react-swc";
982
+ import { intlayerPlugin, intLayerMiddlewarePlugin } from "vite-intlayer";
983
+
984
+ // https://vitejs.dev/config/
985
+ export default defineConfig({
986
+ plugins: [react(), intlayerPlugin(), intLayerMiddlewarePlugin()],
987
+ });
988
+ ```
989
+
990
+ ```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
991
+ import { defineConfig } from "vite";
992
+ import react from "@vitejs/plugin-react-swc";
993
+ import { intlayerPlugin, intLayerMiddlewarePlugin } from "vite-intlayer";
994
+
995
+ // https://vitejs.dev/config/
996
+ export default defineConfig({
997
+ plugins: [react(), intlayerPlugin(), intLayerMiddlewarePlugin()],
998
+ });
999
+ ```
1000
+
1001
+ ```javascript {5,10} fileName="vite.config.cjs" codeFormat="commonjs"
1002
+ const { defineConfig } = require("vite");
1003
+ const react = require("@vitejs/plugin-react-swc");
1004
+ const { intlayerPlugin, intLayerMiddlewarePlugin } = require("vite-intlayer");
1005
+
1006
+ // https://vitejs.dev/config/
1007
+ module.exports = defineConfig({
1008
+ plugins: [react(), intlayerPlugin(), intLayerMiddlewarePlugin()],
1009
+ });
1010
+ ```
1011
+
1012
+ ### (可选)步骤 8:当语言环境更改时更改 URL
1013
+
1014
+ 要在语言环境更改时更改 URL,您可以使用 `useLocale` 钩子提供的 `onLocaleChange` 属性。同时,您可以使用 `react-router-dom` 的 `useLocation` 和 `useNavigate` 钩子来更新 URL 路径。
1015
+
1016
+ ```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
1017
+ import { useLocation, useNavigate } from "react-router-dom";
1018
+ import {
1019
+ Locales,
1020
+ getHTMLTextDir,
1021
+ getLocaleName,
1022
+ getLocalizedUrl,
1023
+ } from "intlayer";
1024
+ import { useLocale } from "react-intlayer";
1025
+ import { type FC } from "react";
1026
+
1027
+ const LocaleSwitcher: FC = () => {
1028
+ const { pathname, search } = useLocation(); // 获取当前的 URL 路径。例如:/fr/about?foo=bar
1029
+ const navigate = useNavigate();
1030
+
1031
+ const { locale, availableLocales, setLocale } = useLocale({
1032
+ onLocaleChange: (locale) => {
1033
+ // 构建带有更新语言环境的 URL
1034
+ // 示例: /es/about?foo=bar
1035
+ const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
1036
+
1037
+ // 更新 URL 路径
1038
+ navigate(pathWithLocale);
1039
+ },
1040
+ });
1041
+
1042
+ return (
1043
+ <div>
1044
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
1045
+ <div id="localePopover" popover="auto">
1046
+ {availableLocales.map((localeItem) => (
1047
+ <a
1048
+ href={getLocalizedUrl(location.pathname, localeItem)}
1049
+ hrefLang={localeItem}
1050
+ aria-current={locale === localeItem ? "page" : undefined}
1051
+ onClick={(e) => {
1052
+ e.preventDefault();
1053
+ setLocale(localeItem);
1054
+ }}
1055
+ key={localeItem}
1056
+ >
1057
+ <span>
1058
+ {/* 语言环境 - 例如 FR */}
1059
+ {localeItem}
1060
+ </span>
1061
+ <span>
1062
+ {/* 语言在其自身的语言环境中 - 例如 Français */}
1063
+ {getLocaleName(localeItem, locale)}
1064
+ </span>
1065
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1066
+ {/* 当前语言环境中的语言 - 例如当前语言环境设置为 Locales.SPANISH 时显示 Francés */}
1067
+ {getLocaleName(localeItem)}
1068
+ </span>
1069
+ <span dir="ltr" lang={Locales.ENGLISH}>
1070
+ {/* 英文中的语言 - 例如 French */}
1071
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1072
+ </span>
1073
+ </a>
1074
+ ))}
1075
+ </div>
1076
+ </div>
1077
+ );
1078
+ };
1079
+ ```
1080
+
1081
+ ```jsx fileName="src/components/LocaleSwitcher.msx" codeFormat="esm"
1082
+ import { useLocation, useNavigate } from "react-router-dom";
1083
+ import {
1084
+ Locales,
1085
+ getHTMLTextDir,
1086
+ getLocaleName,
1087
+ getLocalizedUrl,
1088
+ } from "intlayer";
1089
+ import { useLocale } from "react-intlayer";
1090
+
1091
+ const LocaleSwitcher = () => {
1092
+ const { pathname, search } = useLocation(); // 获取当前 URL 路径。例如: /fr/about?foo=bar
1093
+ const navigate = useNavigate();
1094
+
1095
+ const { locale, availableLocales, setLocale } = useLocale({
1096
+ onLocaleChange: (locale) => {
1097
+ // 构建带有更新语言环境的 URL
1098
+ // 示例: /es/about?foo=bar
1099
+ const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
1100
+
1101
+ // 更新 URL 路径
1102
+ navigate(pathWithLocale);
1103
+ },
1104
+ });
1105
+
1106
+ return (
1107
+ <div>
1108
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
1109
+ <div id="localePopover" popover="auto">
1110
+ {availableLocales.map((localeItem) => (
1111
+ <a
1112
+ href={getLocalizedUrl(location.pathname, localeItem)}
1113
+ hrefLang={localeItem}
1114
+ aria-current={locale === localeItem ? "page" : undefined}
1115
+ onClick={(e) => {
1116
+ e.preventDefault();
1117
+ setLocale(localeItem);
1118
+ }}
1119
+ key={localeItem}
1120
+ >
1121
+ <span>
1122
+ {/* 语言环境 - 例如 FR */}
1123
+ {localeItem}
1124
+ </span>
1125
+ <span>
1126
+ {/* 语言在其自身的语言环境中 - 例如 Français */}
1127
+ {getLocaleName(localeItem, locale)}
1128
+ </span>
1129
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1130
+ {/* 当前语言环境中的语言 - 例如当前语言环境设置为 Locales.SPANISH 时显示 Francés */}
1131
+ {getLocaleName(localeItem)}
1132
+ </span>
1133
+ <span dir="ltr" lang={Locales.ENGLISH}>
1134
+ {/* 英文中的语言 - 例如 French */}
1135
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1136
+ </span>
1137
+ </a>
1138
+ ))}
1139
+ </div>
1140
+ </div>
1141
+ );
1142
+ };
1143
+ ```
1144
+
1145
+ ```jsx fileName="src/components/LocaleSwitcher.csx" codeFormat="commonjs"
1146
+ const { useLocation, useNavigate } = require("react-router-dom");
1147
+ const {
1148
+ Locales,
1149
+ getHTMLTextDir,
1150
+ getLocaleName,
1151
+ getLocalizedUrl,
1152
+ } = require("intlayer");
1153
+ const { useLocale } = require("react-intlayer");
1154
+
1155
+ const LocaleSwitcher = () => {
1156
+ const { pathname, search } = useLocation(); // 获取当前 URL 路径。例如: /fr/about?foo=bar
1157
+ const navigate = useNavigate();
1158
+
1159
+ const { locale, availableLocales, setLocale } = useLocale({
1160
+ onLocaleChange: (locale) => {
1161
+ // 构建带有更新语言环境的 URL
1162
+ // 示例: /es/about?foo=bar
1163
+ const pathWithLocale = getLocalizedUrl(`${pathname}${search}`, locale);
1164
+
1165
+ // 更新 URL 路径
1166
+ navigate(pathWithLocale);
1167
+ },
1168
+ });
1169
+
1170
+ return (
1171
+ <div>
1172
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
1173
+ <div id="localePopover" popover="auto">
1174
+ {availableLocales.map((localeItem) => (
1175
+ <a
1176
+ href={getLocalizedUrl(location.pathname, localeItem)}
1177
+ hrefLang={localeItem}
1178
+ aria-current={locale === localeItem ? "page" : undefined}
1179
+ onClick={(e) => {
1180
+ e.preventDefault();
1181
+ setLocale(localeItem);
1182
+ }}
1183
+ key={localeItem}
1184
+ >
1185
+ <span>
1186
+ {/* 语言环境 - 例如 FR */}
1187
+ {localeItem}
1188
+ </span>
1189
+ <span>
1190
+ {/* 语言在其自身的语言环境中 - 例如 Français */}
1191
+ {getLocaleName(localeItem, locale)}
1192
+ </span>
1193
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
1194
+ {/* 当前语言环境中的语言 - 例如当前语言环境设置为 Locales.SPANISH 时显示 Francés */}
1195
+ {getLocaleName(localeItem)}
1196
+ </span>
1197
+ <span dir="ltr" lang={Locales.ENGLISH}>
1198
+ {/* 英文中的语言 - 例如 French */}
1199
+ {getLocaleName(localeItem, Locales.ENGLISH)}
1200
+ </span>
1201
+ </a>
1202
+ ))}
1203
+ </div>
1204
+ </div>
1205
+ );
1206
+ };
1207
+ ```
1208
+
1209
+ > 文档参考:
1210
+
1211
+ > - [`useLocale` 钩子](https://github.com/aymericzip/intlayer/blob/main/docs/zh/packages/react-intlayer/useLocale.md)
1212
+
1213
+ > - [`getLocaleName` 钩子](https://github.com/aymericzip/intlayer/blob/main/docs/zh/packages/intlayer/getLocaleName.md)
1214
+
1215
+ > - [`getLocalizedUrl` 钩子](https://github.com/aymericzip/intlayer/blob/main/docs/zh/packages/intlayer/getLocalizedUrl.md)
1216
+
1217
+ > - [`getHTMLTextDir` 钩子](https://github.com/aymericzip/intlayer/blob/main/docs/zh/packages/intlayer/getHTMLTextDir.md)
1218
+
1219
+ > - [`hrefLang` 属性](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=fr)
1220
+
1221
+ > - [`lang` 属性](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang)
1222
+
1223
+ > - [`dir` 属性](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir)
1224
+
1225
+ > - [`aria-current` 属性](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current)
1226
+
1227
+ ---
1228
+
1229
+ ### (可选)步骤 9:切换 HTML 的语言和方向属性
1230
+
1231
+ 当您的应用程序支持多种语言时,动态更新 `<html>` 标签的 `lang` 和 `dir` 属性以匹配当前语言环境非常重要。这确保了:
1232
+
1233
+ - **可访问性**:屏幕阅读器和辅助技术依赖正确的 `lang` 属性来准确发音和解释内容。
1234
+ - **文本渲染**:`dir`(方向)属性确保文本以正确的顺序呈现(例如,英文为从左到右,阿拉伯语或希伯来语为从右到左),这对于可读性至关重要。
1235
+ - **SEO**:搜索引擎使用 `lang` 属性来确定页面的语言,有助于在搜索结果中提供正确的本地化内容。
1236
+
1237
+ 通过在语言环境更改时动态更新这些属性,您可以为所有支持的语言用户提供一致且可访问的体验。
1238
+
1239
+ #### 实现钩子
1240
+
1241
+ 创建一个自定义钩子来管理 HTML 属性。该钩子监听语言环境的变化并相应地更新属性:
1242
+
1243
+ ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
1244
+ import { useEffect } from "react";
1245
+ import { useLocale } from "react-intlayer";
1246
+ import { getHTMLTextDir } from "intlayer";
1247
+
1248
+ /**
1249
+
1250
+ * - `lang`:通知浏览器和搜索引擎页面的语言。
1251
+ * - `dir`:确保正确的阅读顺序(例如,英语为 'ltr',阿拉伯语为 'rtl')。
1252
+ *
1253
+ * 这种动态更新对于正确的文本渲染、可访问性和 SEO 至关重要。
1254
+ */
1255
+ export const useI18nHTMLAttributes = () => {
1256
+ const { locale } = useLocale();
1257
+
1258
+ useEffect(() => {
1259
+ // 更新语言属性为当前的语言环境。
1260
+ document.documentElement.lang = locale;
1261
+
1262
+ // 根据当前的语言环境设置文本方向。
1263
+ document.documentElement.dir = getHTMLTextDir(locale);
1264
+ }, [locale]);
1265
+ };
1266
+ ```
1267
+
1268
+ ```jsx fileName="src/hooks/useI18nHTMLAttributes.msx" codeFormat="esm"
1269
+ import { useEffect } from "react";
1270
+ import { useLocale } from "react-intlayer";
1271
+ import { getHTMLTextDir } from "intlayer";
1272
+
1273
+ /**
1274
+ * 更新 HTML <html> 元素的 `lang` 和 `dir` 属性以匹配当前的语言环境。
1275
+ * - `lang`:通知浏览器和搜索引擎页面的语言。
1276
+ * - `dir`:确保正确的阅读顺序(例如,英语为 'ltr',阿拉伯语为 'rtl')。
1277
+ *
1278
+ * 这种动态更新对于正确的文本渲染、可访问性和 SEO 至关重要。
1279
+ */
1280
+ export const useI18nHTMLAttributes = () => {
1281
+ const { locale } = useLocale();
1282
+
1283
+ useEffect(() => {
1284
+ // 更新语言属性为当前的语言环境。
1285
+ document.documentElement.lang = locale;
1286
+
1287
+ // 根据当前的语言环境设置文本方向。
1288
+ document.documentElement.dir = getHTMLTextDir(locale);
1289
+ }, [locale]);
1290
+ };
1291
+ ```
1292
+
1293
+ ```jsx fileName="src/hooks/useI18nHTMLAttributes.csx" codeFormat="commonjs"
1294
+ const { useEffect } = require("react");
1295
+ const { useLocale } = require("react-intlayer");
1296
+ const { getHTMLTextDir } = require("intlayer");
1297
+
1298
+ /**
1299
+ * 更新 HTML <html> 元素的 `lang` 和 `dir` 属性以匹配当前的语言环境。
1300
+ * - `lang`:通知浏览器和搜索引擎页面的语言。
1301
+ * - `dir`:确保正确的阅读顺序(例如,英语为 'ltr',阿拉伯语为 'rtl')。
1302
+ *
1303
+ * 这种动态更新对于正确的文本渲染、可访问性和 SEO 至关重要。
1304
+ */
1305
+ const useI18nHTMLAttributes = () => {
1306
+ const { locale } = useLocale();
1307
+
1308
+ useEffect(() => {
1309
+ // 更新语言属性为当前的语言环境。
1310
+ document.documentElement.lang = locale;
1311
+
1312
+ // 根据当前的语言环境设置文本方向。
1313
+ document.documentElement.dir = getHTMLTextDir(locale);
1314
+ }, [locale]);
1315
+ };
1316
+
1317
+ module.exports = { useI18nHTMLAttributes };
1318
+ ```
1319
+
1320
+ #### 在您的应用中使用 Hook
1321
+
1322
+ 将该 Hook 集成到您的主组件中,以便在语言环境更改时更新 HTML 属性:
1323
+
1324
+ ```tsx fileName="src/App.tsx" codeFormat="typescript"
1325
+ import type { FC } from "react";
1326
+ import { IntlayerProvider, useIntlayer } from "react-intlayer";
1327
+ import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
1328
+ import "./App.css";
1329
+
1330
+ const AppContent: FC = () => {
1331
+ // 应用 Hook,根据语言环境更新 <html> 标签的 lang 和 dir 属性。
1332
+ useI18nHTMLAttributes();
1333
+
1334
+ // ... 组件的其他部分
1335
+ };
1336
+
1337
+ const App: FC = () => (
1338
+ <IntlayerProvider>
1339
+ <AppContent />
1340
+ </IntlayerProvider>
1341
+ );
1342
+
1343
+ export default App;
1344
+ ```
1345
+
1346
+ ```jsx fileName="src/App.msx" codeFormat="esm"
1347
+ import { IntlayerProvider, useIntlayer } from "react-intlayer";
1348
+ import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
1349
+ import "./App.css";
1350
+
1351
+ const AppContent = () => {
1352
+ // 应用 Hook,根据语言环境更新 <html> 标签的 lang 和 dir 属性。
1353
+ useI18nHTMLAttributes();
1354
+
1355
+ // ... 组件的其他部分
1356
+ };
1357
+
1358
+ const App = () => (
1359
+ <IntlayerProvider>
1360
+ <AppContent />
1361
+ </IntlayerProvider>
1362
+ );
1363
+
1364
+ export default App;
1365
+ ```
1366
+
1367
+ ```jsx fileName="src/App.csx" codeFormat="commonjs"
1368
+ const { FC } = require("react");
1369
+ const { IntlayerProvider, useIntlayer } = require("react-intlayer");
1370
+ const { useI18nHTMLAttributes } = require("./hooks/useI18nHTMLAttributes");
1371
+ require("./App.css");
1372
+
1373
+ const AppContent = () => {
1374
+ // 应用 Hook,根据语言环境更新 <html> 标签的 lang 和 dir 属性。
1375
+ useI18nHTMLAttributes();
1376
+
1377
+ // ... 组件的其他部分
1378
+ };
1379
+
1380
+ const App = () => (
1381
+ <IntlayerProvider>
1382
+ <AppContent />
1383
+ </IntlayerProvider>
1384
+ );
1385
+
1386
+ module.exports = App;
1387
+ ```
1388
+
1389
+ 通过应用这些更改,您的应用将:
1390
+
1391
+ - 确保 **语言** (`lang`) 属性正确反映当前的语言环境,这对于 SEO 和浏览器行为非常重要。
1392
+ - 根据语言环境调整 **文本方向** (`dir`),提高不同阅读顺序语言的可读性和可用性。
1393
+ - 提供更 **可访问** 的体验,因为辅助技术依赖于这些属性以最佳方式运行。
1394
+
1395
+ ### (可选)步骤 10:创建一个本地化的 Link 组件
1396
+
1397
+ 为了确保您的应用导航符合当前的语言环境,您可以创建一个自定义的 `Link` 组件。该组件会自动为内部 URL 添加当前语言的前缀。例如,当法语用户点击指向“关于”页面的链接时,他们会被重定向到 `/fr/about` 而不是 `/about`。
1398
+
1399
+ 这种行为的好处包括:
1400
+
1401
+ - **SEO 和用户体验**:本地化的 URL 帮助搜索引擎正确索引语言特定的页面,并为用户提供其偏好语言的内容。
1402
+ - **一致性**:通过在整个应用中使用本地化链接,确保导航保持在当前语言环境中,防止意外的语言切换。
1403
+ - **可维护性**:将本地化逻辑集中在一个组件中,简化了 URL 的管理,使代码库更易于维护和扩展。
1404
+
1405
+ 以下是一个使用 TypeScript 实现的本地化 `Link` 组件:
1406
+
1407
+ ```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
1408
+ import { getLocalizedUrl } from "intlayer";
1409
+ import {
1410
+ forwardRef,
1411
+ type DetailedHTMLProps,
1412
+ type AnchorHTMLAttributes,
1413
+ } from "react";
1414
+ import { useLocale } from "react-intlayer";
1415
+
1416
+ export interface LinkProps
1417
+ extends DetailedHTMLProps<
1418
+ AnchorHTMLAttributes<HTMLAnchorElement>,
1419
+ HTMLAnchorElement
1420
+ > {}
1421
+
1422
+ /**
1423
+ * 检查给定的 URL 是否为外部链接的工具函数。
1424
+ * 如果 URL 以 http:// 或 https:// 开头,则被视为外部链接。
1425
+ */
1426
+ export const checkIsExternalLink = (href?: string): boolean =>
1427
+ /^https?:\/\//.test(href ?? "");
1428
+
1429
+ /**
1430
+ * 一个自定义的 Link 组件,根据当前语言环境调整 href 属性。
1431
+ * 对于内部链接,它使用 `getLocalizedUrl` 为 URL 添加语言前缀(例如,/fr/about)。
1432
+ * 这确保了导航保持在相同的语言环境上下文中。
1433
+ */
1434
+ export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
1435
+ ({ href, children, ...props }, ref) => {
1436
+ const { locale } = useLocale();
1437
+ const isExternalLink = checkIsExternalLink(href);
1438
+
1439
+ // 如果链接是内部链接且提供了有效的 href,则获取本地化的 URL。
1440
+ const hrefI18n =
1441
+ href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
1442
+
1443
+ return (
1444
+ <a href={hrefI18n} ref={ref} {...props}>
1445
+ {children}
1446
+ </a>
1447
+ );
1448
+ }
1449
+ );
1450
+
1451
+ Link.displayName = "Link";
1452
+ ```
1453
+
1454
+ ```jsx fileName="src/components/Link.mjx" codeFormat="esm"
1455
+ import { getLocalizedUrl } from "intlayer";
1456
+ import { useLocale } from "react-intlayer";
1457
+ import { forwardRef } from "react";
1458
+
1459
+ /**
1460
+ * 检查给定的 URL 是否为外部链接的工具函数。
1461
+ * 如果 URL 以 http:// 或 https:// 开头,则被视为外部链接。
1462
+ */
1463
+ export const checkIsExternalLink = (href?: string): boolean =>
1464
+ /^https?:\/\//.test(href ?? "");
1465
+
1466
+ /**
1467
+ * 一个自定义的 Link 组件,根据当前语言环境调整 href 属性。
1468
+ * 对于内部链接,它使用 `getLocalizedUrl` 为 URL 添加语言前缀(例如,/fr/about)。
1469
+ * 这确保了导航保持在相同的语言环境上下文中。
1470
+ */
1471
+ export const Link = forwardRef(({ href, children, ...props }, ref) => {
1472
+
1473
+ const { locale } = useLocale();
1474
+ const isExternalLink = checkIsExternalLink(href);
1475
+
1476
+ // 如果链接是内部链接并且提供了有效的 href,则获取本地化的 URL。
1477
+ const hrefI18n =
1478
+ href && !isExternalLink ? getLocalizedUrl(href, locale) : href;
1479
+
1480
+ return (
1481
+ <a href={hrefI18n} ref={ref} {...props}>
1482
+ {children}
1483
+ </a>
1484
+ );
1485
+ });
1486
+
1487
+ Link.displayName = "Link";
1488
+ ```
1489
+
1490
+ ```jsx fileName="src/components/Link.csx" codeFormat="commonjs"
1491
+ const { getLocalizedUrl } = require("intlayer");
1492
+ const { useLocale } = require("react-intlayer");
1493
+ const { forwardRef } = require("react");
1494
+
1495
+ /**
1496
+ * 检查给定 URL 是否为外部链接的工具函数。
1497
+ * 如果 URL 以 http:// 或 https:// 开头,则被认为是外部链接。
1498
+ */
1499
+ const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
1500
+
1501
+ /**
1502
+ * 一个自定义的 Link 组件,根据当前语言环境调整 href 属性。
1503
+ * 对于内部链接,它使用 `getLocalizedUrl` 为 URL 添加语言环境前缀(例如 /fr/about)。
1504
+ * 这确保了导航保持在相同的语言环境上下文中。
1505
+ */
1506
+ const Link = forwardRef(({ href, children, ...props }, ref) => {
1507
+ const { locale } = useLocale();
1508
+ const isExternalLink = checkIsExternalLink(href);
1509
+
1510
+ // 如果链接是内部链接并且提供了有效的 href,则获取本地化的 URL。
1511
+ const localizedHref = isExternalLink ? href : getLocalizedUrl(href, locale);
1512
+
1513
+ return (
1514
+ <a
1515
+ href={localizedHref}
1516
+ ref={ref}
1517
+ {...props}
1518
+ aria-current={isExternalLink ? "external" : undefined}
1519
+ >
1520
+ {children}
1521
+ </a>
1522
+ );
1523
+ });
1524
+
1525
+ Link.displayName = "Link";
1526
+ ```
1527
+
1528
+ #### 工作原理
1529
+
1530
+ - **检测外部链接**:
1531
+ 辅助函数 `checkIsExternalLink` 用于判断 URL 是否为外部链接。外部链接保持不变,因为它们不需要本地化。
1532
+
1533
+ - **获取当前语言环境**:
1534
+ `useLocale` 钩子提供当前的语言环境(例如,法语为 `fr`)。
1535
+
1536
+ - **本地化 URL**:
1537
+ 对于内部链接(即非外部链接),`getLocalizedUrl` 会自动为 URL 添加当前语言环境的前缀。这意味着如果用户使用法语,传递 `/about` 作为 `href` 会被转换为 `/fr/about`。
1538
+
1539
+ - **返回链接**:
1540
+ 组件返回一个带有本地化 URL 的 `<a>` 元素,确保导航与语言环境一致。
1541
+
1542
+ 通过在应用程序中集成此 `Link` 组件,可以维护一致且语言感知的用户体验,同时还可以提升 SEO 和可用性。
1543
+
1544
+ ### 配置 TypeScript
1545
+
1546
+ Intlayer 使用模块增强功能来利用 TypeScript,使您的代码库更强大。
1547
+
1548
+ ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)
1549
+
1550
+ ![alt text](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)
1551
+
1552
+ 确保您的 TypeScript 配置包含自动生成的类型。
1553
+
1554
+ ```json5 fileName="tsconfig.json"
1555
+ {
1556
+ // ... 您现有的 TypeScript 配置
1557
+ "include": [
1558
+ // ... 您现有的 TypeScript 配置
1559
+ ".intlayer/**/*.ts", // 包含自动生成的类型
1560
+ ],
1561
+ }
1562
+ ```
1563
+
1564
+ ### Git 配置
1565
+
1566
+ 建议忽略由 Intlayer 生成的文件。这可以避免将它们提交到您的 Git 仓库中。
1567
+
1568
+ 为此,您可以将以下指令添加到 `.gitignore` 文件中:
1569
+
1570
+ ```plaintext
1571
+ # 忽略由 Intlayer 生成的文件
1572
+ .intlayer
1573
+ ```
1574
+
1575
+ ### 深入了解
1576
+
1577
+ 要进一步了解,您可以实现 [可视化编辑器](https://github.com/aymericzip/intlayer/blob/main/docs/zh/intlayer_visual_editor.md) 或使用 [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/zh/intlayer_CMS.md) 外部化您的内容。