@intlayer/docs 9.1.3 → 9.2.0

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 (415) hide show
  1. package/blog/ar/rag_powered_documentation_assistant.md +7 -0
  2. package/blog/de/rag_powered_documentation_assistant.md +6 -0
  3. package/blog/en-GB/rag_powered_documentation_assistant.md +6 -0
  4. package/blog/es/rag_powered_documentation_assistant.md +7 -0
  5. package/blog/fr/i18n_meaning.md +7 -1
  6. package/blog/fr/list_i18n_technologies/frameworks/angular.md +5 -1
  7. package/blog/fr/rag_powered_documentation_assistant.md +6 -0
  8. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +119 -42
  9. package/blog/hi/rag_powered_documentation_assistant.md +7 -0
  10. package/blog/id/rag_powered_documentation_assistant.md +6 -0
  11. package/blog/it/rag_powered_documentation_assistant.md +6 -0
  12. package/blog/ja/rag_powered_documentation_assistant.md +7 -0
  13. package/blog/ko/list_i18n_technologies/frameworks/react.md +7 -7
  14. package/blog/ko/rag_powered_documentation_assistant.md +6 -0
  15. package/blog/pl/rag_powered_documentation_assistant.md +6 -0
  16. package/blog/pt/rag_powered_documentation_assistant.md +6 -0
  17. package/blog/ru/rag_powered_documentation_assistant.md +7 -0
  18. package/blog/tr/intlayer_with_react-intl.md +3 -1
  19. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +175 -42
  20. package/blog/tr/rag_powered_documentation_assistant.md +6 -0
  21. package/blog/uk/rag_powered_documentation_assistant.md +6 -0
  22. package/blog/vi/rag_powered_documentation_assistant.md +6 -0
  23. package/blog/zh/intlayer_with_i18next.md +87 -28
  24. package/blog/zh/intlayer_with_next-i18next.md +86 -29
  25. package/blog/zh/intlayer_with_next-intl.md +88 -28
  26. package/blog/zh/intlayer_with_react-i18next.md +87 -28
  27. package/blog/zh/intlayer_with_react-intl.md +88 -27
  28. package/blog/zh/intlayer_with_vue-i18n.md +117 -8
  29. package/blog/zh/rag_powered_documentation_assistant.md +6 -0
  30. package/dist/cjs/generated/blog.entry.cjs +27 -27
  31. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  32. package/dist/cjs/generated/docs.entry.cjs +234 -214
  33. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  34. package/dist/cjs/generated/frequentQuestions.entry.cjs +17 -17
  35. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  36. package/dist/cjs/generated/legal.entry.cjs +2 -2
  37. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  38. package/dist/esm/generated/blog.entry.mjs +27 -27
  39. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  40. package/dist/esm/generated/docs.entry.mjs +234 -214
  41. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  42. package/dist/esm/generated/frequentQuestions.entry.mjs +17 -17
  43. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  44. package/dist/esm/generated/legal.entry.mjs +2 -2
  45. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  46. package/dist/types/generated/docs.entry.d.ts +1 -0
  47. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  48. package/docs/ar/analytics.md +222 -0
  49. package/docs/ar/autoFill.md +28 -9
  50. package/docs/ar/configuration.md +25 -8
  51. package/docs/ar/dictionary/file.md +3 -1
  52. package/docs/ar/dictionary/nesting.md +47 -30
  53. package/docs/ar/formatters.md +148 -193
  54. package/docs/ar/intlayer_CMS.md +152 -0
  55. package/docs/ar/intlayer_with_angular_21.md +9 -9
  56. package/docs/ar/intlayer_with_nextjs_14.md +1 -28
  57. package/docs/ar/intlayer_with_nextjs_15.md +1 -33
  58. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +40 -83
  59. package/docs/ar/intlayer_with_solid_start.md +1078 -0
  60. package/docs/ar/intlayer_with_vite+vue.md +1 -3
  61. package/docs/ar/packages/intlayer/getLocalizedUrl.md +26 -24
  62. package/docs/ar/packages/intlayer/getMultilingualUrls.md +4 -18
  63. package/docs/ar/packages/react-intlayer/useDictionary.md +4 -21
  64. package/docs/ar/packages/react-intlayer/useIntlayer.md +2 -2
  65. package/docs/ar/packages/vite-intlayer/exports.md +15 -0
  66. package/docs/ar/packages/vite-intlayer/intlayer.md +121 -6
  67. package/docs/ar/packages/vite-intlayer/intlayerPrune.md +70 -3
  68. package/docs/ar/releases/v9.md +0 -37
  69. package/docs/ar/self_hosting.md +46 -49
  70. package/docs/bn/configuration.md +25 -8
  71. package/docs/bn/intlayer_with_angular_21.md +9 -9
  72. package/docs/cs/configuration.md +25 -8
  73. package/docs/cs/intlayer_with_angular_21.md +9 -9
  74. package/docs/de/analytics.md +222 -0
  75. package/docs/de/autoFill.md +28 -9
  76. package/docs/de/configuration.md +25 -8
  77. package/docs/de/dictionary/file.md +3 -1
  78. package/docs/de/dictionary/nesting.md +47 -31
  79. package/docs/de/formatters.md +208 -334
  80. package/docs/de/intlayer_CMS.md +66 -15
  81. package/docs/de/intlayer_with_angular_21.md +9 -9
  82. package/docs/de/intlayer_with_nestjs.md +11 -7
  83. package/docs/de/intlayer_with_nextjs_14.md +1 -28
  84. package/docs/de/intlayer_with_nextjs_15.md +1 -33
  85. package/docs/de/intlayer_with_solid_start.md +1078 -0
  86. package/docs/de/intlayer_with_vite+vue.md +1 -3
  87. package/docs/de/packages/intlayer/getLocalizedUrl.md +33 -25
  88. package/docs/de/packages/intlayer/getMultilingualUrls.md +4 -18
  89. package/docs/de/packages/react-intlayer/useDictionary.md +2 -5
  90. package/docs/de/packages/vite-intlayer/exports.md +15 -0
  91. package/docs/de/packages/vite-intlayer/intlayer.md +121 -6
  92. package/docs/de/packages/vite-intlayer/intlayerPrune.md +77 -4
  93. package/docs/de/releases/v9.md +0 -15
  94. package/docs/de/self_hosting.md +46 -50
  95. package/docs/en/cli/doc-review.md +13 -2
  96. package/docs/en/configuration.md +24 -15
  97. package/docs/en/intlayer_with_angular_21.md +9 -9
  98. package/docs/en/intlayer_with_solid_start.md +1091 -0
  99. package/docs/en/intlayer_with_vite+solid.md +12 -0
  100. package/docs/en-GB/analytics.md +222 -0
  101. package/docs/en-GB/autoFill.md +26 -7
  102. package/docs/en-GB/configuration.md +25 -8
  103. package/docs/en-GB/dictionary/file.md +2 -0
  104. package/docs/en-GB/dictionary/nesting.md +64 -205
  105. package/docs/en-GB/formatters.md +146 -181
  106. package/docs/en-GB/intlayer_CMS.md +152 -0
  107. package/docs/en-GB/intlayer_with_angular_21.md +9 -9
  108. package/docs/en-GB/intlayer_with_nestjs.md +6 -2
  109. package/docs/en-GB/intlayer_with_nextjs_14.md +0 -27
  110. package/docs/en-GB/intlayer_with_nextjs_15.md +1 -33
  111. package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +40 -82
  112. package/docs/en-GB/intlayer_with_solid_start.md +1078 -0
  113. package/docs/en-GB/intlayer_with_vite+vue.md +1 -3
  114. package/docs/en-GB/packages/intlayer/getLocalizedUrl.md +30 -22
  115. package/docs/en-GB/packages/intlayer/getMultilingualUrls.md +16 -48
  116. package/docs/en-GB/packages/vite-intlayer/exports.md +15 -0
  117. package/docs/en-GB/packages/vite-intlayer/intlayer.md +121 -6
  118. package/docs/en-GB/packages/vite-intlayer/intlayerPrune.md +77 -4
  119. package/docs/en-GB/self_hosting.md +60 -49
  120. package/docs/es/analytics.md +222 -0
  121. package/docs/es/autoFill.md +28 -9
  122. package/docs/es/configuration.md +24 -7
  123. package/docs/es/dictionary/file.md +3 -1
  124. package/docs/es/dictionary/nesting.md +47 -30
  125. package/docs/es/formatters.md +114 -168
  126. package/docs/es/intlayer_CMS.md +35 -10
  127. package/docs/es/intlayer_with_angular_21.md +9 -9
  128. package/docs/es/intlayer_with_nextjs_14.md +1 -28
  129. package/docs/es/intlayer_with_nextjs_15.md +1 -33
  130. package/docs/es/intlayer_with_solid_start.md +1078 -0
  131. package/docs/es/packages/intlayer/getLocalizedUrl.md +31 -23
  132. package/docs/es/packages/intlayer/getMultilingualUrls.md +4 -18
  133. package/docs/es/packages/vite-intlayer/exports.md +15 -0
  134. package/docs/es/packages/vite-intlayer/intlayer.md +121 -6
  135. package/docs/es/packages/vite-intlayer/intlayerPrune.md +69 -2
  136. package/docs/es/releases/v9.md +0 -15
  137. package/docs/es/self_hosting.md +46 -49
  138. package/docs/fr/analytics.md +222 -0
  139. package/docs/fr/autoFill.md +27 -8
  140. package/docs/fr/configuration.md +25 -8
  141. package/docs/fr/dictionary/file.md +2 -0
  142. package/docs/fr/dictionary/nesting.md +37 -184
  143. package/docs/fr/formatters.md +95 -236
  144. package/docs/fr/intlayer_CMS.md +66 -15
  145. package/docs/fr/intlayer_with_angular_21.md +9 -9
  146. package/docs/fr/intlayer_with_nextjs_14.md +1 -28
  147. package/docs/fr/intlayer_with_nextjs_15.md +1 -33
  148. package/docs/fr/intlayer_with_solid_start.md +1078 -0
  149. package/docs/fr/packages/intlayer/getLocalizedUrl.md +37 -27
  150. package/docs/fr/packages/intlayer/getMultilingualUrls.md +18 -20
  151. package/docs/fr/packages/vite-intlayer/exports.md +15 -0
  152. package/docs/fr/packages/vite-intlayer/intlayer.md +121 -6
  153. package/docs/fr/packages/vite-intlayer/intlayerPrune.md +77 -4
  154. package/docs/fr/releases/v9.md +0 -15
  155. package/docs/fr/self_hosting.md +46 -49
  156. package/docs/hi/analytics.md +222 -0
  157. package/docs/hi/autoFill.md +28 -9
  158. package/docs/hi/configuration.md +25 -8
  159. package/docs/hi/dictionary/file.md +3 -1
  160. package/docs/hi/dictionary/nesting.md +47 -30
  161. package/docs/hi/formatters.md +233 -334
  162. package/docs/hi/how_works_intlayer.md +3 -1
  163. package/docs/hi/intlayer_CMS.md +152 -0
  164. package/docs/hi/intlayer_with_angular_21.md +9 -9
  165. package/docs/hi/intlayer_with_nestjs.md +11 -7
  166. package/docs/hi/intlayer_with_nextjs_14.md +1 -28
  167. package/docs/hi/intlayer_with_nextjs_15.md +1 -33
  168. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +40 -83
  169. package/docs/hi/intlayer_with_solid_start.md +1077 -0
  170. package/docs/hi/intlayer_with_vite+preact.md +56 -49
  171. package/docs/hi/intlayer_with_vite+react.md +48 -41
  172. package/docs/hi/intlayer_with_vite+solid.md +32 -41
  173. package/docs/hi/intlayer_with_vite+vue.md +49 -44
  174. package/docs/hi/packages/intlayer/getLocalizedUrl.md +26 -24
  175. package/docs/hi/packages/intlayer/getMultilingualUrls.md +4 -18
  176. package/docs/hi/packages/next-intlayer/t.md +33 -1
  177. package/docs/hi/packages/react-intlayer/useDictionary.md +4 -21
  178. package/docs/hi/packages/vite-intlayer/exports.md +15 -0
  179. package/docs/hi/packages/vite-intlayer/intlayer.md +121 -6
  180. package/docs/hi/packages/vite-intlayer/intlayerPrune.md +78 -5
  181. package/docs/hi/plugins/sync-json.md +9 -9
  182. package/docs/hi/releases/v9.md +0 -15
  183. package/docs/hi/self_hosting.md +38 -51
  184. package/docs/id/analytics.md +223 -0
  185. package/docs/id/configuration.md +25 -8
  186. package/docs/id/dictionary/nesting.md +37 -184
  187. package/docs/id/formatters.md +208 -305
  188. package/docs/id/intlayer_CMS.md +164 -0
  189. package/docs/id/intlayer_with_angular_21.md +9 -9
  190. package/docs/id/intlayer_with_nextjs_14.md +1 -26
  191. package/docs/id/intlayer_with_react_router_v7_fs_routes.md +70 -63
  192. package/docs/id/intlayer_with_solid_start.md +1078 -0
  193. package/docs/id/packages/intlayer/getMultilingualUrls.md +4 -18
  194. package/docs/id/packages/react-intlayer/useIntlayer.md +2 -2
  195. package/docs/id/packages/vite-intlayer/exports.md +15 -0
  196. package/docs/id/packages/vite-intlayer/intlayer.md +121 -6
  197. package/docs/id/packages/vite-intlayer/intlayerPrune.md +78 -5
  198. package/docs/id/releases/v9.md +12 -0
  199. package/docs/id/self_hosting.md +61 -50
  200. package/docs/it/analytics.md +222 -0
  201. package/docs/it/autoFill.md +27 -8
  202. package/docs/it/configuration.md +25 -8
  203. package/docs/it/dictionary/file.md +3 -1
  204. package/docs/it/dictionary/nesting.md +47 -30
  205. package/docs/it/formatters.md +114 -168
  206. package/docs/it/intlayer_CMS.md +66 -15
  207. package/docs/it/intlayer_with_angular_21.md +9 -9
  208. package/docs/it/intlayer_with_nestjs.md +11 -7
  209. package/docs/it/intlayer_with_nextjs_14.md +1 -28
  210. package/docs/it/intlayer_with_nextjs_15.md +1 -33
  211. package/docs/it/intlayer_with_solid_start.md +1078 -0
  212. package/docs/it/intlayer_with_vite+vue.md +1 -3
  213. package/docs/it/packages/intlayer/getLocalizedUrl.md +34 -26
  214. package/docs/it/packages/intlayer/getMultilingualUrls.md +4 -18
  215. package/docs/it/packages/react-intlayer/useDictionary.md +4 -21
  216. package/docs/it/packages/vite-intlayer/exports.md +15 -0
  217. package/docs/it/packages/vite-intlayer/intlayer.md +121 -6
  218. package/docs/it/packages/vite-intlayer/intlayerPrune.md +77 -4
  219. package/docs/it/releases/v9.md +0 -15
  220. package/docs/it/self_hosting.md +60 -49
  221. package/docs/ja/analytics.md +222 -0
  222. package/docs/ja/autoFill.md +28 -9
  223. package/docs/ja/configuration.md +25 -8
  224. package/docs/ja/dictionary/content_file.md +15 -7
  225. package/docs/ja/dictionary/file.md +3 -1
  226. package/docs/ja/dictionary/nesting.md +47 -30
  227. package/docs/ja/formatters.md +133 -187
  228. package/docs/ja/intlayer_visual_editor.md +3 -1
  229. package/docs/ja/intlayer_with_angular_21.md +6 -6
  230. package/docs/ja/intlayer_with_nestjs.md +2 -12
  231. package/docs/ja/intlayer_with_nextjs_14.md +1 -28
  232. package/docs/ja/intlayer_with_nextjs_15.md +1 -33
  233. package/docs/ja/intlayer_with_react_router_v7.md +456 -20
  234. package/docs/ja/intlayer_with_solid_start.md +1078 -0
  235. package/docs/ja/intlayer_with_vite+preact.md +73 -41
  236. package/docs/ja/intlayer_with_vite+vue.md +1 -3
  237. package/docs/ja/mcp_server.md +3 -9
  238. package/docs/ja/packages/intlayer/getLocalizedUrl.md +26 -24
  239. package/docs/ja/packages/intlayer/getMultilingualUrls.md +3 -17
  240. package/docs/ja/packages/vite-intlayer/exports.md +15 -0
  241. package/docs/ja/packages/vite-intlayer/intlayer.md +121 -6
  242. package/docs/ja/packages/vite-intlayer/intlayerPrune.md +79 -6
  243. package/docs/ja/releases/v9.md +12 -0
  244. package/docs/ja/self_hosting.md +46 -50
  245. package/docs/ko/analytics.md +222 -0
  246. package/docs/ko/autoFill.md +28 -9
  247. package/docs/ko/configuration.md +25 -8
  248. package/docs/ko/dictionary/file.md +3 -1
  249. package/docs/ko/dictionary/nesting.md +47 -30
  250. package/docs/ko/formatters.md +133 -187
  251. package/docs/ko/intlayer_with_angular_21.md +9 -9
  252. package/docs/ko/intlayer_with_lynx+react.md +133 -39
  253. package/docs/ko/intlayer_with_nextjs_14.md +1 -28
  254. package/docs/ko/intlayer_with_nextjs_15.md +1 -33
  255. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +40 -188
  256. package/docs/ko/intlayer_with_solid_start.md +1078 -0
  257. package/docs/ko/intlayer_with_vite+preact.md +57 -23
  258. package/docs/ko/intlayer_with_vite+vue.md +1 -3
  259. package/docs/ko/packages/intlayer/getLocalizedUrl.md +26 -24
  260. package/docs/ko/packages/intlayer/getMultilingualUrls.md +4 -18
  261. package/docs/ko/packages/vite-intlayer/exports.md +15 -0
  262. package/docs/ko/packages/vite-intlayer/intlayer.md +121 -6
  263. package/docs/ko/packages/vite-intlayer/intlayerPrune.md +79 -6
  264. package/docs/ko/releases/v9.md +12 -0
  265. package/docs/ko/self_hosting.md +60 -49
  266. package/docs/nl/configuration.md +25 -8
  267. package/docs/nl/intlayer_with_angular_21.md +9 -9
  268. package/docs/pl/analytics.md +220 -0
  269. package/docs/pl/configuration.md +25 -8
  270. package/docs/pl/dictionary/nesting.md +47 -30
  271. package/docs/pl/formatters.md +208 -305
  272. package/docs/pl/intlayer_CMS.md +152 -0
  273. package/docs/pl/intlayer_with_angular_21.md +9 -9
  274. package/docs/pl/intlayer_with_nextjs_14.md +1 -26
  275. package/docs/pl/intlayer_with_solid_start.md +1078 -0
  276. package/docs/pl/packages/intlayer/getMultilingualUrls.md +4 -18
  277. package/docs/pl/packages/react-intlayer/useDictionary.md +2 -19
  278. package/docs/pl/packages/vite-intlayer/exports.md +15 -0
  279. package/docs/pl/packages/vite-intlayer/intlayer.md +121 -6
  280. package/docs/pl/packages/vite-intlayer/intlayerPrune.md +77 -4
  281. package/docs/pl/releases/v9.md +0 -15
  282. package/docs/pl/self_hosting.md +60 -49
  283. package/docs/pt/analytics.md +222 -0
  284. package/docs/pt/configuration.md +25 -8
  285. package/docs/pt/dictionary/file.md +3 -1
  286. package/docs/pt/dictionary/nesting.md +47 -30
  287. package/docs/pt/formatters.md +112 -168
  288. package/docs/pt/intlayer_CMS.md +66 -15
  289. package/docs/pt/intlayer_with_angular_21.md +9 -9
  290. package/docs/pt/intlayer_with_astro_lit.md +26 -1
  291. package/docs/pt/intlayer_with_nextjs_14.md +1 -28
  292. package/docs/pt/intlayer_with_nextjs_15.md +1 -33
  293. package/docs/pt/intlayer_with_solid_start.md +1078 -0
  294. package/docs/pt/intlayer_with_vite+vue.md +1 -3
  295. package/docs/pt/packages/intlayer/getLocalizedUrl.md +34 -26
  296. package/docs/pt/packages/intlayer/getMultilingualUrls.md +4 -18
  297. package/docs/pt/packages/vite-intlayer/exports.md +15 -0
  298. package/docs/pt/packages/vite-intlayer/intlayer.md +121 -6
  299. package/docs/pt/packages/vite-intlayer/intlayerPrune.md +78 -6
  300. package/docs/pt/releases/v9.md +0 -15
  301. package/docs/pt/self_hosting.md +60 -49
  302. package/docs/ru/analytics.md +222 -0
  303. package/docs/ru/autoFill.md +27 -8
  304. package/docs/ru/configuration.md +25 -8
  305. package/docs/ru/dictionary/file.md +3 -1
  306. package/docs/ru/dictionary/nesting.md +64 -205
  307. package/docs/ru/formatters.md +108 -128
  308. package/docs/ru/intlayer_with_angular_21.md +9 -9
  309. package/docs/ru/intlayer_with_nextjs_14.md +1 -28
  310. package/docs/ru/intlayer_with_nextjs_15.md +1 -33
  311. package/docs/ru/intlayer_with_solid_start.md +1078 -0
  312. package/docs/ru/intlayer_with_vite+vue.md +1 -3
  313. package/docs/ru/packages/intlayer/getLocalizedUrl.md +34 -26
  314. package/docs/ru/packages/intlayer/getMultilingualUrls.md +4 -18
  315. package/docs/ru/packages/react-intlayer/useDictionary.md +4 -21
  316. package/docs/ru/packages/vite-intlayer/exports.md +15 -0
  317. package/docs/ru/packages/vite-intlayer/intlayer.md +121 -6
  318. package/docs/ru/packages/vite-intlayer/intlayerPrune.md +77 -4
  319. package/docs/ru/releases/v9.md +0 -15
  320. package/docs/ru/self_hosting.md +60 -49
  321. package/docs/tr/analytics.md +222 -0
  322. package/docs/tr/autoFill.md +28 -9
  323. package/docs/tr/configuration.md +25 -8
  324. package/docs/tr/dictionary/file.md +2 -0
  325. package/docs/tr/dictionary/nesting.md +47 -30
  326. package/docs/tr/formatters.md +144 -190
  327. package/docs/tr/intlayer_CMS.md +152 -0
  328. package/docs/tr/intlayer_with_angular_21.md +9 -9
  329. package/docs/tr/intlayer_with_nestjs.md +2 -12
  330. package/docs/tr/intlayer_with_nextjs_15.md +1 -33
  331. package/docs/tr/intlayer_with_solid_start.md +1078 -0
  332. package/docs/tr/intlayer_with_vite+vue.md +1 -3
  333. package/docs/tr/packages/intlayer/getMultilingualUrls.md +4 -18
  334. package/docs/tr/packages/vite-intlayer/exports.md +15 -0
  335. package/docs/tr/packages/vite-intlayer/intlayer.md +121 -6
  336. package/docs/tr/packages/vite-intlayer/intlayerPrune.md +77 -4
  337. package/docs/tr/self_hosting.md +47 -50
  338. package/docs/uk/analytics.md +222 -0
  339. package/docs/uk/configuration.md +25 -8
  340. package/docs/uk/dictionary/nesting.md +47 -30
  341. package/docs/uk/formatters.md +128 -185
  342. package/docs/uk/intlayer_CMS.md +152 -0
  343. package/docs/uk/intlayer_with_angular_21.md +9 -9
  344. package/docs/uk/intlayer_with_nextjs_14.md +1 -26
  345. package/docs/uk/intlayer_with_solid_start.md +1078 -0
  346. package/docs/uk/packages/react-intlayer/useDictionary.md +2 -19
  347. package/docs/uk/packages/vite-intlayer/exports.md +15 -0
  348. package/docs/uk/packages/vite-intlayer/intlayer.md +121 -6
  349. package/docs/uk/packages/vite-intlayer/intlayerPrune.md +77 -4
  350. package/docs/uk/releases/v9.md +0 -15
  351. package/docs/uk/self_hosting.md +60 -50
  352. package/docs/ur/configuration.md +25 -8
  353. package/docs/ur/intlayer_with_angular_21.md +9 -9
  354. package/docs/vi/analytics.md +222 -0
  355. package/docs/vi/configuration.md +24 -8
  356. package/docs/vi/dictionary/nesting.md +37 -184
  357. package/docs/vi/formatters.md +208 -309
  358. package/docs/vi/intlayer_CMS.md +164 -0
  359. package/docs/vi/intlayer_with_angular_21.md +9 -9
  360. package/docs/vi/intlayer_with_nextjs_14.md +0 -25
  361. package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +70 -63
  362. package/docs/vi/intlayer_with_solid_start.md +1078 -0
  363. package/docs/vi/packages/intlayer/getMultilingualUrls.md +4 -18
  364. package/docs/vi/packages/react-intlayer/useIntlayer.md +2 -2
  365. package/docs/vi/packages/vite-intlayer/exports.md +15 -0
  366. package/docs/vi/packages/vite-intlayer/intlayer.md +121 -6
  367. package/docs/vi/packages/vite-intlayer/intlayerPrune.md +77 -4
  368. package/docs/vi/plugins/sync-json.md +6 -6
  369. package/docs/vi/releases/v9.md +12 -0
  370. package/docs/vi/self_hosting.md +61 -50
  371. package/docs/zh/CI_CD.md +4 -0
  372. package/docs/zh/analytics.md +222 -0
  373. package/docs/zh/autoFill.md +28 -9
  374. package/docs/zh/configuration.md +24 -8
  375. package/docs/zh/dictionary/file.md +2 -0
  376. package/docs/zh/dictionary/nesting.md +47 -30
  377. package/docs/zh/formatters.md +140 -188
  378. package/docs/zh/intlayer_CMS.md +164 -0
  379. package/docs/zh/intlayer_with_analog.md +193 -3
  380. package/docs/zh/intlayer_with_angular_19.md +272 -3
  381. package/docs/zh/intlayer_with_angular_21.md +7 -7
  382. package/docs/zh/intlayer_with_create_react_app.md +348 -26
  383. package/docs/zh/intlayer_with_lynx+react.md +263 -4
  384. package/docs/zh/intlayer_with_nextjs_14.md +1 -28
  385. package/docs/zh/intlayer_with_nextjs_15.md +1 -33
  386. package/docs/zh/intlayer_with_nextjs_no_locale_path.md +558 -1
  387. package/docs/zh/intlayer_with_nuxt.md +182 -7
  388. package/docs/zh/intlayer_with_react_router_v7.md +183 -25
  389. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +306 -42
  390. package/docs/zh/intlayer_with_solid_start.md +1077 -0
  391. package/docs/zh/intlayer_with_storybook.md +260 -3
  392. package/docs/zh/intlayer_with_svelte_kit.md +428 -48
  393. package/docs/zh/intlayer_with_tanstack+solid.md +713 -13
  394. package/docs/zh/intlayer_with_tanstack.md +731 -20
  395. package/docs/zh/intlayer_with_vanilla.md +314 -4
  396. package/docs/zh/intlayer_with_vite+lit.md +465 -4
  397. package/docs/zh/intlayer_with_vite+preact.md +422 -116
  398. package/docs/zh/intlayer_with_vite+react.md +324 -45
  399. package/docs/zh/intlayer_with_vite+react_compiler.md +228 -13
  400. package/docs/zh/intlayer_with_vite+solid.md +462 -32
  401. package/docs/zh/intlayer_with_vite+vanilla.md +497 -4
  402. package/docs/zh/mcp_server.md +3 -9
  403. package/docs/zh/packages/intlayer/getLocalizedUrl.md +26 -24
  404. package/docs/zh/packages/intlayer/getMultilingualUrls.md +4 -18
  405. package/docs/zh/packages/vite-intlayer/exports.md +29 -0
  406. package/docs/zh/packages/vite-intlayer/intlayer.md +121 -6
  407. package/docs/zh/packages/vite-intlayer/intlayerPrune.md +79 -6
  408. package/docs/zh/releases/v9.md +12 -0
  409. package/docs/zh/self_hosting.md +60 -50
  410. package/docs/zh-TW/intlayer_with_angular_21.md +7 -7
  411. package/package.json +6 -6
  412. package/src/generated/blog.entry.ts +27 -27
  413. package/src/generated/docs.entry.ts +234 -214
  414. package/src/generated/frequentQuestions.entry.ts +17 -17
  415. package/src/generated/legal.entry.ts +2 -2
@@ -53,9 +53,68 @@ author: aymericzip
53
53
 
54
54
  <TOC/>
55
55
 
56
- ### 第一步:安装依赖
56
+ ## 为什么选择 Intlayer 而不是其他方案?
57
57
 
58
- 使用 npm 安装所需的包:
58
+ `@solid-primitives/i18n` 或 `i18next` 等主要解决方案相比,Intlayer 是一个集成了优化功能的解决方案,例如:
59
+
60
+ <AccordionGroup>
61
+
62
+ <Accordion header="完整的 Solid 支持">
63
+
64
+ Intlayer 针对 Solid 进行了优化,提供 **组件级内容作用域**、**响应式翻译** 以及国际化 (i18n) 扩展所需的所有功能。
65
+
66
+ </Accordion>
67
+
68
+ <Accordion header="Bundle 大小">
69
+
70
+ 不再将庞大的 JSON 文件加载到页面中,只加载必要的内容。Intlayer 帮助 **将 bundle 和页面大小减少高达 50%**。
71
+
72
+ </Accordion>
73
+
74
+ <Accordion header="可维护性">
75
+
76
+ 对应用程序的内容进行作用域划分 **便于维护** 大型应用程序。您可以复制或删除单个功能文件夹,而无需费力审查整个内容代码库。此外,Intlayer **完全类型化**,确保内容的准确性。
77
+
78
+ </Accordion>
79
+
80
+ <Accordion header="AI Agent">
81
+
82
+ 将内容共置 **减少了** 大型语言模型 (LLMs) **所需的上下文**。Intlayer 还提供一套工具,例如用于测试缺失翻译的 **CLI**、**[LSP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/lsp.md)**、**[MCP](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/mcp_server.md)** 和 **[agent skills](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/agent_skills.md)**,使 AI agents 的开发者体验 (DX) 更加顺畅。
83
+
84
+ </Accordion>
85
+
86
+ <Accordion header="自动化">
87
+
88
+ 在 CI/CD 管道中使用自动化翻译,选择您的 LLM,按照 AI 提供商的成本计费。Intlayer 还提供 **编译器** 来自动提取内容,以及一个 [web 平台](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md) 来帮助 **后台翻译**。
89
+
90
+ </Accordion>
91
+
92
+ <Accordion header="性能">
93
+
94
+ 将庞大的 JSON 文件连接到组件可能导致性能和反应性问题。Intlayer 在构建时优化了内容加载。
95
+
96
+ </Accordion>
97
+
98
+ <Accordion header="与非开发人员协作扩展">
99
+
100
+ Intlayer 不仅仅是一个 i18n 解决方案,它还提供 **自托管 [visual editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)** 和 **[完整 CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md)** 来帮助您 **实时** 管理多语言内容,使与翻译人员、文案撰写人和其他团队成员的协作无缝进行。内容可以本地存储和/或远程存储。
101
+
102
+ </Accordion>
103
+ </AccordionGroup>
104
+
105
+ ---
106
+
107
+ ## Vite 和 Solid 应用程序中 Intlayer 的分步设置指南
108
+
109
+ ## 目录
110
+
111
+ <TOC/>
112
+
113
+ <Steps>
114
+
115
+ <Step number={1} title="安装依赖">
116
+
117
+ 使用 npm 安装必要的包:
59
118
 
60
119
  ```bash packageManager="npm"
61
120
  npx intlayer init --interactive
@@ -73,9 +132,9 @@ yarn dlx intlayer@canary init --interactive
73
132
  bunx intlayer@canary init --interactive
74
133
  ```
75
134
 
76
- > `--interactive` 标志是可选的。如果您是 AI 代理,请使用 `intlayer-cli init`。
135
+ > `--interactive` 标志是可选的。如果您是 AI agent,请使用 `intlayer-cli init`。
77
136
 
78
- > 该命令将检测您的环境并安装所需的软件包。例如:
137
+ > 此命令将检测您的环境并安装必要的包。例如:
79
138
 
80
139
  ```bash packageManager="npm"
81
140
  npm install intlayer solid-intlayer
@@ -98,17 +157,20 @@ bun add vite-intlayer --dev
98
157
  ```
99
158
 
100
159
  - **intlayer**
101
- 提供国际化工具的核心包,用于配置管理、翻译、[内容声明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)、转译以及[命令行工具](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/index.md)。
160
+
161
+ 核心包,为配置管理、翻译、[内容声明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)、转译和 [CLI 命令](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/index.md)提供国际化工具。
102
162
 
103
163
  - **solid-intlayer**
104
- 将 Intlayer 集成到 Solid 应用中的包。它提供了 Solid 国际化的上下文提供者和钩子。
164
+ 将 Intlayer Solid 应用程序集成的包。它为 Solid 国际化提供上下文提供者和 hooks。
105
165
 
106
166
  - **vite-intlayer**
107
- 包含用于将 Intlayer 集成到[Vite 打包器](https://vite.dev/guide/why.html#why-bundle-for-production) Vite 插件,以及用于检测用户首选语言、管理 Cookie 和处理 URL 重定向的中间件。
167
+ 包括用于将 Intlayer [Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production) 集成的 Vite 插件,以及用于检测用户首选语言、管理 cookie 和处理 URL 重定向的中间件。
168
+
169
+ </Step>
108
170
 
109
- ### 2 步:项目配置
171
+ <Step number={2} title="配置您的项目">
110
172
 
111
- 创建一个配置文件来配置您的应用程序语言:
173
+ 创建一个配置文件来配置您的应用程序的语言:
112
174
 
113
175
  ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
114
176
  import { Locales, type IntlayerConfig } from "intlayer";
@@ -128,35 +190,71 @@ const config: IntlayerConfig = {
128
190
  export default config;
129
191
  ```
130
192
 
131
- > 通过此配置文件,你可以设置本地化的 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名,禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅[配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)。
193
+ > 通过此配置文件,您可以设置本地化 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名、禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅[配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)。
132
194
 
133
- ### 第3步:在你的 Vite 配置中集成 Intlayer
195
+ </Step>
134
196
 
135
- intlayer 插件添加到你的配置中。
197
+ <Step number={3} title="在您的 Vite 配置中集成 Intlayer">
198
+
199
+ 将 intlayer 插件添加到您的配置中。
136
200
 
137
201
  ```typescript fileName="vite.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
138
202
  import { defineConfig } from "vite";
139
- import react from "@vitejs/plugin-react-swc";
203
+ import solid from "vite-plugin-solid";
140
204
  import { intlayer } from "vite-intlayer";
141
205
 
142
206
  // https://vitejs.dev/config/
143
207
  export default defineConfig({
144
- plugins: [react(), intlayer()],
208
+ plugins: [solid(), intlayer()],
145
209
  });
146
210
  ```
147
211
 
148
- > `intlayer()` 是用于将 Intlayer 集成到 Vite 中的插件。它确保内容声明文件的构建,并在开发模式下监视这些文件。它在 Vite 应用中定义了 Intlayer 的环境变量。此外,它还提供别名以优化性能。
212
+ > `intlayer()` Vite 插件用于将 Intlayer Vite 集成。它确保内容声明文件的构建,并在开发模式下监视它们。它在 Vite 应用程序中定义 Intlayer 环境变量。此外,它提供别名以优化性能。
213
+
214
+ </Step>
149
215
 
150
- ### 4步:声明您的内容
216
+ <Step number={4} title="声明您的内容">
151
217
 
152
- 创建并管理您的内容声明以存储翻译:
218
+ 创建和管理您的内容声明来存储翻译:
153
219
 
154
220
  ```tsx fileName="src/app.content.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
155
221
  import { t, type Dictionary } from "intlayer";
156
222
 
157
223
  const appContent = {
158
224
  key: "app",
159
- content: {},
225
+ content: {
226
+ viteLogo: t({
227
+ zh: "Vite logo",
228
+ en: "Vite logo",
229
+ fr: "Logo Vite",
230
+ es: "Logo Vite",
231
+ }),
232
+ solidLogo: t({
233
+ zh: "Solid logo",
234
+ en: "Solid logo",
235
+ fr: "Logo Solid",
236
+ es: "Logo Solid",
237
+ }),
238
+ title: "Vite + Solid",
239
+ count: t({
240
+ zh: "计数为 {{count}}",
241
+ en: "count is {{count}}",
242
+ fr: "le compte est {{count}}",
243
+ es: "el recuento es {{count}}",
244
+ }),
245
+ edit: t({
246
+ zh: "编辑 src/App.tsx 并保存以测试 HMR",
247
+ en: "Edit src/App.tsx and save to test HMR",
248
+ fr: "Éditez src/App.tsx et enregistrez pour tester HMR",
249
+ es: "Edita src/App.tsx y guarda para probar HMR",
250
+ }),
251
+ readTheDocs: t({
252
+ zh: "点击 Vite 和 Solid logo 以了解更多",
253
+ en: "Click on the Vite and Solid logos to learn more",
254
+ fr: "Cliquez sur les logos Vite et Solid pour en savoir plus",
255
+ es: "Haga clic en los logotipos de Vite and Solid para obtener más información",
256
+ }),
257
+ },
160
258
  } satisfies Dictionary;
161
259
 
162
260
  export default appContent;
@@ -166,15 +264,72 @@ export default appContent;
166
264
  {
167
265
  "$schema": "https://intlayer.org/schema.json",
168
266
  "key": "app",
169
- "content": {}
267
+ "content": {
268
+ "viteLogo": {
269
+ "nodeType": "translation",
270
+ "translation": {
271
+ "zh": "Vite logo",
272
+ "en": "Vite logo",
273
+ "fr": "Logo Vite",
274
+ "es": "Logo Vite"
275
+ }
276
+ },
277
+ "solidLogo": {
278
+ "nodeType": "translation",
279
+ "translation": {
280
+ "zh": "Solid logo",
281
+ "en": "Solid logo",
282
+ "fr": "Logo Solid",
283
+ "es": "Logo Solid"
284
+ }
285
+ },
286
+ "title": {
287
+ "nodeType": "translation",
288
+ "translation": {
289
+ "zh": "Vite + Solid",
290
+ "en": "Vite + Solid",
291
+ "fr": "Vite + Solid",
292
+ "es": "Vite + Solid"
293
+ }
294
+ },
295
+ "count": {
296
+ "nodeType": "translation",
297
+ "translation": {
298
+ "zh": "计数为 {{count}}",
299
+ "en": "count is {{count}}",
300
+ "fr": "le compte est {{count}}",
301
+ "es": "el recuento es {{count}}"
302
+ }
303
+ },
304
+ "edit": {
305
+ "nodeType": "translation",
306
+ "translation": {
307
+ "zh": "编辑 src/App.tsx 并保存以测试 HMR",
308
+ "en": "Edit src/App.tsx and save to test HMR",
309
+ "fr": "Éditez src/App.tsx et enregistrez pour tester HMR",
310
+ "es": "Edita src/App.tsx y guarda para probar HMR"
311
+ }
312
+ },
313
+ "readTheDocs": {
314
+ "nodeType": "translation",
315
+ "translation": {
316
+ "zh": "点击 Vite 和 Solid logo 以了解更多",
317
+ "en": "Click on the Vite and Solid logos to learn more",
318
+ "fr": "Cliquez sur les logos Vite et Solid pour en savoir plus",
319
+ "es": "Haga clic en los logotipos de Vite and Solid para obtener más información"
320
+ }
321
+ }
322
+ }
170
323
  }
171
324
  ```
172
325
 
173
- > 您的内容声明可以在应用程序中的任何位置定义,只要它们被包含在 `contentDir` 目录中(默认是 `./src`)。并且文件扩展名需匹配内容声明文件扩展名(默认是 `.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}`)。
326
+ > 您的内容声明可以在应用程序中的任何位置定义,只要它们包含在 `contentDir` 目录中(默认为 `./src`)。并且匹配内容声明文件扩展名(默认为 `.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}`)。
327
+ >
328
+ > 有关更多详细信息,请参阅[内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。
174
329
 
175
- > 更多详情,请参考[内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。
330
+ </Step>
176
331
 
177
- ### 5步:在代码中使用 Intlayer
332
+ <Step number={5} title="在您的代码中使用 Intlayer">
178
333
 
179
334
  在整个应用程序中访问您的内容字典:
180
335
 
@@ -224,9 +379,9 @@ const App: Component = () => (
224
379
  export default App;
225
380
  ```
226
381
 
227
- > 在 Solid 中,`useIntlayer` 返回一个 **accessor** 函数(例如,`content.)。您必须调用此函数才能访问响应式内容。
382
+ > 在 Solid 中,`useIntlayer` 返回反应式内容(例如 `content`)。您可以直接访问其属性。
228
383
 
229
- > 如果您想在 `string` 属性(如 `alt`、`title`、`href`、`aria-label` 等)中使用您的内容,可以使用函数的值,例如:
384
+ > 如果您想在 `string` 属性中使用您的内容,例如 `alt`、`title`、`href`、`aria-label` 等,您可以使用函数的值,如:
230
385
  >
231
386
  > ```html
232
387
  > <img src="{content.image.src.value}" alt="{content.image.value}" />
@@ -234,9 +389,11 @@ export default App;
234
389
  > <img src="{String(content.image.src)}" alt="{String(content.image)}" />
235
390
  > ```
236
391
 
237
- ### (可选)第6步:更改内容语言
392
+ </Step>
393
+
394
+ <Step number={6} title="更改内容的语言" isOptional={true}>
238
395
 
239
- 要更改内容语言,您可以使用 `useLocale` 钩子提供的 `setLocale` 函数。此函数允许您设置应用程序的语言环境并相应地更新内容。
396
+ 要更改内容的语言,您可以使用 `useLocale` hook 提供的 `setLocale` 函数。此函数允许您设置应用程序的语言环境并相应地更新内容。
240
397
 
241
398
  ```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
242
399
  import { type Component, For } from "solid-js";
@@ -263,9 +420,11 @@ const LocaleSwitcher: Component = () => {
263
420
  };
264
421
  ```
265
422
 
266
- ### (可选)第7步:为应用添加本地化路由
423
+ </Step>
267
424
 
268
- 此步骤的目的是为每种语言创建唯一的路由。这对 SEO SEO 友好的 URL 很有用。
425
+ <Step number={7} title="为您的应用程序添加本地化路由" isOptional={true}>
426
+
427
+ 此步骤的目的是为每种语言创建独特的路由。这对 SEO 和 SEO 友好的 URL 很有用。
269
428
  示例:
270
429
 
271
430
  ```plaintext
@@ -276,13 +435,13 @@ const LocaleSwitcher: Component = () => {
276
435
 
277
436
  要为您的应用程序添加本地化路由,您可以使用 `@solidjs/router`。
278
437
 
279
- 首先,安装必要的依赖项:
438
+ 首先,安装必要的依赖:
280
439
 
281
440
  ```bash packageManager="npm"
282
441
  npm install @solidjs/router
283
442
  ```
284
443
 
285
- 然后,用 `Router` 包装您的应用程序,并使用 `localeMap` 定义您的路由:
444
+ 然后,使用 `Router` 包装您的应用程序,并使用 `localeMap` 定义您的路由:
286
445
 
287
446
  ```tsx fileName="src/index.tsx" codeFormat="typescript"
288
447
  import { render } from "solid-js/web";
@@ -328,9 +487,11 @@ const App: Component = () => (
328
487
  export default App;
329
488
  ```
330
489
 
331
- ### (可选)第8步:当语言环境变化时更改 URL
490
+ </Step>
491
+
492
+ <Step number={8} title="当语言环境更改时更改 URL" isOptional={true}>
332
493
 
333
- 要在语言环境更改时更改 URL,您可以使用 `useLocale` 钩子提供的 `onLocaleChange` 属性。您可以使用 `@solidjs/router` `useNavigate` 和 `useLocation` 钩子来更新 URL 路径。
494
+ 要在语言环境更改时更改 URL,您可以使用 `useLocale` hook 提供的 `onLocaleChange` 属性。您可以使用 `@solidjs/router` 中的 `useNavigate` 和 `useLocation` hooks 来更新 URL 路径。
334
495
 
335
496
  ```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
336
497
  import { type Component, For } from "solid-js";
@@ -365,6 +526,275 @@ const LocaleSwitcher: Component = () => {
365
526
  };
366
527
  ```
367
528
 
529
+ </Step>
530
+
531
+ <Step number={9} title="切换 HTML 语言和方向属性" isOptional={true}>
532
+
533
+ 更新 `<html>` 标签的 `lang` 和 `dir` 属性以匹配当前的语言环境,以提高可访问性和 SEO。
534
+
535
+ ```tsx fileName="src/App.tsx" codeFormat="typescript"
536
+ import { createEffect, type Component } from "solid-js";
537
+ import { useLocale } from "solid-intlayer";
538
+ import { getHTMLTextDir } from "intlayer";
539
+
540
+ const AppContent: Component = () => {
541
+ const { locale } = useLocale();
542
+
543
+ createEffect(() => {
544
+ document.documentElement.lang = locale();
545
+ document.documentElement.dir = getHTMLTextDir(locale());
546
+ });
547
+
548
+ return (
549
+ // ... 您的应用程序内容
550
+ );
551
+ };
552
+ ```
553
+
554
+ </Step>
555
+
556
+ <Step number={10} title="创建本地化链接组件" isOptional={true}>
557
+
558
+ 创建一个自定义 `Link` 组件,该组件自动为内部 URL 添加当前语言的前缀。
559
+
560
+ ```tsx fileName="src/components/Link.tsx" codeFormat="typescript"
561
+ import { type ParentComponent } from "solid-js";
562
+ import { A, type AnchorProps } from "@solidjs/router";
563
+ import { getLocalizedUrl } from "intlayer";
564
+ import { useLocale } from "solid-intlayer";
565
+
566
+ export const Link: ParentComponent<AnchorProps> = (props) => {
567
+ const { locale } = useLocale();
568
+
569
+ const isExternal = () => props.href.startsWith("http");
570
+ const localizedHref = () =>
571
+ isExternal() ? props.href : getLocalizedUrl(props.href, locale());
572
+
573
+ return <A {...props} href={localizedHref()} />;
574
+ };
575
+ ```
576
+
577
+ 同时,您也可以使用 `intlayerProxy` 为您的应用程序添加服务器端路由。此插件将根据 URL 自动检测当前语言环境并设置相应的语言环境 cookie。如果未指定语言环境,该插件将根据用户的浏览器语言偏好确定最合适的语言环境。如果未检测到语言环境,它将重定向到默认语言环境。
578
+
579
+ > 注意:要在生产中使用 `intlayerProxy`,您需要将 `vite-intlayer` 包从 `devDependencies` 切换到 `dependencies`。
580
+
581
+ > 自从 Intlayer v9 以来,`intlayerProxy()` 直接捆绑到 `intlayer()` 插件中,并通过 `routing.enableProxy` 选项(默认为 `true`)默认启用。如下所示单独注册它现在是可选的——保留它是为了向后兼容性以及需要控制插件顺序的设置。设置 `routing.enableProxy: false` 以退出。请参阅 [v9 发布说明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/releases/v9.md)。
582
+
583
+ ```typescript {3,7} fileName="vite.config.ts"
584
+ import { defineConfig } from "vite";
585
+ import solid from "vite-plugin-solid";
586
+ import { intlayer } from "vite-intlayer";
587
+
588
+ // https://vitejs.dev/config/
589
+ export default defineConfig({
590
+ plugins: [
591
+ solid(),
592
+ intlayer({
593
+ proxy: {
594
+ ignore: (req) => req.url?.startsWith("/api"),
595
+ },
596
+ }),
597
+ ],
598
+ });
599
+ ```
600
+
601
+ </Step>
602
+
603
+ <Step number={11} title="提取您的组件的内容" isOptional={true}>
604
+
605
+ 如果您有现有的 codebase,转换数千个文件可能很耗时。
606
+
607
+ 为了简化此过程,Intlayer 提供了一个 [compiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/compiler.md) / [extractor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/extract.md) 来转换您的组件并提取内容。
608
+
609
+ 要设置它,您可以在 `intlayer.config.ts` 文件中添加 `compiler` 部分:
610
+
611
+ ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
612
+ import { type IntlayerConfig } from "intlayer";
613
+
614
+ const config: IntlayerConfig = {
615
+ // ... 您的其他配置
616
+ compiler: {
617
+ /**
618
+ * 指示是否应启用编译器。
619
+ */
620
+ enabled: true,
621
+
622
+ /**
623
+ * 定义输出文件路径
624
+ */
625
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
626
+
627
+ /**
628
+ * 指示转换后是否应保存组件。
629
+ *
630
+ * - 如果为 `true`,编译器将重写磁盘中的组件文件。因此转换将是永久的,编译器将跳过下一个过程的转换。这样,编译器可以转换应用程序,然后可以将其删除。
631
+ *
632
+ * - 如果为 `false`,编译器将仅在构建输出中注入 `useIntlayer()` 函数调用,并保持基础 codebase 完整。转换仅在内存中进行。
633
+ */
634
+ saveComponents: false,
635
+
636
+ /**
637
+ * 字典键前缀
638
+ */
639
+ dictionaryKeyPrefix: "",
640
+ },
641
+ };
642
+
643
+ export default config;
644
+ ```
645
+
646
+ <Tabs>
647
+ <Tab value='Extract command'>
648
+
649
+ 运行提取器来转换您的组件并提取内容
650
+
651
+ ```bash packageManager="npm"
652
+ npx intlayer extract
653
+ ```
654
+
655
+ ```bash packageManager="pnpm"
656
+ pnpm intlayer extract
657
+ ```
658
+
659
+ ```bash packageManager="yarn"
660
+ yarn intlayer extract
661
+ ```
662
+
663
+ ```bash packageManager="bun"
664
+ bun x intlayer extract
665
+ ```
666
+
667
+ </Tab>
668
+ <Tab value='Babel compiler'>
669
+
670
+ > 自从 v9 以来,`intlayerCompiler` 已包含在 `intlayer` 插件中。因此您无需手动添加它。
671
+
672
+ 更新您的 `vite.config.ts` 以包含 `intlayerCompiler` 插件:
673
+
674
+ ```ts fileName="vite.config.ts"
675
+ import { defineConfig } from "vite";
676
+ import { intlayer, intlayerCompiler } from "vite-intlayer";
677
+
678
+ export default defineConfig({
679
+ plugins: [
680
+ intlayer(),
681
+ intlayerCompiler(), // 添加编译器插件
682
+ ],
683
+ });
684
+ ```
685
+
686
+ ```bash packageManager="npm"
687
+ npm run build # 或 npm run dev
688
+ ```
689
+
690
+ ```bash packageManager="pnpm"
691
+ pnpm run build # 或 pnpm run dev
692
+ ```
693
+
694
+ ```bash packageManager="yarn"
695
+ yarn build # 或 yarn dev
696
+ ```
697
+
698
+ ```bash packageManager="bun"
699
+ bun run build # 或 bun run dev
700
+ ```
701
+
702
+ </Tab>
703
+ </Tabs>
704
+ </Step>
705
+
706
+ </Steps>
707
+
708
+ ### 第3步:在你的 Vite 配置中集成 Intlayer
709
+
710
+ 将 intlayer 插件添加到你的配置中。
711
+
712
+ ```typescript fileName="vite.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
713
+ import { defineConfig } from "vite";
714
+ import react from "@vitejs/plugin-react-swc";
715
+ import { intlayer } from "vite-intlayer";
716
+
717
+ // https://vitejs.dev/config/
718
+ export default defineConfig({
719
+ plugins: [react(), intlayer()],
720
+ });
721
+ ```
722
+
723
+ > `intlayer()` 是用于将 Intlayer 集成到 Vite 中的插件。它确保内容声明文件的构建,并在开发模式下监视这些文件。它在 Vite 应用中定义了 Intlayer 的环境变量。此外,它还提供别名以优化性能。
724
+
725
+ #### 网站地图
726
+
727
+ Intlayer 的网站地图生成器尊重您的语言环境设置,并包含爬虫程序的常见元数据。
728
+
729
+ > 生成的网站地图支持 `xhtml:link` 命名空间(hreflang XML 扩展)。与仅发出平面 URL 的基本生成器不同,Intlayer 在每个页面的每个本地化变体之间建立双向链接(例如 `/about`、`/fr/about` 或 `/about?lang=fr`,具体取决于您的路由模式),这有助于搜索引擎关联本地化 URL。
730
+
731
+ #### Robots.txt
732
+
733
+ 使用 `getMultilingualUrls` 以便 `Disallow` 条目覆盖敏感路径的每个本地化拼写。
734
+
735
+ #### 1. 在项目根目录添加 `generate-seo.mjs`
736
+
737
+ ```javascript fileName="generate-seo.mjs"
738
+ import fs from "fs";
739
+ import path from "path";
740
+ import { fileURLToPath } from "url";
741
+ import { generateSitemap, getMultilingualUrls } from "intlayer";
742
+
743
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
744
+
745
+ const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace(
746
+ /\/$/,
747
+ ""
748
+ );
749
+
750
+ const pathList = [
751
+ { path: "/", changefreq: "daily", priority: 1.0 },
752
+ { path: "/about", changefreq: "monthly", priority: 0.7 },
753
+ ];
754
+
755
+ // 生成网站地图
756
+ const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });
757
+ fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);
758
+
759
+ // 获取所有多语言 URL
760
+ const getAllMultilingualUrls = (urls) =>
761
+ urls.flatMap((url) => Object.values(getMultilingualUrls(url)));
762
+
763
+ const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);
764
+
765
+ // 生成 robots.txt
766
+ const robotsTxt = [
767
+ "User-agent: *",
768
+ "Allow: /",
769
+ ...disallowedPaths.map((path) => `Disallow: ${path}`),
770
+ "",
771
+ `Sitemap: ${SITE_URL}/sitemap.xml`,
772
+ ].join("\n");
773
+
774
+ fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);
775
+
776
+ console.log("SEO files generated successfully.");
777
+ ```
778
+
779
+ 必须安装 `intlayer` 以便脚本可以导入它。为生产环境设置环境变量中的 `SITE_URL`(例如在 CI 中)。
780
+
781
+ > 优先使用 Node ESM 的 `generate-seo.mjs`。如果改用 `generate-seo.js`,请确保在 `package.json` 中设置 `"type": "module"`,或使用 ESM 启用的方式运行 Node。
782
+
783
+ #### 2. 在 Vite 之前运行脚本
784
+
785
+ ```json fileName="package.json"
786
+ {
787
+ "scripts": {
788
+ "dev": "vite",
789
+ "prebuild": "node generate-seo.mjs",
790
+ "build": "vite build",
791
+ "preview": "vite preview"
792
+ }
793
+ }
794
+ ```
795
+
796
+ 如果你使用 pnpm 或 yarn,请相应调整。你也可以从 CI 或其他步骤中调用相同的脚本,如果这适合你的工作流程。
797
+
368
798
  ### 配置 TypeScript
369
799
 
370
800
  确保您的 TypeScript 配置包含自动生成的类型。