@intlayer/docs 9.1.3 → 9.3.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 (482) hide show
  1. package/blog/ar/index.md +1 -1
  2. package/blog/ar/rag_powered_documentation_assistant.md +7 -0
  3. package/blog/de/index.md +1 -1
  4. package/blog/de/rag_powered_documentation_assistant.md +6 -0
  5. package/blog/en/index.md +1 -1
  6. package/blog/en-GB/index.md +1 -1
  7. package/blog/en-GB/rag_powered_documentation_assistant.md +6 -0
  8. package/blog/es/index.md +1 -1
  9. package/blog/es/rag_powered_documentation_assistant.md +7 -0
  10. package/blog/fr/i18n_meaning.md +7 -1
  11. package/blog/fr/index.md +1 -1
  12. package/blog/fr/list_i18n_technologies/frameworks/angular.md +5 -1
  13. package/blog/fr/rag_powered_documentation_assistant.md +6 -0
  14. package/blog/hi/index.md +1 -1
  15. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +119 -42
  16. package/blog/hi/rag_powered_documentation_assistant.md +7 -0
  17. package/blog/id/index.md +1 -1
  18. package/blog/id/rag_powered_documentation_assistant.md +6 -0
  19. package/blog/it/index.md +1 -1
  20. package/blog/it/rag_powered_documentation_assistant.md +6 -0
  21. package/blog/ja/index.md +1 -1
  22. package/blog/ja/rag_powered_documentation_assistant.md +7 -0
  23. package/blog/ko/index.md +1 -1
  24. package/blog/ko/list_i18n_technologies/frameworks/react.md +7 -7
  25. package/blog/ko/rag_powered_documentation_assistant.md +6 -0
  26. package/blog/pl/index.md +1 -1
  27. package/blog/pl/rag_powered_documentation_assistant.md +6 -0
  28. package/blog/pt/index.md +1 -1
  29. package/blog/pt/rag_powered_documentation_assistant.md +6 -0
  30. package/blog/ru/index.md +1 -1
  31. package/blog/ru/rag_powered_documentation_assistant.md +7 -0
  32. package/blog/tr/intlayer_with_react-intl.md +3 -1
  33. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +175 -42
  34. package/blog/tr/rag_powered_documentation_assistant.md +6 -0
  35. package/blog/uk/index.md +1 -1
  36. package/blog/uk/rag_powered_documentation_assistant.md +6 -0
  37. package/blog/vi/index.md +1 -1
  38. package/blog/vi/rag_powered_documentation_assistant.md +6 -0
  39. package/blog/zh/index.md +1 -1
  40. package/blog/zh/intlayer_with_i18next.md +87 -28
  41. package/blog/zh/intlayer_with_next-i18next.md +86 -29
  42. package/blog/zh/intlayer_with_next-intl.md +88 -28
  43. package/blog/zh/intlayer_with_react-i18next.md +87 -28
  44. package/blog/zh/intlayer_with_react-intl.md +88 -27
  45. package/blog/zh/intlayer_with_vue-i18n.md +117 -8
  46. package/blog/zh/rag_powered_documentation_assistant.md +6 -0
  47. package/dist/cjs/common.cjs +24 -1
  48. package/dist/cjs/common.cjs.map +1 -1
  49. package/dist/cjs/generated/blog.entry.cjs +58 -31
  50. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  51. package/dist/cjs/generated/docs.entry.cjs +265 -218
  52. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  53. package/dist/cjs/generated/frequentQuestions.entry.cjs +48 -21
  54. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  55. package/dist/cjs/generated/legal.entry.cjs +33 -6
  56. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  57. package/dist/esm/common.mjs +24 -1
  58. package/dist/esm/common.mjs.map +1 -1
  59. package/dist/esm/generated/blog.entry.mjs +58 -31
  60. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  61. package/dist/esm/generated/docs.entry.mjs +265 -218
  62. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  63. package/dist/esm/generated/frequentQuestions.entry.mjs +48 -21
  64. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  65. package/dist/esm/generated/legal.entry.mjs +33 -6
  66. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  67. package/dist/types/common.d.ts.map +1 -1
  68. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  69. package/dist/types/generated/docs.entry.d.ts +1 -0
  70. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  71. package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
  72. package/dist/types/generated/legal.entry.d.ts.map +1 -1
  73. package/docs/ar/analytics.md +222 -0
  74. package/docs/ar/autoFill.md +28 -9
  75. package/docs/ar/bundle_optimization.md +58 -25
  76. package/docs/ar/configuration.md +25 -8
  77. package/docs/ar/dictionary/file.md +3 -1
  78. package/docs/ar/dictionary/nesting.md +47 -30
  79. package/docs/ar/formatters.md +148 -193
  80. package/docs/ar/intlayer_CMS.md +152 -0
  81. package/docs/ar/intlayer_with_angular_21.md +9 -9
  82. package/docs/ar/intlayer_with_nextjs_14.md +1 -28
  83. package/docs/ar/intlayer_with_nextjs_15.md +1 -33
  84. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +40 -83
  85. package/docs/ar/intlayer_with_solid_start.md +1078 -0
  86. package/docs/ar/intlayer_with_vite+vue.md +1 -3
  87. package/docs/ar/live-sync.md +4 -0
  88. package/docs/ar/packages/intlayer/getLocalizedUrl.md +26 -24
  89. package/docs/ar/packages/intlayer/getMultilingualUrls.md +4 -18
  90. package/docs/ar/packages/react-intlayer/useDictionary.md +4 -21
  91. package/docs/ar/packages/react-intlayer/useIntlayer.md +2 -2
  92. package/docs/ar/packages/vite-intlayer/exports.md +15 -0
  93. package/docs/ar/packages/vite-intlayer/intlayer.md +121 -6
  94. package/docs/ar/packages/vite-intlayer/intlayerPrune.md +70 -3
  95. package/docs/ar/releases/v9.md +0 -37
  96. package/docs/ar/self_hosting.md +46 -49
  97. package/docs/bn/bundle_optimization.md +58 -25
  98. package/docs/bn/configuration.md +25 -8
  99. package/docs/bn/intlayer_with_angular_21.md +9 -9
  100. package/docs/cs/bundle_optimization.md +58 -25
  101. package/docs/cs/configuration.md +25 -8
  102. package/docs/cs/intlayer_with_angular_21.md +9 -9
  103. package/docs/de/analytics.md +222 -0
  104. package/docs/de/autoFill.md +28 -9
  105. package/docs/de/bundle_optimization.md +58 -25
  106. package/docs/de/configuration.md +25 -8
  107. package/docs/de/dictionary/file.md +3 -1
  108. package/docs/de/dictionary/nesting.md +47 -31
  109. package/docs/de/formatters.md +208 -334
  110. package/docs/de/intlayer_CMS.md +66 -15
  111. package/docs/de/intlayer_with_angular_21.md +9 -9
  112. package/docs/de/intlayer_with_nestjs.md +11 -7
  113. package/docs/de/intlayer_with_nextjs_14.md +1 -28
  114. package/docs/de/intlayer_with_nextjs_15.md +1 -33
  115. package/docs/de/intlayer_with_solid_start.md +1078 -0
  116. package/docs/de/intlayer_with_vite+vue.md +1 -3
  117. package/docs/de/live-sync.md +4 -0
  118. package/docs/de/packages/intlayer/getLocalizedUrl.md +33 -25
  119. package/docs/de/packages/intlayer/getMultilingualUrls.md +4 -18
  120. package/docs/de/packages/react-intlayer/useDictionary.md +2 -5
  121. package/docs/de/packages/vite-intlayer/exports.md +15 -0
  122. package/docs/de/packages/vite-intlayer/intlayer.md +121 -6
  123. package/docs/de/packages/vite-intlayer/intlayerPrune.md +77 -4
  124. package/docs/de/releases/v9.md +0 -15
  125. package/docs/de/self_hosting.md +46 -50
  126. package/docs/en/bundle_optimization.md +51 -23
  127. package/docs/en/cli/doc-review.md +13 -2
  128. package/docs/en/configuration.md +24 -15
  129. package/docs/en/intlayer_with_angular_21.md +9 -9
  130. package/docs/en/intlayer_with_solid_start.md +1091 -0
  131. package/docs/en/intlayer_with_vite+solid.md +12 -0
  132. package/docs/en/live-sync.md +4 -0
  133. package/docs/en-GB/analytics.md +222 -0
  134. package/docs/en-GB/autoFill.md +26 -7
  135. package/docs/en-GB/bundle_optimization.md +58 -25
  136. package/docs/en-GB/configuration.md +25 -8
  137. package/docs/en-GB/dictionary/file.md +2 -0
  138. package/docs/en-GB/dictionary/nesting.md +64 -205
  139. package/docs/en-GB/formatters.md +146 -181
  140. package/docs/en-GB/intlayer_CMS.md +152 -0
  141. package/docs/en-GB/intlayer_with_angular_21.md +9 -9
  142. package/docs/en-GB/intlayer_with_nestjs.md +6 -2
  143. package/docs/en-GB/intlayer_with_nextjs_14.md +0 -27
  144. package/docs/en-GB/intlayer_with_nextjs_15.md +1 -33
  145. package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +40 -82
  146. package/docs/en-GB/intlayer_with_solid_start.md +1078 -0
  147. package/docs/en-GB/intlayer_with_vite+vue.md +1 -3
  148. package/docs/en-GB/live-sync.md +4 -0
  149. package/docs/en-GB/packages/intlayer/getLocalizedUrl.md +30 -22
  150. package/docs/en-GB/packages/intlayer/getMultilingualUrls.md +16 -48
  151. package/docs/en-GB/packages/vite-intlayer/exports.md +15 -0
  152. package/docs/en-GB/packages/vite-intlayer/intlayer.md +121 -6
  153. package/docs/en-GB/packages/vite-intlayer/intlayerPrune.md +77 -4
  154. package/docs/en-GB/self_hosting.md +60 -49
  155. package/docs/es/analytics.md +222 -0
  156. package/docs/es/autoFill.md +28 -9
  157. package/docs/es/bundle_optimization.md +58 -25
  158. package/docs/es/configuration.md +24 -7
  159. package/docs/es/dictionary/file.md +3 -1
  160. package/docs/es/dictionary/nesting.md +47 -30
  161. package/docs/es/formatters.md +114 -168
  162. package/docs/es/intlayer_CMS.md +35 -10
  163. package/docs/es/intlayer_with_angular_21.md +9 -9
  164. package/docs/es/intlayer_with_nextjs_14.md +1 -28
  165. package/docs/es/intlayer_with_nextjs_15.md +1 -33
  166. package/docs/es/intlayer_with_solid_start.md +1078 -0
  167. package/docs/es/live-sync.md +4 -0
  168. package/docs/es/packages/intlayer/getLocalizedUrl.md +31 -23
  169. package/docs/es/packages/intlayer/getMultilingualUrls.md +4 -18
  170. package/docs/es/packages/vite-intlayer/exports.md +15 -0
  171. package/docs/es/packages/vite-intlayer/intlayer.md +121 -6
  172. package/docs/es/packages/vite-intlayer/intlayerPrune.md +69 -2
  173. package/docs/es/releases/v9.md +0 -15
  174. package/docs/es/self_hosting.md +46 -49
  175. package/docs/fr/analytics.md +222 -0
  176. package/docs/fr/autoFill.md +27 -8
  177. package/docs/fr/bundle_optimization.md +58 -25
  178. package/docs/fr/configuration.md +25 -8
  179. package/docs/fr/dictionary/file.md +2 -0
  180. package/docs/fr/dictionary/nesting.md +37 -184
  181. package/docs/fr/formatters.md +95 -236
  182. package/docs/fr/intlayer_CMS.md +66 -15
  183. package/docs/fr/intlayer_with_angular_21.md +9 -9
  184. package/docs/fr/intlayer_with_nextjs_14.md +1 -28
  185. package/docs/fr/intlayer_with_nextjs_15.md +1 -33
  186. package/docs/fr/intlayer_with_solid_start.md +1078 -0
  187. package/docs/fr/live-sync.md +4 -0
  188. package/docs/fr/packages/intlayer/getLocalizedUrl.md +37 -27
  189. package/docs/fr/packages/intlayer/getMultilingualUrls.md +18 -20
  190. package/docs/fr/packages/vite-intlayer/exports.md +15 -0
  191. package/docs/fr/packages/vite-intlayer/intlayer.md +121 -6
  192. package/docs/fr/packages/vite-intlayer/intlayerPrune.md +77 -4
  193. package/docs/fr/releases/v9.md +0 -15
  194. package/docs/fr/self_hosting.md +46 -49
  195. package/docs/hi/analytics.md +222 -0
  196. package/docs/hi/autoFill.md +28 -9
  197. package/docs/hi/bundle_optimization.md +58 -25
  198. package/docs/hi/configuration.md +25 -8
  199. package/docs/hi/dictionary/file.md +3 -1
  200. package/docs/hi/dictionary/nesting.md +47 -30
  201. package/docs/hi/formatters.md +233 -334
  202. package/docs/hi/how_works_intlayer.md +3 -1
  203. package/docs/hi/intlayer_CMS.md +152 -0
  204. package/docs/hi/intlayer_with_angular_21.md +9 -9
  205. package/docs/hi/intlayer_with_nestjs.md +11 -7
  206. package/docs/hi/intlayer_with_nextjs_14.md +1 -28
  207. package/docs/hi/intlayer_with_nextjs_15.md +1 -33
  208. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +40 -83
  209. package/docs/hi/intlayer_with_solid_start.md +1077 -0
  210. package/docs/hi/intlayer_with_vite+preact.md +56 -49
  211. package/docs/hi/intlayer_with_vite+react.md +48 -41
  212. package/docs/hi/intlayer_with_vite+solid.md +32 -41
  213. package/docs/hi/intlayer_with_vite+vue.md +49 -44
  214. package/docs/hi/live-sync.md +4 -0
  215. package/docs/hi/packages/intlayer/getLocalizedUrl.md +26 -24
  216. package/docs/hi/packages/intlayer/getMultilingualUrls.md +4 -18
  217. package/docs/hi/packages/next-intlayer/t.md +33 -1
  218. package/docs/hi/packages/react-intlayer/useDictionary.md +4 -21
  219. package/docs/hi/packages/vite-intlayer/exports.md +15 -0
  220. package/docs/hi/packages/vite-intlayer/intlayer.md +121 -6
  221. package/docs/hi/packages/vite-intlayer/intlayerPrune.md +78 -5
  222. package/docs/hi/plugins/sync-json.md +9 -9
  223. package/docs/hi/releases/v9.md +0 -15
  224. package/docs/hi/self_hosting.md +38 -51
  225. package/docs/id/analytics.md +223 -0
  226. package/docs/id/bundle_optimization.md +58 -25
  227. package/docs/id/configuration.md +25 -8
  228. package/docs/id/dictionary/nesting.md +37 -184
  229. package/docs/id/formatters.md +208 -305
  230. package/docs/id/intlayer_CMS.md +164 -0
  231. package/docs/id/intlayer_with_angular_21.md +9 -9
  232. package/docs/id/intlayer_with_nextjs_14.md +1 -26
  233. package/docs/id/intlayer_with_react_router_v7_fs_routes.md +70 -63
  234. package/docs/id/intlayer_with_solid_start.md +1078 -0
  235. package/docs/id/live-sync.md +4 -0
  236. package/docs/id/packages/intlayer/getMultilingualUrls.md +4 -18
  237. package/docs/id/packages/react-intlayer/useIntlayer.md +2 -2
  238. package/docs/id/packages/vite-intlayer/exports.md +15 -0
  239. package/docs/id/packages/vite-intlayer/intlayer.md +121 -6
  240. package/docs/id/packages/vite-intlayer/intlayerPrune.md +78 -5
  241. package/docs/id/releases/v9.md +12 -0
  242. package/docs/id/self_hosting.md +61 -50
  243. package/docs/it/analytics.md +222 -0
  244. package/docs/it/autoFill.md +27 -8
  245. package/docs/it/bundle_optimization.md +58 -25
  246. package/docs/it/configuration.md +25 -8
  247. package/docs/it/dictionary/file.md +3 -1
  248. package/docs/it/dictionary/nesting.md +47 -30
  249. package/docs/it/formatters.md +114 -168
  250. package/docs/it/intlayer_CMS.md +66 -15
  251. package/docs/it/intlayer_with_angular_21.md +9 -9
  252. package/docs/it/intlayer_with_nestjs.md +11 -7
  253. package/docs/it/intlayer_with_nextjs_14.md +1 -28
  254. package/docs/it/intlayer_with_nextjs_15.md +1 -33
  255. package/docs/it/intlayer_with_solid_start.md +1078 -0
  256. package/docs/it/intlayer_with_vite+vue.md +1 -3
  257. package/docs/it/live-sync.md +4 -0
  258. package/docs/it/packages/intlayer/getLocalizedUrl.md +34 -26
  259. package/docs/it/packages/intlayer/getMultilingualUrls.md +4 -18
  260. package/docs/it/packages/react-intlayer/useDictionary.md +4 -21
  261. package/docs/it/packages/vite-intlayer/exports.md +15 -0
  262. package/docs/it/packages/vite-intlayer/intlayer.md +121 -6
  263. package/docs/it/packages/vite-intlayer/intlayerPrune.md +77 -4
  264. package/docs/it/releases/v9.md +0 -15
  265. package/docs/it/self_hosting.md +60 -49
  266. package/docs/ja/analytics.md +222 -0
  267. package/docs/ja/autoFill.md +28 -9
  268. package/docs/ja/bundle_optimization.md +58 -25
  269. package/docs/ja/configuration.md +25 -8
  270. package/docs/ja/dictionary/content_file.md +15 -7
  271. package/docs/ja/dictionary/file.md +3 -1
  272. package/docs/ja/dictionary/nesting.md +47 -30
  273. package/docs/ja/formatters.md +133 -187
  274. package/docs/ja/intlayer_visual_editor.md +3 -1
  275. package/docs/ja/intlayer_with_angular_21.md +6 -6
  276. package/docs/ja/intlayer_with_nestjs.md +2 -12
  277. package/docs/ja/intlayer_with_nextjs_14.md +1 -28
  278. package/docs/ja/intlayer_with_nextjs_15.md +1 -33
  279. package/docs/ja/intlayer_with_react_router_v7.md +456 -20
  280. package/docs/ja/intlayer_with_solid_start.md +1078 -0
  281. package/docs/ja/intlayer_with_vite+preact.md +73 -41
  282. package/docs/ja/intlayer_with_vite+vue.md +1 -3
  283. package/docs/ja/live-sync.md +4 -0
  284. package/docs/ja/mcp_server.md +3 -9
  285. package/docs/ja/packages/intlayer/getLocalizedUrl.md +26 -24
  286. package/docs/ja/packages/intlayer/getMultilingualUrls.md +3 -17
  287. package/docs/ja/packages/vite-intlayer/exports.md +15 -0
  288. package/docs/ja/packages/vite-intlayer/intlayer.md +121 -6
  289. package/docs/ja/packages/vite-intlayer/intlayerPrune.md +79 -6
  290. package/docs/ja/releases/v9.md +12 -0
  291. package/docs/ja/self_hosting.md +46 -50
  292. package/docs/ko/analytics.md +222 -0
  293. package/docs/ko/autoFill.md +28 -9
  294. package/docs/ko/bundle_optimization.md +58 -25
  295. package/docs/ko/configuration.md +25 -8
  296. package/docs/ko/dictionary/file.md +3 -1
  297. package/docs/ko/dictionary/nesting.md +47 -30
  298. package/docs/ko/formatters.md +133 -187
  299. package/docs/ko/intlayer_with_angular_21.md +9 -9
  300. package/docs/ko/intlayer_with_lynx+react.md +133 -39
  301. package/docs/ko/intlayer_with_nextjs_14.md +1 -28
  302. package/docs/ko/intlayer_with_nextjs_15.md +1 -33
  303. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +40 -188
  304. package/docs/ko/intlayer_with_solid_start.md +1078 -0
  305. package/docs/ko/intlayer_with_vite+preact.md +57 -23
  306. package/docs/ko/intlayer_with_vite+vue.md +1 -3
  307. package/docs/ko/live-sync.md +4 -0
  308. package/docs/ko/packages/intlayer/getLocalizedUrl.md +26 -24
  309. package/docs/ko/packages/intlayer/getMultilingualUrls.md +4 -18
  310. package/docs/ko/packages/vite-intlayer/exports.md +15 -0
  311. package/docs/ko/packages/vite-intlayer/intlayer.md +121 -6
  312. package/docs/ko/packages/vite-intlayer/intlayerPrune.md +79 -6
  313. package/docs/ko/releases/v9.md +12 -0
  314. package/docs/ko/self_hosting.md +60 -49
  315. package/docs/nl/bundle_optimization.md +58 -25
  316. package/docs/nl/configuration.md +25 -8
  317. package/docs/nl/intlayer_with_angular_21.md +9 -9
  318. package/docs/pl/analytics.md +220 -0
  319. package/docs/pl/bundle_optimization.md +58 -25
  320. package/docs/pl/configuration.md +25 -8
  321. package/docs/pl/dictionary/nesting.md +47 -30
  322. package/docs/pl/formatters.md +208 -305
  323. package/docs/pl/intlayer_CMS.md +152 -0
  324. package/docs/pl/intlayer_with_angular_21.md +9 -9
  325. package/docs/pl/intlayer_with_nextjs_14.md +1 -26
  326. package/docs/pl/intlayer_with_solid_start.md +1078 -0
  327. package/docs/pl/live-sync.md +4 -0
  328. package/docs/pl/packages/intlayer/getMultilingualUrls.md +4 -18
  329. package/docs/pl/packages/react-intlayer/useDictionary.md +2 -19
  330. package/docs/pl/packages/vite-intlayer/exports.md +15 -0
  331. package/docs/pl/packages/vite-intlayer/intlayer.md +121 -6
  332. package/docs/pl/packages/vite-intlayer/intlayerPrune.md +77 -4
  333. package/docs/pl/releases/v9.md +0 -15
  334. package/docs/pl/self_hosting.md +60 -49
  335. package/docs/pt/analytics.md +222 -0
  336. package/docs/pt/bundle_optimization.md +58 -24
  337. package/docs/pt/configuration.md +25 -8
  338. package/docs/pt/dictionary/file.md +3 -1
  339. package/docs/pt/dictionary/nesting.md +47 -30
  340. package/docs/pt/formatters.md +112 -168
  341. package/docs/pt/intlayer_CMS.md +66 -15
  342. package/docs/pt/intlayer_with_angular_21.md +9 -9
  343. package/docs/pt/intlayer_with_astro_lit.md +26 -1
  344. package/docs/pt/intlayer_with_nextjs_14.md +1 -28
  345. package/docs/pt/intlayer_with_nextjs_15.md +1 -33
  346. package/docs/pt/intlayer_with_solid_start.md +1078 -0
  347. package/docs/pt/intlayer_with_vite+vue.md +1 -3
  348. package/docs/pt/live-sync.md +4 -0
  349. package/docs/pt/packages/intlayer/getLocalizedUrl.md +34 -26
  350. package/docs/pt/packages/intlayer/getMultilingualUrls.md +4 -18
  351. package/docs/pt/packages/vite-intlayer/exports.md +15 -0
  352. package/docs/pt/packages/vite-intlayer/intlayer.md +121 -6
  353. package/docs/pt/packages/vite-intlayer/intlayerPrune.md +78 -6
  354. package/docs/pt/releases/v9.md +0 -15
  355. package/docs/pt/self_hosting.md +60 -49
  356. package/docs/ru/analytics.md +222 -0
  357. package/docs/ru/autoFill.md +27 -8
  358. package/docs/ru/bundle_optimization.md +58 -25
  359. package/docs/ru/configuration.md +25 -8
  360. package/docs/ru/dictionary/file.md +3 -1
  361. package/docs/ru/dictionary/nesting.md +64 -205
  362. package/docs/ru/formatters.md +108 -128
  363. package/docs/ru/intlayer_with_angular_21.md +9 -9
  364. package/docs/ru/intlayer_with_nextjs_14.md +1 -28
  365. package/docs/ru/intlayer_with_nextjs_15.md +1 -33
  366. package/docs/ru/intlayer_with_solid_start.md +1078 -0
  367. package/docs/ru/intlayer_with_vite+vue.md +1 -3
  368. package/docs/ru/live-sync.md +4 -0
  369. package/docs/ru/packages/intlayer/getLocalizedUrl.md +34 -26
  370. package/docs/ru/packages/intlayer/getMultilingualUrls.md +4 -18
  371. package/docs/ru/packages/react-intlayer/useDictionary.md +4 -21
  372. package/docs/ru/packages/vite-intlayer/exports.md +15 -0
  373. package/docs/ru/packages/vite-intlayer/intlayer.md +121 -6
  374. package/docs/ru/packages/vite-intlayer/intlayerPrune.md +77 -4
  375. package/docs/ru/releases/v9.md +0 -15
  376. package/docs/ru/self_hosting.md +60 -49
  377. package/docs/tr/analytics.md +222 -0
  378. package/docs/tr/autoFill.md +28 -9
  379. package/docs/tr/bundle_optimization.md +58 -25
  380. package/docs/tr/configuration.md +25 -8
  381. package/docs/tr/dictionary/file.md +2 -0
  382. package/docs/tr/dictionary/nesting.md +47 -30
  383. package/docs/tr/formatters.md +144 -190
  384. package/docs/tr/intlayer_CMS.md +152 -0
  385. package/docs/tr/intlayer_with_angular_21.md +9 -9
  386. package/docs/tr/intlayer_with_nestjs.md +2 -12
  387. package/docs/tr/intlayer_with_nextjs_15.md +1 -33
  388. package/docs/tr/intlayer_with_solid_start.md +1078 -0
  389. package/docs/tr/intlayer_with_vite+vue.md +1 -3
  390. package/docs/tr/live-sync.md +4 -0
  391. package/docs/tr/packages/intlayer/getMultilingualUrls.md +4 -18
  392. package/docs/tr/packages/vite-intlayer/exports.md +15 -0
  393. package/docs/tr/packages/vite-intlayer/intlayer.md +121 -6
  394. package/docs/tr/packages/vite-intlayer/intlayerPrune.md +77 -4
  395. package/docs/tr/self_hosting.md +47 -50
  396. package/docs/uk/analytics.md +222 -0
  397. package/docs/uk/bundle_optimization.md +58 -25
  398. package/docs/uk/configuration.md +25 -8
  399. package/docs/uk/dictionary/nesting.md +47 -30
  400. package/docs/uk/formatters.md +128 -185
  401. package/docs/uk/intlayer_CMS.md +152 -0
  402. package/docs/uk/intlayer_with_angular_21.md +9 -9
  403. package/docs/uk/intlayer_with_nextjs_14.md +1 -26
  404. package/docs/uk/intlayer_with_solid_start.md +1078 -0
  405. package/docs/uk/live-sync.md +4 -0
  406. package/docs/uk/packages/react-intlayer/useDictionary.md +2 -19
  407. package/docs/uk/packages/vite-intlayer/exports.md +15 -0
  408. package/docs/uk/packages/vite-intlayer/intlayer.md +121 -6
  409. package/docs/uk/packages/vite-intlayer/intlayerPrune.md +77 -4
  410. package/docs/uk/releases/v9.md +0 -15
  411. package/docs/uk/self_hosting.md +60 -50
  412. package/docs/ur/bundle_optimization.md +58 -25
  413. package/docs/ur/configuration.md +25 -8
  414. package/docs/ur/intlayer_with_angular_21.md +9 -9
  415. package/docs/vi/analytics.md +222 -0
  416. package/docs/vi/bundle_optimization.md +58 -25
  417. package/docs/vi/configuration.md +24 -8
  418. package/docs/vi/dictionary/nesting.md +37 -184
  419. package/docs/vi/formatters.md +208 -309
  420. package/docs/vi/intlayer_CMS.md +164 -0
  421. package/docs/vi/intlayer_with_angular_21.md +9 -9
  422. package/docs/vi/intlayer_with_nextjs_14.md +0 -25
  423. package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +70 -63
  424. package/docs/vi/intlayer_with_solid_start.md +1078 -0
  425. package/docs/vi/live-sync.md +4 -0
  426. package/docs/vi/packages/intlayer/getMultilingualUrls.md +4 -18
  427. package/docs/vi/packages/react-intlayer/useIntlayer.md +2 -2
  428. package/docs/vi/packages/vite-intlayer/exports.md +15 -0
  429. package/docs/vi/packages/vite-intlayer/intlayer.md +121 -6
  430. package/docs/vi/packages/vite-intlayer/intlayerPrune.md +77 -4
  431. package/docs/vi/plugins/sync-json.md +6 -6
  432. package/docs/vi/releases/v9.md +12 -0
  433. package/docs/vi/self_hosting.md +61 -50
  434. package/docs/zh/CI_CD.md +4 -0
  435. package/docs/zh/analytics.md +222 -0
  436. package/docs/zh/autoFill.md +28 -9
  437. package/docs/zh/bundle_optimization.md +58 -25
  438. package/docs/zh/configuration.md +24 -8
  439. package/docs/zh/dictionary/file.md +2 -0
  440. package/docs/zh/dictionary/nesting.md +47 -30
  441. package/docs/zh/formatters.md +140 -188
  442. package/docs/zh/intlayer_CMS.md +164 -0
  443. package/docs/zh/intlayer_with_analog.md +193 -3
  444. package/docs/zh/intlayer_with_angular_19.md +272 -3
  445. package/docs/zh/intlayer_with_angular_21.md +7 -7
  446. package/docs/zh/intlayer_with_create_react_app.md +348 -26
  447. package/docs/zh/intlayer_with_lynx+react.md +263 -4
  448. package/docs/zh/intlayer_with_nextjs_14.md +1 -28
  449. package/docs/zh/intlayer_with_nextjs_15.md +1 -33
  450. package/docs/zh/intlayer_with_nextjs_no_locale_path.md +558 -1
  451. package/docs/zh/intlayer_with_nuxt.md +182 -7
  452. package/docs/zh/intlayer_with_react_router_v7.md +183 -25
  453. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +306 -42
  454. package/docs/zh/intlayer_with_solid_start.md +1077 -0
  455. package/docs/zh/intlayer_with_storybook.md +260 -3
  456. package/docs/zh/intlayer_with_svelte_kit.md +428 -48
  457. package/docs/zh/intlayer_with_tanstack+solid.md +713 -13
  458. package/docs/zh/intlayer_with_tanstack.md +731 -20
  459. package/docs/zh/intlayer_with_vanilla.md +314 -4
  460. package/docs/zh/intlayer_with_vite+lit.md +465 -4
  461. package/docs/zh/intlayer_with_vite+preact.md +422 -116
  462. package/docs/zh/intlayer_with_vite+react.md +324 -45
  463. package/docs/zh/intlayer_with_vite+react_compiler.md +228 -13
  464. package/docs/zh/intlayer_with_vite+solid.md +462 -32
  465. package/docs/zh/intlayer_with_vite+vanilla.md +497 -4
  466. package/docs/zh/live-sync.md +4 -0
  467. package/docs/zh/mcp_server.md +3 -9
  468. package/docs/zh/packages/intlayer/getLocalizedUrl.md +26 -24
  469. package/docs/zh/packages/intlayer/getMultilingualUrls.md +4 -18
  470. package/docs/zh/packages/vite-intlayer/exports.md +29 -0
  471. package/docs/zh/packages/vite-intlayer/intlayer.md +121 -6
  472. package/docs/zh/packages/vite-intlayer/intlayerPrune.md +79 -6
  473. package/docs/zh/releases/v9.md +12 -0
  474. package/docs/zh/self_hosting.md +60 -50
  475. package/docs/zh-TW/bundle_optimization.md +58 -25
  476. package/docs/zh-TW/intlayer_with_angular_21.md +7 -7
  477. package/package.json +7 -7
  478. package/src/common.ts +39 -2
  479. package/src/generated/blog.entry.ts +66 -34
  480. package/src/generated/docs.entry.ts +273 -221
  481. package/src/generated/frequentQuestions.entry.ts +56 -24
  482. package/src/generated/legal.entry.ts +41 -9
@@ -30,9 +30,7 @@ history:
30
30
  author: aymericzip
31
31
  ---
32
32
 
33
- # Getting Started Internationalising (i18n) with Intlayer and Vite and Vue
34
-
35
- See [Application Template](https://github.com/aymericzip/intlayer-vite-vue-template) on GitHub.
33
+ # Translate your Vite and Vue website using Intlayer | Internationalisation (i18n)
36
34
 
37
35
  ## Table of Contents
38
36
 
@@ -12,6 +12,10 @@ keywords:
12
12
  - Intlayer
13
13
  - Next.js
14
14
  - Vite
15
+ slugs:
16
+ - doc
17
+ - concept
18
+ - live-sync
15
19
  history:
16
20
  - version: 9.0.0
17
21
  date: 2026-07-08
@@ -59,36 +59,44 @@ getLocalizedUrl(
59
59
 
60
60
  ## Parameters
61
61
 
62
- ## Description
63
-
64
- The `getLocalizedUrl` function generates a localised URL by prefixing the given URL with the specified locale. It handles both absolute and relative URLs, ensuring that the correct locale prefix is applied based on the configuration.
65
-
66
- ---
67
-
68
- ## Parameters
62
+ ### Required Parameters
69
63
 
70
64
  - `url: string`
71
65
  - **Description**: The original URL string to be prefixed with a locale.
72
66
  - **Type**: `string`
67
+ - **Required**: Yes
73
68
 
74
69
  - `currentLocale: Locales`
75
70
  - **Description**: The current locale for which the URL is being localised.
76
71
  - **Type**: `Locales`
77
-
78
- - `locales: Locales[]`
79
- - **Description**: Optional array of supported locales. By default, the configured locales in the project are provided.
80
- - **Type**: `Locales[]`
81
- - **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/{{locale}}/configuration.md#middleware)
82
-
83
- - `defaultLocale: Locales`
84
- - **Description**: The default locale for the application. By default, the configured default locale in the project is provided.
85
- - **Type**: `Locales`
86
- - **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/{{locale}}/configuration.md#middleware)
87
-
88
- - `prefixDefault: boolean`
89
- - **Description**: Whether to prefix the URL for the default locale. By default, the configured value in the project is provided.
90
- - **Type**: `boolean`
91
- - **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/{{locale}}/configuration.md#middleware)
72
+ - **Required**: Yes
73
+
74
+ ### Optional Parameters
75
+
76
+ - `options?: object`
77
+ - **Description**: Configuration object for URL localisation behaviour.
78
+ - **Type**: `object`
79
+ - **Required**: No (Optional)
80
+
81
+ - `options.locales?: Locales[]`
82
+ - **Description**: Array of supported locales. If not provided, uses the configured locales from your project configuration.
83
+ - **Type**: `Locales[]`
84
+ - **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/configuration.md#middleware)
85
+
86
+ - `options.defaultLocale?: Locales`
87
+ - **Description**: The default locale for the application. If not provided, uses the configured default locale from your project configuration.
88
+ - **Type**: `Locales`
89
+ - **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/configuration.md#middleware)
90
+
91
+ - `options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
92
+ - **Description**: The URL routing mode for locale handling. If not provided, uses the configured mode from your project configuration.
93
+ - **Type**: `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
94
+ - **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/configuration.md#middleware)
95
+ - **Modes**:
96
+ - `prefix-no-default`: No prefix for default locale, prefix for all others
97
+ - `prefix-all`: Prefix for all locales including default
98
+ - `no-prefix`: No locale prefix in URL
99
+ - `search-params`: Use query parameters for locale (e.g., `?locale=fr`)
92
100
 
93
101
  ### Returns
94
102
 
@@ -50,26 +50,12 @@ getMultilingualUrls(
50
50
 
51
51
  ## Parameters
52
52
 
53
- ## Parameters
53
+ ### Required Parameters
54
54
 
55
55
  - `url: string`
56
56
  - **Description**: The original URL string to be prefixed with locales.
57
57
  - **Type**: `string`
58
-
59
- - `locales: Locales[]`
60
- - **Description**: Optional array of supported locales. Defaults to the configured locales in the project.
61
- - **Type**: `Locales[]`
62
- - **Default**: `localesDefault`
63
-
64
- - `defaultLocale: Locales`
65
- - **Description**: The default locale for the application. Defaults to the configured default locale in the project.
66
- - **Type**: `Locales`
67
- - **Default**: `defaultLocaleDefault`
68
-
69
- - `prefixDefault: boolean`
70
- - **Description**: Whether to prefix the default locale. Defaults to the configured value in the project.
71
- - **Type**: `boolean`
72
- - **Default**: `prefixDefaultDefault`
58
+ - **Required**: Yes
73
59
 
74
60
  ### Optional Parameters
75
61
 
@@ -107,6 +93,20 @@ getMultilingualUrls(
107
93
 
108
94
  ## Example Usage
109
95
 
96
+ ### Basic Usage (Uses Project Configuration)
97
+
98
+ ```typescript codeFormat={["typescript", "esm", "commonjs"]}
99
+ import { getMultilingualUrls, Locales } from "intlayer";
100
+
101
+ // Uses your project's configuration for locales, defaultLocale, and mode
102
+ getMultilingualUrls("/dashboard");
103
+ // Output (assuming project config has en, fr with mode 'prefix-no-default'):
104
+ // {
105
+ // en: "/dashboard",
106
+ // fr: "/fr/dashboard"
107
+ // }
108
+ ```
109
+
110
110
  ### Relative URLs
111
111
 
112
112
  ```typescript codeFormat={["typescript", "esm", "commonjs"]}
@@ -141,38 +141,6 @@ getMultilingualUrls(
141
141
 
142
142
  ---
143
143
 
144
- ## Edge Cases
145
-
146
- - **No Locale Segment:**
147
-
148
- ```typescript
149
- getMultilingualUrls(
150
- "/dashboard",
151
- [Locales.ENGLISH, Locales.FRENCH],
152
- Locales.ENGLISH,
153
- false
154
- );
155
- // Output: {
156
- // en: "/dashboard",
157
- // fr: "/fr/dashboard"
158
- // }
159
- ```
160
-
161
- ```javascript codeFormat="commonjs"
162
- const { getMultilingualUrls, Locales } = require("intlayer");
163
-
164
- getMultilingualUrls(
165
- "/dashboard",
166
- [Locales.ENGLISH, Locales.FRENCH],
167
- Locales.ENGLISH,
168
- false
169
- );
170
- // Output: {
171
- // en: "/dashboard",
172
- // fr: "/fr/dashboard"
173
- // }
174
- ```
175
-
176
144
  ### Absolute URLs
177
145
 
178
146
  ```typescript
@@ -48,3 +48,18 @@ import "vite-intlayer";
48
48
  | `intlayerProxy` | Development middleware plugin to handle locale detection and routing. | - |
49
49
  | `intlayerMiddleware` | (**Deprecated**) Alias for `intlayerProxy`. | - |
50
50
  | `intlayerPrune` | Plugin to tree-shake and prune unused dictionaries during the build. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/packages/vite-intlayer/intlayerPrune.md) |
51
+
52
+ ### Utilities
53
+
54
+ | Export | Description | Related Doc |
55
+ | ---------------------------- | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
56
+ | `createIntlayerProxyHandler` | Returns a framework-agnostic Node.js `(req, res, next)` middleware with locale-routing logic. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/packages/vite-intlayer/intlayerProxy.md) |
57
+
58
+ ### Types
59
+
60
+ | Export | Description |
61
+ | ---------------------------- | ---------------------------------------------------------------------------------------------------------------- |
62
+ | `IntlayerPluginOptions` | Options accepted by `intlayer()`. Extends `GetConfigurationOptions` with `compatCallers` and `proxy`. |
63
+ | `IntlayerProxyPluginOptions` | Options accepted by `intlayerProxy()` and `createIntlayerProxyHandler()`. Includes `ignore` and `configOptions`. |
64
+ | `IntlayerCompilerOptions` | Options accepted by `intlayerCompiler()`. Includes `configOptions` and `compilerConfig`. |
65
+ | `CompatCallerConfig` | Re-export from `@intlayer/babel`. Describes a compat-adapter caller pattern for field-usage analysis. |
@@ -39,11 +39,126 @@ export default defineConfig({
39
39
  });
40
40
  ```
41
41
 
42
- ## Description
42
+ ## Options
43
43
 
44
- The plugin performs the following tasks:
44
+ ```ts
45
+ import type { IntlayerPluginOptions } from "vite-intlayer";
46
+ ```
47
+
48
+ `IntlayerPluginOptions` extends `GetConfigurationOptions` (see `@intlayer/config`) with the following additional fields:
49
+
50
+ | Option | Type | Default | Description |
51
+ | --------------- | ------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------- |
52
+ | `compatCallers` | `CompatCallerConfig[]` | `[]` | Extra caller patterns for compat-adapter packages (e.g. `@intlayer/react-i18next`). Passed to the field-usage analyser at build time. |
53
+ | `proxy` | `{ ignore?: (req) => boolean }` | `undefined` | Options forwarded to the bundled locale-routing proxy. Use `ignore` to exclude specific paths (e.g. API routes) from locale routing. |
54
+
55
+ All other options (`override`, `configFile`, …) are forwarded directly to `getConfiguration()`.
56
+
57
+ ### Examples
58
+
59
+ #### Ignore API routes from locale routing
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
+ #### With a custom config file path
78
+
79
+ ```ts
80
+ export default defineConfig({
81
+ plugins: [
82
+ intlayer({
83
+ configFile: "./config/intlayer.config.ts",
84
+ }),
85
+ ],
86
+ });
87
+ ```
88
+
89
+ #### With compat-adapter callers
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
+ ## What the plugin does
105
+
106
+ ### 1. Dictionary preparation
107
+
108
+ Before the build starts (and once per hour in dev), `intlayer` calls `prepareIntlayer` to compile all `.content.ts` files into optimised JSON dictionaries stored in `.intlayer/`.
109
+
110
+ ### 2. Module aliases
111
+
112
+ The plugin adds Vite resolve aliases so that `import { myDict } from 'intlayer/dictionaries/my-dict'` resolves to the compiled JSON file on disk. SSR builds use `ssr.noExternal` to ensure all `@intlayer/*` packages are bundled with aliases applied.
113
+
114
+ ### 3. Dev-server watcher
115
+
116
+ In development mode a `chokidar` watcher is started. When a `.content.ts` file changes the dictionaries are recompiled and Vite's HMR propagates the update to the browser.
117
+
118
+ ### 4. Bundled locale-routing proxy (v9+)
119
+
120
+ Since Intlayer v9 the `intlayerProxy` middleware is registered automatically inside `intlayer()`. It handles:
121
+
122
+ - Locale detection from URL prefix, cookies, and `Accept-Language` header.
123
+ - 301 redirects when the detected locale does not match the current URL.
124
+ - Internal URL rewrites so the framework sees the correct `[locale]` route parameter.
125
+
126
+ The proxy is controlled by `routing.enableProxy` (default `true`) in your Intlayer config. To disable it completely:
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
+ To customise proxy behaviour without a separate `intlayerProxy()` call, pass `proxy` options to the main plugin:
138
+
139
+ ```ts
140
+ intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api") } });
141
+ ```
142
+
143
+ See the [intlayerProxy documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/packages/vite-intlayer/intlayerProxy.md) for the full routing behaviour reference.
144
+
145
+ ### 5. Bundled compiler (v9+)
146
+
147
+ When `compiler.enabled` is `true` **and** `compiler.output` is set in your Intlayer config, `intlayer()` registers `intlayerCompiler` automatically. The compiler extracts inline content declarations written directly inside component files and writes them to dictionaries at transform time. See [intlayerCompiler documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en-GB/packages/vite-intlayer/intlayerCompiler.md).
148
+
149
+ ### 6. Build optimisations
150
+
151
+ During a production build the plugin adds:
152
+
153
+ - **intlayerOptimize** – Babel transform that rewrites `useIntlayer('key')` → `useDictionary(hash)` and injects direct JSON imports.
154
+ - **intlayerPrune** – removes unused content fields from dictionary JSON.
155
+ - **intlayerMinify** – compacts dictionary JSON and optionally mangles field names.
156
+
157
+ These are inactive in development mode.
158
+
159
+ ## Deprecated aliases
45
160
 
46
- 1. **Prepare Dictionaries**: It compiles the dictionaries into optimised files at the start of the build or development process.
47
- 2. **Watch Mode**: In development mode, it watches for changes in dictionary files and recompiles them automatically.
48
- 3. **Aliases**: It provides aliases for accessing the dictionaries in your application.
49
- 4. **Tree-shaking**: It supports tree-shaking of unused translations through the `intlayerPrune` plugin.
161
+ | Deprecated export | Replacement |
162
+ | ----------------- | ----------- |
163
+ | `intlayerPlugin` | `intlayer` |
164
+ | `intLayerPlugin` | `intlayer` |
@@ -30,16 +30,89 @@ The `intlayerPrune` Vite plugin is used to tree-shake and prune unused dictionar
30
30
 
31
31
  ## Usage
32
32
 
33
+ ### As part of `intlayer()` (recommended)
34
+
35
+ Enable pruning through your Intlayer config and the main plugin handles everything:
36
+
37
+ ```ts
38
+ // intlayer.config.ts
39
+ import { defineConfig } from "intlayer";
40
+
41
+ export default defineConfig({
42
+ build: {
43
+ optimize: true, // enables both prune and minify
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
+ If you are composing the plugin stack manually, `intlayerPrune` and `intlayerMinify` share a `PruneContext` object that must be created once and passed to both:
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), // optional, reads from same context
76
+ ],
40
77
  });
41
78
  ```
42
79
 
43
- ## Description
80
+ ## How it works
81
+
82
+ ### 1. Usage analysis (buildStart)
83
+
84
+ During `buildStart`, the `intlayerOptimize` plugin (also part of `intlayer()`) scans every component source file listed in `build.filesList`. For each `useIntlayer('key')` or `getIntlayer('key')` call, it records exactly which fields are accessed, e.g.:
85
+
86
+ ```ts
87
+ const { title, description } = useIntlayer("myDict");
88
+ // records: myDict → { title, description }
89
+ ```
90
+
91
+ This builds `pruneContext.fieldUsageMap` before any `transform` calls run.
92
+
93
+ ### 2. JSON pruning (transform, enforce: 'pre')
94
+
95
+ When Vite processes a compiled dictionary JSON file, `intlayerPrune` intercepts it before Vite's built-in JSON → ESM conversion. It reads the field-usage map from `pruneContext` and removes any content field that is not in the recorded usage set.
96
+
97
+ Two content shapes are supported:
98
+
99
+ - **Static dictionaries** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`. Fields are pruned per-locale inside `translation`.
100
+ - **Dynamic (per-locale) dictionaries** — flat `{ fieldA: ..., fieldB: ... }`. Fields are pruned at the top level.
101
+
102
+ ### 3. Edge cases
103
+
104
+ If a dictionary's content structure cannot be recognised (e.g. an unusual nested shape), it is added to `pruneContext.dictionariesWithEdgeCases` and **left untouched**. A warning is logged. `intlayerMinify` also skips these dictionaries.
105
+
106
+ ### 4. Field-rename map
107
+
108
+ When pruning succeeds, `intlayerPrune` also writes `pruneContext.dictionaryKeyToFieldRenameMap` — a mapping from original field names to short aliases. `intlayerMinify` reads this map to rename fields in the output JSON, and `intlayerOptimize`'s Babel rename pass updates property accesses in source files accordingly.
109
+
110
+ ## Activation conditions
111
+
112
+ `intlayerPrune` is active **only** when all of the following are true:
113
+
114
+ 1. The Vite command is `build`.
115
+ 2. `build.optimize` is `true` (or `undefined`, which defaults to `true` for builds).
116
+ 3. `build.purge` is `true` in your Intlayer config.
44
117
 
45
- The plugin analyses your source code to identify which dictionary keys are actually used. It then removes any unused content from the bundled dictionary files. This is particularly useful for large projects with many dictionaries where only a subset is used on specific pages or in certain components.
118
+ It is automatically **disabled** when `editor.enabled` is `true` because the editor needs the full dictionary content.
@@ -64,6 +64,32 @@ Chromium (used for Puppeteer screenshot generation) is bundled inside the backen
64
64
 
65
65
  ## Quick start
66
66
 
67
+ Pull and run the published image, supplying your MongoDB Atlas credentials and secrets:
68
+
69
+ ```sh
70
+ docker run -d --name intlayer \
71
+ -p 3000:3000 \
72
+ -p 3100:3100 \
73
+ -p 9000:9000 \
74
+ -p 9001:9001 \
75
+ -v intlayer-data:/data \
76
+ -e DB_ID="<atlas-user>" \
77
+ -e DB_MDP="<atlas-password>" \
78
+ -e DB_CLUSTER="<cluster>.xxxxx.mongodb.net" \
79
+ -e BETTER_AUTH_SECRET="$(openssl rand -hex 32)" \
80
+ -e S3_SECRET_ACCESS_KEY="$(openssl rand -hex 16)" \
81
+ -e RESEND_API_KEY="<your-resend-key>" \
82
+ aymericzip/intlayer-selfhost
83
+ ```
84
+
85
+ Then open **http://localhost:3000**.
86
+
87
+ > The dashboard is served on `localhost`. See [Limitations](#limitations) — custom domains are not supported by the published image.
88
+
89
+ ---
90
+
91
+ ## Quick start
92
+
67
93
  ```sh
68
94
  curl -fsSL https://intlayer.org/install.sh | sh
69
95
  ```
@@ -99,7 +125,16 @@ Internal ports (mongo, redis) are not exposed to the host by default.
99
125
 
100
126
  ## Environment variables
101
127
 
102
- The installer generates a ready-to-use `.env`. The table below describes every variable.
128
+ ### Required
129
+
130
+ | Variable | Example | Description |
131
+ | ---------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
132
+ | `DB_ID` | `intlayer` | MongoDB Atlas user |
133
+ | `DB_MDP` | _(your password)_ | MongoDB Atlas password |
134
+ | `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | MongoDB Atlas cluster host (used in the `mongodb+srv://` URI) |
135
+ | `BETTER_AUTH_SECRET` | _(generated)_ | 32-byte secret for session signing |
136
+ | `S3_SECRET_ACCESS_KEY` | _(generated)_ | Secret for the bundled MinIO |
137
+ | `RESEND_API_KEY` | _(your key)_ | Transactional email via Resend. Required for first-run setup unless you configure a global SMTP mailer (see [Global mailer](#global-mailer)) |
103
138
 
104
139
  ### Required (auto-generated or prompted)
105
140
 
@@ -141,6 +176,26 @@ The installer generates a ready-to-use `.env`. The table below describes every v
141
176
 
142
177
  ---
143
178
 
179
+ ### Global mailer
180
+
181
+ By default, all transactional emails are sent through Resend using `RESEND_API_KEY`. Self-hosted deployments can instead route **every** email — including non-organisation emails such as password resets and magic links — through a global mailer configured with environment variables.
182
+
183
+ Set `MAIL_PROVIDER` to activate it. When unset, the default Resend mailer is used.
184
+
185
+ | Variable | Example | Description |
186
+ | -------------------- | ------------------------------ | ----------------------------------------------------------------- |
187
+ | `MAIL_PROVIDER` | `smtp` | Global transport: `smtp` or `resend`. Leave unset to use defaults |
188
+ | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | Sender header. Accepts a bare address or `Name <email>` format |
189
+ | `MAIL_SMTP_HOST` | `smtp.acme.com` | SMTP host (required when `MAIL_PROVIDER=smtp`) |
190
+ | `MAIL_SMTP_PORT` | `587` | SMTP port (defaults to `587`) |
191
+ | `MAIL_SMTP_SECURE` | `false` | Implicit TLS. Set `true` for port `465` |
192
+ | `MAIL_SMTP_USER` | _(your user)_ | SMTP username (optional; omit for unauthenticated relays) |
193
+ | `MAIL_SMTP_PASSWORD` | _(your password)_ | SMTP password |
194
+
195
+ > Precedence: an organisation's own mailer (configured from the **Organisation** dashboard) takes priority over the global mailer, which in turn takes priority over the default Resend key.
196
+
197
+ ---
198
+
144
199
  ## Connecting your Intlayer project
145
200
 
146
201
  Once the stack is running, point your project at the self-hosted backend and dashboard instead of `intlayer.org`.
@@ -259,47 +314,11 @@ docker run --rm \
259
314
 
260
315
  ---
261
316
 
262
- ## Using a reverse proxy (Nginx / Caddy)
263
-
264
- For production deployments, place a reverse proxy in front of the app and backend containers instead of exposing them directly.
265
-
266
- ### Nginx example
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
- }
317
+ ## Limitations
279
318
 
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
- Update the following `.env` variables to match your public domains:
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
- > `VITE_*` variables are baked into the dashboard image at build time. If you change them after the image is built, you need to rebuild the `app` image (`docker compose build app`) or use runtime config injection.
319
+ - **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.
320
+ - **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.
321
+ - **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 organisation can also configure its own SMTP or Resend mailer from the dashboard.
303
322
 
304
323
  ---
305
324
 
@@ -324,14 +343,6 @@ docker compose build app
324
343
  docker compose up -d app
325
344
  ```
326
345
 
327
- ### Email not sending
328
-
329
- By default, all outbound email is captured by Mailpit. Open `http://localhost:8025` to see sent messages. To send real email, set `MAIL_PROVIDER=resend` and `RESEND_API_KEY=<your-key>` in `.env`, then restart the backend:
330
-
331
- ```sh
332
- docker compose restart backend
333
- ```
334
-
335
346
  ### MinIO bucket missing
336
347
 
337
348
  If the `minio-init` one-shot service didn't run (or ran before MinIO was ready), create the bucket manually: