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