@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
@@ -59,36 +59,44 @@ getLocalizedUrl(
59
59
 
60
60
  ## Paramètres
61
61
 
62
- ## Description
63
-
64
- La fonction `getLocalizedUrl` génère une URL localisée en préfixant l'URL donnée avec la locale spécifiée. Elle gère à la fois les URL absolues et relatives, en s'assurant que le préfixe de locale correct est appliqué selon la configuration.
65
-
66
- ---
67
-
68
- ## Paramètres
62
+ ### Paramètres obligatoires
69
63
 
70
64
  - `url: string`
71
- - **Description** : La chaîne URL originale à préfixer avec une locale.
72
- - **Type** : `string`
65
+ - **Description**: La chaîne d'URL originale à préfixer avec une locale.
66
+ - **Type**: `string`
67
+ - **Required**: Yes
73
68
 
74
69
  - `currentLocale: Locales`
75
- - **Description** : La locale actuelle pour laquelle l'URL est localisée.
76
- - **Type** : `Locales`
77
-
78
- - `locales: Locales[]`
79
- - **Description** : Tableau optionnel des locales supportées. Par défaut, les locales configurées dans le projet sont fournies.
80
- - **Type** : `Locales[]`
81
- - **Par défaut** : [`Configuration du projet`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md#middleware)
82
-
83
- - `defaultLocale: Locales`
84
- - **Description** : La locale par défaut de l'application. Par défaut, la locale par défaut configurée dans le projet est utilisée.
85
- - **Type** : `Locales`
86
- - **Par défaut** : [`Configuration du projet`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md#middleware)
87
-
88
- - `prefixDefault: boolean`
89
- - **Description** : Indique s'il faut préfixer l'URL pour la locale par défaut. Par défaut, la valeur configurée dans le projet est utilisée.
90
- - **Type** : `boolean`
91
- - **Par défaut** : [`Configuration du projet`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md#middleware)
70
+ - **Description**: La locale actuelle pour laquelle l'URL est localisée.
71
+ - **Type**: `Locales`
72
+ - **Required**: Yes
73
+
74
+ ### Paramètres Optionnels
75
+
76
+ - `options?: object`
77
+ - **Description**: Objet de configuration pour le comportement de localisation des URL.
78
+ - **Type**: `object`
79
+ - **Required**: Non (Optionnel)
80
+
81
+ - `options.locales?: Locales[]`
82
+ - **Description**: Tableau des locales supportées. Si non fourni, utilise les locales configurées dans la configuration de votre projet.
83
+ - **Type**: `Locales[]`
84
+ - **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md#middleware)
85
+
86
+ - `options.defaultLocale?: Locales`
87
+ - **Description**: La locale par défaut pour l'application. Si non fournie, utilise la locale par défaut configurée dans la configuration de votre projet.
88
+ - **Type**: `Locales`
89
+ - **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md#middleware)
90
+
91
+ - `options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
92
+ - **Description**: Le mode de routage des URL pour la gestion des locales. Si non fourni, utilise le mode configuré dans la configuration de votre projet.
93
+ - **Type**: `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
94
+ - **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md#middleware)
95
+ - **Modes**:
96
+ - `prefix-no-default`: Aucun préfixe pour la locale par défaut, préfixe pour toutes les autres
97
+ - `prefix-all`: Préfixe pour toutes les locales, y compris la locale par défaut
98
+ - `no-prefix`: Aucun préfixe de locale dans l'URL
99
+ - `search-params`: Utiliser les paramètres de requête pour la locale (par ex., `?locale=fr`)
92
100
 
93
101
  ### Retour
94
102
 
@@ -114,7 +122,9 @@ getLocalizedUrl("/about", Locales.ENGLISH);
114
122
  // Output: "/about" ou "/en/about" (en fonction de votre paramètre de mode)
115
123
  ```
116
124
 
117
- ## Exemple d'utilisation
125
+ ### Utilisation avancée (avec paramètres optionnels)
126
+
127
+ Vous pouvez remplacer la configuration par défaut en fournissant le paramètre optionnel `options` :
118
128
 
119
129
  ### URLs relatives
120
130
 
@@ -49,26 +49,12 @@ La fonction `getMultilingualUrls` génère une correspondance d'URLs multilingue
49
49
 
50
50
  ## Paramètres
51
51
 
52
- ## Paramètres
52
+ ### Paramètres obligatoires
53
53
 
54
54
  - `url: string`
55
- - **Description** : La chaîne URL originale à préfixer avec les locales.
56
- - **Type** : `string`
57
-
58
- - `locales: Locales[]`
59
- - **Description** : Tableau optionnel des locales supportées. Par défaut, les locales configurées dans le projet.
60
- - **Type** : `Locales[]`
61
- - **Défaut** : `localesDefault`
62
-
63
- - `defaultLocale: Locales`
64
- - **Description** : La locale par défaut pour l'application. Par défaut, la locale par défaut configurée dans le projet.
65
- - **Type** : `Locales`
66
- - **Défaut** : `defaultLocaleDefault`
67
-
68
- - `prefixDefault: boolean`
69
- - **Description** : Indique s'il faut préfixer la locale par défaut. Par défaut, la valeur configurée dans le projet.
70
- - **Type** : `boolean`
71
- - **Défaut** : `prefixDefaultDefault`
55
+ - **Description**: La chaîne d'URL originale à préfixer avec les locales.
56
+ - **Type**: `string`
57
+ - **Required**: Yes
72
58
 
73
59
  ### Paramètres Optionnels
74
60
 
@@ -104,10 +90,22 @@ La fonction `getMultilingualUrls` génère une correspondance d'URLs multilingue
104
90
 
105
91
  ---
106
92
 
107
- ## Utilisation d'exemple
108
-
109
93
  ## Exemple d'utilisation
110
94
 
95
+ ### Utilisation basique (Utilise la configuration du projet)
96
+
97
+ ```typescript codeFormat={["typescript", "esm", "commonjs"]}
98
+ import { getMultilingualUrls, Locales } from "intlayer";
99
+
100
+ // Utilise la configuration de votre projet pour les locales, defaultLocale et mode
101
+ getMultilingualUrls("/dashboard");
102
+ // Sortie (en supposant que la configuration du projet a en, fr avec le mode 'prefix-no-default'):
103
+ // {
104
+ // en: "/dashboard",
105
+ // fr: "/fr/dashboard"
106
+ // }
107
+ ```
108
+
111
109
  ### URLs relatives
112
110
 
113
111
  ```typescript codeFormat={["typescript", "esm", "commonjs"]}
@@ -48,3 +48,18 @@ import "vite-intlayer";
48
48
  | `intlayerProxy` | Plugin middleware de développement pour gérer la détection de la locale et le routage. | - |
49
49
  | `intlayerMiddleware` | (**Déprécié**) Alias pour `intlayerProxy`. | - |
50
50
  | `intlayerPrune` | Plugin pour effectuer du tree-shaking et élaguer les dictionnaires inutilisés lors du build. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/vite-intlayer/intlayerPrune.md) |
51
+
52
+ ### Utilities
53
+
54
+ | Export | Description | Related Doc |
55
+ | ---------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- |
56
+ | `createIntlayerProxyHandler` | Retourne un middleware Node.js `(req, res, next)` agnostique du framework avec logique de routage de locale. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/vite-intlayer/intlayerProxy.md) |
57
+
58
+ ### Types
59
+
60
+ | Export | Description |
61
+ | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
62
+ | `IntlayerPluginOptions` | Options acceptées par `intlayer()`. Étend `GetConfigurationOptions` avec `compatCallers` et `proxy`. |
63
+ | `IntlayerProxyPluginOptions` | Options acceptées par `intlayerProxy()` et `createIntlayerProxyHandler()`. Inclut `ignore` et `configOptions`. |
64
+ | `IntlayerCompilerOptions` | Options acceptées par `intlayerCompiler()`. Inclut `configOptions` et `compilerConfig`. |
65
+ | `CompatCallerConfig` | Ré-export depuis `@intlayer/babel`. Décrit un motif d'appelant compat-adapter pour l'analyse de l'utilisation des champs. |
@@ -39,11 +39,126 @@ export default defineConfig({
39
39
  });
40
40
  ```
41
41
 
42
- ## Description
42
+ ## Options
43
43
 
44
- Le plugin effectue les tâches suivantes :
44
+ ```ts
45
+ import type { IntlayerPluginOptions } from "vite-intlayer";
46
+ ```
47
+
48
+ `IntlayerPluginOptions` extends `GetConfigurationOptions` (voir `@intlayer/config`) avec les champs supplémentaires suivants :
49
+
50
+ | Option | Type | Default | Description |
51
+ | --------------- | ------------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
52
+ | `compatCallers` | `CompatCallerConfig[]` | `[]` | Patterns d'appelants supplémentaires pour les packages compat-adapter (par ex. `@intlayer/react-i18next`). Transmis à l'analyseur d'utilisation de champs au moment de la compilation. |
53
+ | `proxy` | `{ ignore?: (req) => boolean }` | `undefined` | Options transmises au proxy de routage de locale inclus. Utilisez `ignore` pour exclure des chemins spécifiques (par ex. les routes API) du routage de locale. |
54
+
55
+ Toutes les autres options (`override`, `configFile`, …) sont transmises directement à `getConfiguration()`.
56
+
57
+ ### Exemples
58
+
59
+ #### Ignorer les routes API du routage des locales
60
+
61
+ ```ts
62
+ // vite.config.ts
63
+ import { defineConfig } from "vite";
64
+ import { intlayer } from "vite-intlayer";
65
+
66
+ export default defineConfig({
67
+ plugins: [
68
+ intlayer({
69
+ proxy: {
70
+ ignore: (req) => req.url?.startsWith("/api"),
71
+ },
72
+ }),
73
+ ],
74
+ });
75
+ ```
76
+
77
+ #### Avec un chemin de fichier de configuration personnalisé
78
+
79
+ ```ts
80
+ export default defineConfig({
81
+ plugins: [
82
+ intlayer({
83
+ configFile: "./config/intlayer.config.ts",
84
+ }),
85
+ ],
86
+ });
87
+ ```
88
+
89
+ #### Avec les callers compat-adapter
90
+
91
+ ```ts
92
+ import { intlayer } from "vite-intlayer";
93
+ import { reactI18nextCallerConfig } from "@intlayer/react-i18next/plugin";
94
+
95
+ export default defineConfig({
96
+ plugins: [
97
+ intlayer({
98
+ compatCallers: [reactI18nextCallerConfig],
99
+ }),
100
+ ],
101
+ });
102
+ ```
103
+
104
+ ## Ce que fait le plugin
105
+
106
+ ### 1. Préparation du dictionnaire
107
+
108
+ Avant le démarrage de la construction (et une fois par heure en dev), `intlayer` appelle `prepareIntlayer` pour compiler tous les fichiers `.content.ts` en dictionnaires JSON optimisés stockés dans `.intlayer/`.
109
+
110
+ ### 2. Alias de modules
111
+
112
+ Le plugin ajoute des alias de résolution Vite afin que `import { myDict } from 'intlayer/dictionaries/my-dict'` soit résolu vers le fichier JSON compilé sur le disque. Les builds SSR utilisent `ssr.noExternal` pour s'assurer que tous les packages `@intlayer/*` sont regroupés avec les alias appliqués.
113
+
114
+ ### 3. Dev-server watcher
115
+
116
+ En mode développement, un watcher `chokidar` est démarré. Quand un fichier `.content.ts` change, les dictionnaires sont recompilés et le HMR de Vite propage la mise à jour au navigateur.
117
+
118
+ ### 4. Proxy de routage des locales intégré (v9+)
119
+
120
+ Depuis Intlayer v9, le middleware `intlayerProxy` est enregistré automatiquement à l'intérieur de `intlayer()`. Il gère :
121
+
122
+ - La détection de la locale à partir du préfixe d'URL, des cookies et de l'en-tête `Accept-Language`.
123
+ - Les redirections 301 lorsque la locale détectée ne correspond pas à l'URL actuelle.
124
+ - Les réécritures d'URL internes afin que le framework voie le bon paramètre de route `[locale]`.
125
+
126
+ Le proxy est contrôlé par `routing.enableProxy` (par défaut `true`) dans votre configuration Intlayer. Pour le désactiver complètement :
127
+
128
+ ```ts
129
+ // intlayer.config.ts
130
+ import { defineConfig } from "intlayer";
131
+
132
+ export default defineConfig({
133
+ routing: { enableProxy: false },
134
+ });
135
+ ```
136
+
137
+ Pour personnaliser le comportement du proxy sans appel `intlayerProxy()` séparé, transmettez les options `proxy` au plugin principal :
138
+
139
+ ```ts
140
+ intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api") } });
141
+ ```
142
+
143
+ Consultez la [documentation intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/vite-intlayer/intlayerProxy.md) pour la référence complète du comportement du routage.
144
+
145
+ ### 5. Compilateur fourni (v9+)
146
+
147
+ Quand `compiler.enabled` est `true` **et** `compiler.output` est défini dans votre config Intlayer, `intlayer()` enregistre `intlayerCompiler` automatiquement. Le compilateur extrait les déclarations de contenu inline écrites directement dans les fichiers de composants et les écrit dans les dictionnaires au moment de la transformation. Voir la [documentation intlayerCompiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/packages/vite-intlayer/intlayerCompiler.md).
148
+
149
+ ### 6. Optimisations de build
150
+
151
+ Pendant un build de production, le plugin ajoute :
152
+
153
+ - **intlayerOptimize** – transformation Babel qui réécrit `useIntlayer('key')` → `useDictionary(hash)` et injecte les imports JSON directs.
154
+ - **intlayerPrune** – supprime les champs de contenu inutilisés du JSON du dictionnaire.
155
+ - **intlayerMinify** – compacte le JSON du dictionnaire et optionnellement modifie les noms de champs.
156
+
157
+ Ces derniers sont inactifs en mode développement.
158
+
159
+ ## Aliases dépréciés
45
160
 
46
- 1. **Préparer les dictionnaires** : Il compile les dictionnaires en fichiers optimisés au démarrage du processus de build ou de développement.
47
- 2. **Mode watch** : En mode développement, il surveille les modifications des fichiers de dictionnaire et les recompile automatiquement.
48
- 3. **Alias** : Il fournit des alias pour accéder aux dictionnaires dans votre application.
49
- 4. **Tree-shaking** : Il prend en charge le tree-shaking des traductions non utilisées via le plugin `intlayerPrune`.
161
+ | Export déprécié | Remplacement |
162
+ | ---------------- | ------------ |
163
+ | `intlayerPlugin` | `intlayer` |
164
+ | `intLayerPlugin` | `intlayer` |
@@ -30,16 +30,89 @@ Le plugin Vite `intlayerPrune` permet d'effectuer du tree-shaking et de supprime
30
30
 
31
31
  ## Utilisation
32
32
 
33
+ ### Dans le cadre de `intlayer()` (recommandé)
34
+
35
+ Activez le pruning via votre configuration Intlayer et le plugin principal gère tout :
36
+
37
+ ```ts
38
+ // intlayer.config.ts
39
+ import { defineConfig } from "intlayer";
40
+
41
+ export default defineConfig({
42
+ build: {
43
+ optimize: true, // active à la fois le pruning et la minification
44
+ },
45
+ });
46
+ ```
47
+
48
+ ```ts
49
+ // vite.config.ts
50
+ import { defineConfig } from "vite";
51
+ import { intlayer } from "vite-intlayer";
52
+
53
+ export default defineConfig({
54
+ plugins: [intlayer()],
55
+ });
56
+ ```
57
+
58
+ ### Standalone
59
+
60
+ Si vous composez manuellement la pile de plugins, `intlayerPrune` et `intlayerMinify` partagent un objet `PruneContext` qui doit être créé une seule fois et passé aux deux :
61
+
33
62
  ```ts
34
63
  // vite.config.ts
35
64
  import { defineConfig } from "vite";
36
- import { intlayer, intlayerPrune } from "vite-intlayer";
65
+ import { intlayerPrune, intlayerMinify } from "vite-intlayer";
66
+ import { createPruneContext } from "@intlayer/babel";
67
+ import { getConfiguration } from "@intlayer/config/node";
68
+
69
+ const intlayerConfig = getConfiguration();
70
+ const pruneContext = createPruneContext();
37
71
 
38
72
  export default defineConfig({
39
- plugins: [intlayer(), intlayerPrune()],
73
+ plugins: [
74
+ intlayerPrune(intlayerConfig, pruneContext),
75
+ intlayerMinify(intlayerConfig, pruneContext), // optionnel, lit depuis le même contexte
76
+ ],
40
77
  });
41
78
  ```
42
79
 
43
- ## Description
80
+ ## Comment ça marche
81
+
82
+ ### 1. Analyse d'utilisation (buildStart)
83
+
84
+ Durante `buildStart`, le plugin `intlayerOptimize` (également partie de `intlayer()`) analyse chaque fichier source de composant listé dans `build.filesList`. Pour chaque appel `useIntlayer('key')` ou `getIntlayer('key')`, il enregistre exactement quels champs sont accédés, par exemple :
85
+
86
+ ```ts
87
+ const { title, description } = useIntlayer("myDict");
88
+ // enregistre : myDict → { title, description }
89
+ ```
90
+
91
+ Cela construit `pruneContext.fieldUsageMap` avant que les appels `transform` ne s'exécutent.
92
+
93
+ ### 2. Élagage JSON (transform, enforce: 'pre')
94
+
95
+ Lorsque Vite traite un fichier JSON de dictionnaire compilé, `intlayerPrune` l'intercepte avant la conversion JSON → ESM intégrée de Vite. Il lit la carte d'utilisation des champs à partir de `pruneContext` et supprime tout champ de contenu qui ne figure pas dans l'ensemble d'utilisation enregistré.
96
+
97
+ Deux formes de contenu sont supportées :
98
+
99
+ - **Dictionnaires statiques** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`. Les champs sont élagués par locale à l'intérieur de `translation`.
100
+ - **Dictionnaires dynamiques (par locale)** — flat `{ fieldA: ..., fieldB: ... }`. Les champs sont élagués au niveau supérieur.
101
+
102
+ ### 3. Cas limites
103
+
104
+ Si la structure de contenu d'un dictionnaire ne peut pas être reconnue (par exemple, une forme imbriquée inhabituelle), il est ajouté à `pruneContext.dictionariesWithEdgeCases` et **laissé inchangé**. Un avertissement est enregistré. `intlayerMinify` ignore également ces dictionnaires.
105
+
106
+ ### 4. Field-rename map
107
+
108
+ Lorsque l'élagage réussit, `intlayerPrune` écrit également `pruneContext.dictionaryKeyToFieldRenameMap` — un mapping entre les noms de champs originaux et leurs alias courts. `intlayerMinify` lit cette carte pour renommer les champs dans le JSON de sortie, et la passe de renommage Babel d'`intlayerOptimize` met à jour les accès aux propriétés dans les fichiers sources en conséquence.
109
+
110
+ ## Conditions d'activation
111
+
112
+ `intlayerPrune` est actif **uniquement** quand toutes les conditions suivantes sont vraies :
113
+
114
+ 1. La commande Vite est `build`.
115
+ 2. `build.optimize` est `true` (ou `undefined`, qui est `true` par défaut pour les builds).
116
+ 3. `build.purge` est `true` dans votre configuration Intlayer.
44
117
 
45
- Le plugin analyse votre code source pour identifier quelles clés de dictionnaire sont réellement utilisées. Il supprime ensuite tout contenu inutilisé des fichiers de dictionnaire inclus dans le bundle. Cela est particulièrement utile pour les grands projets comportant de nombreux dictionnaires où seul un sous-ensemble est utilisé dans des pages ou composants spécifiques.
118
+ Il est automatiquement **désactivé** quand `editor.enabled` est `true` car l'éditeur a besoin du contenu complet du dictionnaire.
@@ -370,21 +370,6 @@ curl -fsSL https://intlayer.org/install.sh | sh
370
370
 
371
371
  Le programme d'installation télécharge un `docker-compose.yml` et un `.env`, génère automatiquement les secrets requis et exécute `docker compose up -d`. Tout — le tableau de bord, l'API, la base de données, le stockage d'objets et les e-mails transactionnels — s'exécute localement dans des conteneurs.
372
372
 
373
- ### Services inclus
374
-
375
- | Service | Objectif |
376
- | --------------------------------------- | ------------------------------------------------------------------------------------ |
377
- | **app** (TanStack Start) | Interface du tableau de bord sur le port `3000` |
378
- | **backend** (Fastify/Bun) | API REST sur le port `3100` |
379
- | **MongoDB 7** (single-node replica set) | Base de données principale |
380
- | **Redis 7** | Files d'attente de tâches et mise en cache |
381
- | **MinIO** | Stockage d'objets compatible S3 (avatars, captures d'écran) |
382
- | **Mailpit** | Puits SMTP local + interface web pour les e-mails transactionnels sur le port `8025` |
383
-
384
- Chromium (utilisé pour la génération de captures d'écran Puppeteer) est intégré dans l'image du backend — aucun conteneur supplémentaire n'est nécessaire.
385
-
386
- ---
387
-
388
373
  ## Notes de migration depuis la v8
389
374
 
390
375
  Si vous effectuez une mise à niveau depuis la v8, notez que la v9 n'inclut pas de changements majeurs (breaking changes). Voici cependant les changements clés :
@@ -80,6 +80,18 @@ Une fois la stack démarrée, ouvrez **http://localhost:3000** et créez votre p
80
80
 
81
81
  ---
82
82
 
83
+ ## Configuration initiale
84
+
85
+ Sur une instance vierge (base de données vide), l'ouverture du dashboard vous redirige vers la page **`/init`** :
86
+
87
+ 1. Créez le premier compte. Comme la collection users est vide, ce compte est automatiquement promu **super admin**.
88
+ 2. Un email de vérification est envoyé (via Resend). La vérification d'email est **obligatoire** — c'est pourquoi `RESEND_API_KEY` doit être défini avant de commencer.
89
+ 3. Cliquez sur le lien dans l'email, puis connectez-vous.
90
+
91
+ Une fois qu'un admin existe, `/init` redirige vers la page de connexion standard.
92
+
93
+ ---
94
+
83
95
  ## Services
84
96
 
85
97
  | Service | Image | Port(s) hôte | Objectif |
@@ -99,7 +111,16 @@ Les ports internes (mongo, redis) ne sont pas exposés à l'hôte par défaut.
99
111
 
100
112
  ## Variables d'environnement
101
113
 
102
- L'installateur génère un fichier `.env` prêt à l'emploi. Le tableau ci-dessous décrit chaque variable.
114
+ ### Requis
115
+
116
+ | Variable | Exemple | Description |
117
+ | ---------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
118
+ | `DB_ID` | `intlayer` | Utilisateur MongoDB Atlas |
119
+ | `DB_MDP` | _(votre mot de passe)_ | Mot de passe MongoDB Atlas |
120
+ | `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | Hôte du cluster MongoDB Atlas (utilisé dans l'URI `mongodb+srv://`) |
121
+ | `BETTER_AUTH_SECRET` | _(généré)_ | Secret de 32 octets pour la signature de session |
122
+ | `S3_SECRET_ACCESS_KEY` | _(généré)_ | Secret pour le MinIO intégré |
123
+ | `RESEND_API_KEY` | _(votre clé)_ | Email transactionnel via Resend. Requis pour la première configuration sauf si vous configurez un mailer SMTP global (voir [Global mailer](#global-mailer)) |
103
124
 
104
125
  ### Requis (auto-généré ou demandé)
105
126
 
@@ -141,6 +162,26 @@ L'installateur génère un fichier `.env` prêt à l'emploi. Le tableau ci-desso
141
162
 
142
163
  ---
143
164
 
165
+ ### Mailer global
166
+
167
+ Par défaut, tous les emails transactionnels sont envoyés via Resend en utilisant `RESEND_API_KEY`. Les déploiements auto-hébergés peuvent à la place router **tous** les emails — y compris les emails non-organisationnels tels que les réinitialisations de mot de passe et les liens magiques — via un mailer global configuré avec des variables d'environnement.
168
+
169
+ Définissez `MAIL_PROVIDER` pour l'activer. S'il n'est pas défini, le mailer Resend par défaut est utilisé.
170
+
171
+ | Variable | Exemple | Description |
172
+ | -------------------- | ------------------------------ | ---------------------------------------------------------------------------------------- |
173
+ | `MAIL_PROVIDER` | `smtp` | Transport global : `smtp` ou `resend`. Laissez vide pour utiliser les valeurs par défaut |
174
+ | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | En-tête d'expéditeur. Accepte une adresse simple ou un format `Nom <email>` |
175
+ | `MAIL_SMTP_HOST` | `smtp.acme.com` | Hôte SMTP (requis quand `MAIL_PROVIDER=smtp`) |
176
+ | `MAIL_SMTP_PORT` | `587` | Port SMTP (par défaut `587`) |
177
+ | `MAIL_SMTP_SECURE` | `false` | TLS implicite. Définissez `true` pour le port `465` |
178
+ | `MAIL_SMTP_USER` | _(votre utilisateur)_ | Nom d'utilisateur SMTP (optionnel ; omettez pour les relais non authentifiés) |
179
+ | `MAIL_SMTP_PASSWORD` | _(votre mot de passe)_ | Mot de passe SMTP |
180
+
181
+ > Priorité : le mailer propre d'une organisation (configuré depuis le tableau de bord **Organization**) a priorité sur le mailer global, qui a lui-même priorité sur la clé Resend par défaut.
182
+
183
+ ---
184
+
144
185
  ## Connexion de votre projet Intlayer
145
186
 
146
187
  Une fois la stack en cours d'exécution, pointez votre projet vers le backend et le tableau de bord auto-hébergés au lieu de `intlayer.org`.
@@ -259,47 +300,11 @@ docker run --rm \
259
300
 
260
301
  ---
261
302
 
262
- ## Utilisation d'un proxy inverse (Nginx / Caddy)
263
-
264
- Pour les déploiements de production, placez un proxy inverse devant les conteneurs de l'application et du backend au lieu de les exposer directement.
303
+ ## Limitations
265
304
 
266
- ### Exemple Nginx
267
-
268
- ```nginx
269
- server {
270
- listen 80;
271
- server_name cms.example.com;
272
-
273
- location / {
274
- proxy_pass http://localhost:3000;
275
- proxy_set_header Host $host;
276
- proxy_set_header X-Real-IP $remote_addr;
277
- }
278
- }
279
-
280
- server {
281
- listen 80;
282
- server_name api.example.com;
283
-
284
- location / {
285
- proxy_pass http://localhost:3100;
286
- proxy_set_header Host $host;
287
- proxy_set_header X-Real-IP $remote_addr;
288
- }
289
- }
290
- ```
291
-
292
- Mettez à jour les variables `.env` suivantes pour qu'elles correspondent à vos domaines publics :
293
-
294
- ```sh
295
- BACKEND_URL=https://api.example.com
296
- APP_URL=https://cms.example.com
297
- DOMAIN=example.com
298
- VITE_BACKEND_URL=https://api.example.com
299
- VITE_DOMAIN=example.com
300
- ```
301
-
302
- > Les variables `VITE_*` sont intégrées à l'image du tableau de bord lors de la construction. Si vous les modifiez après la construction de l'image, vous devez reconstruire l'image `app` (`docker compose build app`) ou utiliser l'injection de configuration au moment de l'exécution.
305
+ - **MongoDB must be external (Atlas).** The backend connects only over `mongodb+srv://` (built from `DB_ID` / `DB_MDP` / `DB_CLUSTER`), so a plain `mongodb://host:27017` — including the container's own bundled `mongod` — cannot be used. Provide a MongoDB Atlas cluster.
306
+ - **No custom domain.** All browser-facing `VITE_*` URLs are inlined into the app at build time, and the published image ships with `localhost` values. The dashboard must be accessed at `http://localhost:3000`; serving it on a public domain would require rebuilding the image with the target URLs baked in and is not supported out of the box.
307
+ - **Email requires a working mailer.** First-run setup enforces email verification, so either `RESEND_API_KEY` or a [global SMTP mailer](#global-mailer) (`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`) must be configured. After the first admin signs in, each organization can also configure its own SMTP or Resend mailer from the dashboard.
303
308
 
304
309
  ---
305
310
 
@@ -324,14 +329,6 @@ docker compose build app
324
329
  docker compose up -d app
325
330
  ```
326
331
 
327
- ### Les e-mails ne sont pas envoyés
328
-
329
- Par défaut, tous les e-mails sortants sont capturés par Mailpit. Ouvrez `http://localhost:8025` pour voir les messages envoyés. Pour envoyer de vrais e-mails, définissez `MAIL_PROVIDER=resend` et `RESEND_API_KEY=<your-key>` dans `.env`, puis redémarrez le backend :
330
-
331
- ```sh
332
- docker compose restart backend
333
- ```
334
-
335
332
  ### Bucket MinIO manquant
336
333
 
337
334
  Si le service ponctuel `minio-init` n'a pas fonctionné (ou a fonctionné avant que MinIO ne soit prêt), créez le bucket manuellement :