@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
@@ -30,9 +30,7 @@ history:
30
30
  author: aymericzip
31
31
  ---
32
32
 
33
- # ترجم Vite and Vue باستخدام Intlayer | التدويل (i18n)
34
-
35
- راجع [قالب التطبيق](https://github.com/aymericzip/intlayer-vite-vue-template) على GitHub.
33
+ # ترجمة موقع Vite و Vue الخاص بك باستخدام Intlayer | Internationalization (i18n)
36
34
 
37
35
  ## جدول المحتويات
38
36
 
@@ -63,30 +63,32 @@ getLocalizedUrl(
63
63
  - **Type**: `Locales`
64
64
  - **Required**: Yes
65
65
 
66
- ## المعاملات
67
-
68
- - `url: string`
69
- - **الوصف**: سلسلة عنوان URL الأصلية التي سيتم إضافة بادئة اللغة إليها.
70
- - **النوع**: `string`
71
-
72
- - `currentLocale: Locales`
73
- - **الوصف**: اللغة الحالية التي يتم تعريب العنوان لها.
74
- - **النوع**: `Locales`
75
-
76
- - `locales: Locales[]`
77
- - **الوصف**: مصفوفة اختيارية من اللغات المدعومة. بشكل افتراضي، يتم توفير اللغات المكونة في المشروع.
78
- - **النوع**: `Locales[]`
79
- - **الافتراضي**: [`تكوين المشروع`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md#middleware)
80
-
81
- - `defaultLocale: Locales`
82
- - **الوصف**: اللغة الافتراضية للتطبيق. بشكل افتراضي، يتم توفير اللغة الافتراضية المكونة في المشروع.
83
- - **النوع**: `Locales`
84
- - **الافتراضي**: [`تكوين المشروع`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md#middleware)
85
-
86
- - `prefixDefault: boolean`
87
- - **الوصف**: ما إذا كان يجب إضافة بادئة للعنوان الافتراضي. بشكل افتراضي، يتم توفير القيمة المكونة في المشروع.
88
- - **النوع**: `boolean`
89
- - **الافتراضي**: [`تكوين المشروع`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md#middleware)
66
+ ### المعاملات الاختيارية
67
+
68
+ - `options?: object`
69
+ - **الوصف**: كائن التكوين لسلوك تحديد موقع عناوين URL.
70
+ - **النوع**: `object`
71
+ - **مطلوب**: لا (اختياري)
72
+
73
+ - `options.locales?: Locales[]`
74
+ - **الوصف**: مصفوفة اللغات المدعومة. إذا لم يتم توفيرها، فسيتم استخدام اللغات المكونة من تكوين مشروعك.
75
+ - **النوع**: `Locales[]`
76
+ - **القيمة الافتراضية**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md#middleware)
77
+
78
+ - `options.defaultLocale?: Locales`
79
+ - **الوصف**: اللغة الافتراضية للتطبيق. إذا لم يتم توفيرها، فسيتم استخدام اللغة الافتراضية المكونة من تكوين مشروعك.
80
+ - **النوع**: `Locales`
81
+ - **القيمة الافتراضية**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md#middleware)
82
+
83
+ - `options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
84
+ - **الوصف**: وضع التوجيه للعنوان لمعالجة اللغة. إذا لم يتم توفيره، فسيتم استخدام الوضع المكون من تكوين مشروعك.
85
+ - **النوع**: `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
86
+ - **القيمة الافتراضية**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md#middleware)
87
+ - **الأوضاع**:
88
+ - `prefix-no-default`: بدون بادئة للغة الافتراضية، بادئة لجميع اللغات الأخرى
89
+ - `prefix-all`: بادئة لجميع اللغات بما في ذلك اللغة الافتراضية
90
+ - `no-prefix`: بدون بادئة لغة في العنوان
91
+ - `search-params`: استخدام معاملات الاستعلام للغة (مثل `?locale=fr`)
90
92
 
91
93
  ### الإرجاع
92
94
 
@@ -49,26 +49,12 @@ author: aymericzip
49
49
 
50
50
  ## المعاملات
51
51
 
52
- ## المعاملات
52
+ ### المعاملات المطلوبة
53
53
 
54
54
  - `url: string`
55
- - **الوصف**: سلسلة عنوان URL الأصلية التي سيتم إضافة بادئات اللغات إليها.
56
- - **النوع**: `string`
57
-
58
- - `locales: Locales[]`
59
- - **الوصف**: مصفوفة اختيارية من اللغات المدعومة. القيمة الافتراضية هي اللغات المعرفة في المشروع.
60
- - **النوع**: `Locales[]`
61
- - **الافتراضي**: `localesDefault`
62
-
63
- - `defaultLocale: Locales`
64
- - **الوصف**: اللغة الافتراضية للتطبيق. القيمة الافتراضية هي اللغة الافتراضية المعرفة في المشروع.
65
- - **النوع**: `Locales`
66
- - **الافتراضي**: `defaultLocaleDefault`
67
-
68
- - `prefixDefault: boolean`
69
- - **الوصف**: ما إذا كان يجب إضافة بادئة للغة الافتراضية. القيمة الافتراضية هي القيمة المعرفة في المشروع.
70
- - **النوع**: `boolean`
71
- - **الافتراضي**: `prefixDefaultDefault`
55
+ - **Description**: سلسلة URL الأصلية التي سيتم إضافة البادئة لها باستخدام اللغات.
56
+ - **Type**: `string`
57
+ - **Required**: نعم
72
58
 
73
59
  ### المعاملات الاختيارية
74
60
 
@@ -24,6 +24,10 @@ history:
24
24
  author: aymericzip
25
25
  ---
26
26
 
27
+ # توثيق Hook useDictionary
28
+
29
+ يسمح hook `useDictionary` بمعالجة كائن يشبه القاموس (يحتوي على مفاتيح ومحتوى) والتعامل مع الترجمات والتعددات وما إلى ذلك بداخله. بخلاف `useIntlayer`، الذي تم تصميمه للعمل مع إعلانات القاموس المُنشأة، فإن `useDictionary` أكثر مرونة ويمكن استخدامه مع أي كائن يتبع هيكل القاموس.
30
+
27
31
  ## مثال على الاستخدام في React
28
32
 
29
33
  فيما يلي مثال على كيفية استخدام الخطاف `useDictionary` في مكون React:
@@ -45,27 +49,6 @@ const ComponentExample: FC = () => {
45
49
  };
46
50
  ```
47
51
 
48
- ## التكامل مع الخادم
49
-
50
- إذا كنت تستخدم الخطاف `useDictionary` خارج `IntlayerProvider`، يجب توفير اللغة صراحة كمعامل عند عرض المكون:
51
-
52
- ```tsx fileName="./ServerComponentExample.tsx" codeFormat={["typescript", "esm"]}
53
- import type { FC } from "react";
54
- import { useDictionary } from "react-intlayer/server";
55
- import clientComponentExampleContent from "./component.content";
56
-
57
- const ServerComponentExample: FC<{ locale: string }> = ({ locale }) => {
58
- const { content } = useDictionary(clientComponentExampleContent, locale);
59
-
60
- return (
61
- <div>
62
- <h1>{content.title}</h1>
63
- <p>{content.content}</p>
64
- </div>
65
- );
66
- };
67
- ```
68
-
69
52
  ## نصائح إضافية
70
53
 
71
54
  - **سلامة النوع**: استخدم دائمًا `Dictionary` لتعريف القواميس الخاصة بك لضمان سلامة النوع.
@@ -21,9 +21,9 @@ slugs:
21
21
  author: aymericzip
22
22
  ---
23
23
 
24
- ## القاموس
24
+ # توثيق خطاف useIntlayer
25
25
 
26
- يجب إعلان جميع مفاتيح القاموس داخل ملفات إعلان المحتوى لتعزيز أمان النوع وتجنب الأخطاء. يمكنك العثور على [تعليمات الإعداد هنا](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dictionary/content_file.md).
26
+ يسمح خطاف `useIntlayer` بالحصول على محتوى محلي من قاموس باستخدام مفتاحه. وهو يعتمد على `useDictionary` لكنه يحقن تلقائياً نسخة محسّنة من القاموس من التصريحات المُنشأة.
27
27
 
28
28
  ## مثال على الاستخدام في React
29
29
 
@@ -48,3 +48,18 @@ import "vite-intlayer";
48
48
  | `intlayerProxy` | مكوّن إضافي أثناء التطوير للتعامل مع اكتشاف اللغة والتوجيه. | - |
49
49
  | `intlayerMiddleware` | (**مهمل**) مرادف لـ `intlayerProxy`. | - |
50
50
  | `intlayerPrune` | ملحق لإجراء tree-shake وتقليم القواميس غير المستخدمة أثناء عملية البناء. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/vite-intlayer/intlayerPrune.md) |
51
+
52
+ ### الأدوات
53
+
54
+ | التصدير | الوصف | المستند ذو الصلة |
55
+ | ---------------------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
56
+ | `createIntlayerProxyHandler` | إرجاع middleware لـ Node.js `(req, res, next)` غير متعلق بأي framework مع منطق توجيه locale. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/vite-intlayer/intlayerProxy.md) |
57
+
58
+ ### الأنواع
59
+
60
+ | التصدير | الوصف |
61
+ | ---------------------------- | -------------------------------------------------------------------------------------------------------------- |
62
+ | `IntlayerPluginOptions` | الخيارات المقبولة بواسطة `intlayer()`. تمتد `GetConfigurationOptions` مع `compatCallers` و `proxy`. |
63
+ | `IntlayerProxyPluginOptions` | الخيارات المقبولة بواسطة `intlayerProxy()` و `createIntlayerProxyHandler()`. تتضمن `ignore` و `configOptions`. |
64
+ | `IntlayerCompilerOptions` | الخيارات المقبولة بواسطة `intlayerCompiler()`. تتضمن `configOptions` و `compilerConfig`. |
65
+ | `CompatCallerConfig` | إعادة تصدير من `@intlayer/babel`. يصف نمط compat-adapter caller لتحليل استخدام الحقول. |
@@ -39,11 +39,126 @@ export default defineConfig({
39
39
  });
40
40
  ```
41
41
 
42
- ## الوصف
42
+ ## الخيارات
43
43
 
44
- يقوم الملحق بالمهام التالية:
44
+ ```ts
45
+ import type { IntlayerPluginOptions } from "vite-intlayer";
46
+ ```
47
+
48
+ `IntlayerPluginOptions` يوسع `GetConfigurationOptions` (انظر `@intlayer/config`) مع الحقول الإضافية التالية:
49
+
50
+ | الخيار | النوع | القيمة الافتراضية | الوصف |
51
+ | --------------- | ------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------- |
52
+ | `compatCallers` | `CompatCallerConfig[]` | `[]` | أنماط استدعاء إضافية لحزم compat-adapter (مثل `@intlayer/react-i18next`). يتم تمريرها إلى محلل استخدام الحقول في وقت البناء. |
53
+ | `proxy` | `{ ignore?: (req) => boolean }` | `undefined` | خيارات يتم تمريرها إلى وكيل توجيه المنطقة المرفقة. استخدم `ignore` لاستبعاد المسارات المحددة (مثل مسارات API) من توجيه المنطقة. |
54
+
55
+ يتم تمرير جميع الخيارات الأخرى (`override`, `configFile`, …) مباشرة إلى `getConfiguration()`.
56
+
57
+ ### أمثلة
58
+
59
+ #### تجاهل مسارات API من توجيه اللغة
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
+ #### مع مسار ملف config مخصص
78
+
79
+ ```ts
80
+ export default defineConfig({
81
+ plugins: [
82
+ intlayer({
83
+ configFile: "./config/intlayer.config.ts",
84
+ }),
85
+ ],
86
+ });
87
+ ```
88
+
89
+ #### مع استدعاءات 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
+ ## ما يفعله البرنامج الإضافي
105
+
106
+ ### 1. تحضير القاموس
107
+
108
+ قبل بدء البناء (وكل ساعة واحدة في بيئة التطوير)، يستدعي `intlayer` الدالة `prepareIntlayer` لترجمة جميع ملفات `.content.ts` إلى قواميس JSON محسنة مخزنة في `.intlayer/`.
109
+
110
+ ### 2. أسماء مستعارة للوحدات
111
+
112
+ يضيف البرنامج الإضافي أسماء مستعارة لحل Vite بحيث يتم حل `import { myDict } from 'intlayer/dictionaries/my-dict'` إلى ملف JSON مترجم على القرص. تستخدم عمليات بناء SSR `ssr.noExternal` للتأكد من أن جميع حزم `@intlayer/*` موجودة مع تطبيق الأسماء المستعارة.
113
+
114
+ ### 3. مراقب خادم التطوير
115
+
116
+ في وضع التطوير، يتم بدء مراقب `chokidar`. عند تغيير ملف `.content.ts`، يتم إعادة تجميع القواميس وينتشر تحديث Vite's HMR إلى المتصفح.
117
+
118
+ ### 4. وسيط توجيه المنطقة المدمج (v9+)
119
+
120
+ منذ إصدار Intlayer v9، يتم تسجيل middleware `intlayerProxy` تلقائياً داخل `intlayer()`. يتعامل مع:
121
+
122
+ - كشف المنطقة من بادئة URL والكوكيز ورأس `Accept-Language`.
123
+ - إعادة توجيه 301 عندما لا تتطابق المنطقة المكتشفة مع عنوان URL الحالي.
124
+ - إعادة كتابة URL داخلية بحيث يرى الإطار معامل المسار `[locale]` الصحيح.
125
+
126
+ يتم التحكم في الوسيط بواسطة `routing.enableProxy` (الافتراضي `true`) في إعدادات Intlayer الخاصة بك. لتعطيله بالكامل:
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
+ لتخصيص سلوك الوسيط دون استدعاء `intlayerProxy()` منفصل، مرر خيارات `proxy` إلى المكون الإضافي الرئيسي:
138
+
139
+ ```ts
140
+ intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api") } });
141
+ ```
142
+
143
+ راجع [وثائق intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/vite-intlayer/intlayerProxy.md) للحصول على مرجع سلوك التوجيه الكامل.
144
+
145
+ ### 5. مجمِّع مرفق (v9+)
146
+
147
+ عندما يكون `compiler.enabled` هو `true` **و** يتم تعيين `compiler.output` في إعدادات Intlayer الخاصة بك، يسجل `intlayer()` `intlayerCompiler` تلقائياً. يستخرج المجمِّع إعلانات المحتوى المضمنة المكتوبة مباشرة داخل ملفات المكونات ويكتبها إلى القواميس في وقت التحويل. انظر [وثائق intlayerCompiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/vite-intlayer/intlayerCompiler.md).
148
+
149
+ ### 6. تحسينات البناء
150
+
151
+ أثناء بناء الإنتاج، تضيف الإضافة:
152
+
153
+ - **intlayerOptimize** – تحويل Babel الذي يعيد كتابة `useIntlayer('key')` → `useDictionary(hash)` وحقن واردات JSON المباشرة.
154
+ - **intlayerPrune** – يزيل حقول المحتوى غير المستخدمة من قاموس JSON.
155
+ - **intlayerMinify** – يضغط قاموس JSON ويمكن أن يعيد تسمية أسماء الحقول اختياريًا.
156
+
157
+ هذه غير نشطة في وضع التطوير.
158
+
159
+ ## الأسماء المستعارة المهجورة
45
160
 
46
- 1. **تحضير القواميس**: يقوم بتجميع القواميس إلى ملفات مُحسّنة في بداية عملية البناء أو تشغيل وضع التطوير.
47
- 2. **وضع المراقبة**: في وضع التطوير، يراقب التغييرات في ملفات القواميس ويُعيد تجميعها تلقائيًا.
48
- 3. **الاختصارات (Aliases)**: يوفر اختصارات للوصول إلى القواميس في تطبيقك.
49
- 4. **Tree-shaking**: يدعم إزالة الترجمات غير المستخدمة عبر الإضافة `intlayerPrune`.
161
+ | الصادرات المهجورة | البديل |
162
+ | ----------------- | ---------- |
163
+ | `intlayerPlugin` | `intlayer` |
164
+ | `intLayerPlugin` | `intlayer` |
@@ -30,16 +30,83 @@ author: aymericzip
30
30
 
31
31
  ## الاستخدام
32
32
 
33
+ ### كجزء من `intlayer()` (موصى به)
34
+
35
+ قم بتفعيل التنقية من خلال إعدادات Intlayer والمكون الرئيسي يتعامل مع كل شيء:
36
+
33
37
  ```ts
34
- // ملف vite.config.ts
38
+ // intlayer.config.ts
39
+ import { defineConfig } from "intlayer";
40
+
41
+ export default defineConfig({
42
+ build: {
43
+ optimize: true, // تفعيل كل من التنقية والضغط
44
+ },
45
+ });
46
+ ```
47
+
48
+ ```ts
49
+ // vite.config.ts
35
50
  import { defineConfig } from "vite";
36
- import { intlayer, intlayerPrune } from "vite-intlayer";
51
+ import { intlayer } from "vite-intlayer";
37
52
 
38
53
  export default defineConfig({
39
- plugins: [intlayer(), intlayerPrune()],
54
+ plugins: [intlayer()],
40
55
  });
41
56
  ```
42
57
 
58
+ ### مستقل
59
+
60
+ إذا كنت تؤلف مكدس المكونات الإضافية يدويًا، فإن `intlayerPrune` و `intlayerMinify` يشتركان في كائن `PruneContext` يجب إنشاؤه مرة واحدة وتمريره إلى كليهما:
61
+
62
+ ```ts
63
+ // vite.config.ts
64
+ import { defineConfig } from "vite";
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();
71
+
72
+ export default defineConfig({
73
+ plugins: [
74
+ intlayerPrune(intlayerConfig, pruneContext),
75
+ intlayerMinify(intlayerConfig, pruneContext), // اختياري، يقرأ من نفس السياق
76
+ ],
77
+ });
78
+ ```
79
+
80
+ ## كيف يعمل
81
+
82
+ ### 1. تحليل الاستخدام (buildStart)
83
+
84
+ أثناء `buildStart`، يقوم plugin `intlayerOptimize` (وهو أيضًا جزء من `intlayer()`) بفحص كل ملف مصدر مكون مدرج في `build.filesList`. لكل استدعاء `useIntlayer('key')` أو `getIntlayer('key')`، يسجل بالضبط الحقول التي تم الوصول إليها، على سبيل المثال:
85
+
86
+ ```ts
87
+ const { title, description } = useIntlayer("myDict");
88
+ // السجل: myDict → { title, description }
89
+ ```
90
+
91
+ وهذا يبني `pruneContext.fieldUsageMap` قبل تشغيل أي استدعاءات `transform`.
92
+
93
+ ### 2. تقليص JSON (transform, enforce: 'pre')
94
+
95
+ عندما تعالج Vite ملف قاموس JSON مُترجَم، يعترض `intlayerPrune` عملية التحويل قبل تحويل JSON → ESM المدمج في Vite. يقرأ خريطة استخدام الحقول من `pruneContext` ويزيل أي حقل محتوى غير مسجل في مجموعة الاستخدام.
96
+
97
+ تُدعم شكلان من المحتوى:
98
+
99
+ - **القواميیس الثابتة** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`. يتم تقليص الحقول لكل لغة داخل `translation`.
100
+ - **القواموس الديناميكية (لكل لغة)** — `{ fieldA: ..., fieldB: ... }` مسطحة. يتم تقليص الحقول على المستوى الأعلى.
101
+
102
+ ### 3. حالات خاصة
103
+
104
+ إذا لم يتمكن النظام من التعرف على هيكل محتوى القاموس (على سبيل المثال، شكل متداخل غير عادي)، يتم إضافته إلى `pruneContext.dictionariesWithEdgeCases` و**تركه دون تعديل**. يتم تسجيل تحذير. يتخطى `intlayerMinify` أيضاً هذه القواميس.
105
+
106
+ ### 4. خريطة إعادة تسمية الحقول
107
+
108
+ عند نجاح التقليص، يكتب `intlayerPrune` أيضًا `pruneContext.dictionaryKeyToFieldRenameMap` — وهي خريطة من أسماء الحقول الأصلية إلى اسم مستعار قصير. يقرأ `intlayerMinify` هذه الخريطة لإعادة تسمية الحقول في JSON الناتج، وتحديث Babel الخاص بـ `intlayerOptimize` يحدّث عمليات الوصول إلى الخصائص في ملفات المصدر وفقًا لذلك.
109
+
43
110
  ## الوصف
44
111
 
45
112
  يقوم المكوّن الإضافي بتحليل شفرة المصدر الخاصة بك لتحديد مفاتيح القواميس المستخدمة فعليًا. ثم يزيل أي محتوى غير مستخدم من ملفات القواميس المدرجة في الحزمة (bundle). يكون هذا مفيدًا بشكل خاص للمشاريع الكبيرة التي تحتوي على العديد من القواميس حيث يُستخدم جزء فقط منها في صفحات أو مكونات محددة.
@@ -335,28 +335,6 @@ npm install intlayer react-native-intlayer
335
335
 
336
336
  ---
337
337
 
338
- ## React Native: استيراد من حزمة واحدة
339
-
340
- في تطبيق React Native أو Expo، لم تعد بحاجة إلى التوفيق بين `react-intlayer` و `react-native-intlayer`. تقوم حزمة `react-native-intlayer` الآن **بإعادة تصدير واجهة برمجة تطبيقات `react-intlayer` بالكامل** (الخطافات "hooks"، والأدوات، والمسارات الفرعية `/format` و `/html` و `/markdown`)، ويقوم `IntlayerProvider` الخاص بها بتطبيق polyfills الخاصة بـ React Native تلقائيًا.
341
-
342
- قم باستيراد كل شيء من حزمة `react-native-intlayer` الفردية:
343
-
344
- ```tsx
345
- import {
346
- IntlayerProvider,
347
- useIntlayer,
348
- useLocale,
349
- } from "react-native-intlayer";
350
- ```
351
-
352
- ```bash
353
- npm install intlayer react-native-intlayer
354
- ```
355
-
356
- > الاستيراد من `react-intlayer` يظل يعمل، ولكن `react-native-intlayer` هي الآن نقطة الدخول الفردية الموصى بها لـ React Native — حيث يوفر المزود الخاص بها polyfills التي لا يوفرها المزود الموجه للويب `react-intlayer`.
357
-
358
- ---
359
-
360
338
  ## CMS SDK: استخدم Intlayer كقاعدة بيانات محتوى headless
361
339
 
362
340
  يأتي Intlayer v9 مع SDK نظيف وذاتي المصادقة في `@intlayer/api` للتفاعل مع نظام إدارة المحتوى (CMS) برمجيًا — جلب المشاريع، وجلب القواميس، ودفعها أو تحديثها من خادمك أو سكربتاتك أو CI الخاص بك. تتم المصادقة (OAuth2 `client_credentials`) وتجديدها نيابةً عنك.
@@ -395,21 +373,6 @@ curl -fsSL https://intlayer.org/install.sh | sh
395
373
 
396
374
  يقوم المثبّت بتنزيل ملف `docker-compose.yml` وملف `.env`، ويولّد الأسرار المطلوبة تلقائياً، ويشغّل `docker compose up -d`. كل شيء — لوحة التحكم، وواجهة برمجة التطبيقات، وقاعدة البيانات، وتخزين الكائنات، والبريد الإلكتروني التفاعلي — يعمل محلياً داخل حاويات.
397
375
 
398
- ### الخدمات المتضمنة
399
-
400
- | الخدمة | الغرض |
401
- | ------------------------------------------------ | ----------------------------------------------------------------------- |
402
- | **app** (TanStack Start) | واجهة لوحة التحكم على المنفذ `3000` |
403
- | **backend** (Fastify/Bun) | واجهة برمجة تطبيقات REST على المنفذ `3100` |
404
- | **MongoDB 7** (مجموعة نسخ متماثلة أحادية العقدة) | قاعدة البيانات الرئيسية |
405
- | **Redis 7** | قوائم انتظار المهام والتخزين المؤقت |
406
- | **MinIO** | تخزين كائنات متوافق مع S3 (الصور الرمزية، لقطات الشاشة) |
407
- | **Mailpit** | خادم SMTP محلي + واجهة ويب للبريد الإلكتروني التفاعلي على المنفذ `8025` |
408
-
409
- يتم تضمين Chromium (المستخدم لتوليد لقطات الشاشة عبر Puppeteer) داخل صورة الخادم الخلفي — دون الحاجة إلى حاوية إضافية.
410
-
411
- ---
412
-
413
376
  ## ملاحظات الترحيل من الإصدار 8
414
377
 
415
378
  إذا كنت تقوم بالترقية من الإصدار 8، لاحظ أن الإصدار 9 لا يتضمن تغييرات جذرية (breaking changes). ولكن إليك التغييرات الرئيسية:
@@ -80,6 +80,18 @@ curl -fsSL https://intlayer.org/install.sh | sh
80
80
 
81
81
  ---
82
82
 
83
+ ## إعداد التشغيل الأول
84
+
85
+ على نسخة جديدة (قاعدة بيانات فارغة)، يعيد فتح لوحة التحكم توجيهك إلى صفحة **`/init`**:
86
+
87
+ 1. أنشئ الحساب الأول. نظراً لأن مجموعة المستخدمين فارغة، يتم ترقية هذا الحساب تلقائياً إلى **super admin**.
88
+ 2. يتم إرسال بريد إلكتروني للتحقق (عبر Resend). التحقق من البريد الإلكتروني **إلزامي** — وهذا هو السبب في أنه يجب تعيين `RESEND_API_KEY` قبل أن تبدأ.
89
+ 3. انقر على الرابط في البريد الإلكتروني، ثم قم بتسجيل الدخول.
90
+
91
+ بمجرد وجود admin، يعيد `/init` التوجيه إلى صفحة تسجيل الدخول القياسية.
92
+
93
+ ---
94
+
83
95
  ## الخدمات
84
96
 
85
97
  | الخدمة | الصورة | المنفذ (المضيف) | الغرض |
@@ -99,7 +111,16 @@ curl -fsSL https://intlayer.org/install.sh | sh
99
111
 
100
112
  ## متغيرات البيئة
101
113
 
102
- يولّد المثبّت ملف `.env` جاهزاً للاستخدام. يصف الجدول أدناه كل متغير.
114
+ ### مطلوب
115
+
116
+ | المتغير | مثال | الوصف |
117
+ | ---------------------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
118
+ | `DB_ID` | `intlayer` | مستخدم MongoDB Atlas |
119
+ | `DB_MDP` | _(كلمة المرور الخاصة بك)_ | كلمة مرور MongoDB Atlas |
120
+ | `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | مضيف مجموعة MongoDB Atlas (المستخدم في URI `mongodb+srv://`) |
121
+ | `BETTER_AUTH_SECRET` | _(تم إنشاؤها)_ | سر بحجم 32 بايت لتوقيع الجلسة |
122
+ | `S3_SECRET_ACCESS_KEY` | _(تم إنشاؤها)_ | السر الخاص بـ MinIO المضمن |
123
+ | `RESEND_API_KEY` | _(مفتاحك)_ | البريد الإلكتروني المعاملاتي عبر Resend. مطلوب لإعداد التشغيل الأول إلا إذا قمت بتكوين mailer SMTP عام (انظر [Global mailer](#global-mailer)) |
103
124
 
104
125
  ### المطلوبة (مولّدة تلقائياً أو مطلوبة)
105
126
 
@@ -141,6 +162,26 @@ curl -fsSL https://intlayer.org/install.sh | sh
141
162
 
142
163
  ---
143
164
 
165
+ ### بريد عام
166
+
167
+ بشكل افتراضي، يتم إرسال جميع رسائل البريد الإلكترونية للمعاملات عبر Resend باستخدام `RESEND_API_KEY`. يمكن للنشرات ذاتية الاستضافة بدلاً من ذلك توجيه **كل** بريد إلكتروني — بما في ذلك رسائل البريد الإلكترونية غير المتعلقة بالمنظمة مثل إعادة تعيين كلمات المرور والروابط السحرية — عبر بريد عام مُعد باستخدام متغيرات البيئة.
168
+
169
+ عيّن `MAIL_PROVIDER` لتفعيله. عند عدم التعيين، يتم استخدام بريد Resend الافتراضي.
170
+
171
+ | المتغير | مثال | الوصف |
172
+ | -------------------- | ------------------------------ | ------------------------------------------------------------------------------ |
173
+ | `MAIL_PROVIDER` | `smtp` | النقل العام: `smtp` أو `resend`. اترك بدون تعيين لاستخدام الإعدادات الافتراضية |
174
+ | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | رأس المُرسل. يقبل عنوان مجرد أو تنسيق `Name <email>` |
175
+ | `MAIL_SMTP_HOST` | `smtp.acme.com` | مضيف SMTP (مطلوب عند `MAIL_PROVIDER=smtp`) |
176
+ | `MAIL_SMTP_PORT` | `587` | منفذ SMTP (الافتراضي `587`) |
177
+ | `MAIL_SMTP_SECURE` | `false` | TLS ضمني. عيّن `true` للمنفذ `465` |
178
+ | `MAIL_SMTP_USER` | _(اسم المستخدم الخاص بك)_ | اسم مستخدم SMTP (اختياري؛ تجاهل للمرحلات غير المصرح بها) |
179
+ | `MAIL_SMTP_PASSWORD` | _(كلمة المرور الخاصة بك)_ | كلمة مرور SMTP |
180
+
181
+ > الأولوية: بريد المنظمة الخاص بها (المُعد من لوحة المعلومات **Organization**) له الأولوية على البريد العام، والذي له بدوره الأولوية على مفتاح Resend الافتراضي.
182
+
183
+ ---
184
+
144
185
  ## ربط مشروعك بـ Intlayer
145
186
 
146
187
  بمجرد تشغيل المكدس، وجّه مشروعك نحو الخادم الخلفي ولوحة التحكم المستضافَين ذاتياً بدلاً من `intlayer.org`.
@@ -259,47 +300,11 @@ docker run --rm \
259
300
 
260
301
  ---
261
302
 
262
- ## استخدام وكيل عكسي (Nginx / Caddy)
263
-
264
- للنشر في الإنتاج، ضع وكيلاً عكسياً أمام حاويات التطبيق والخادم الخلفي بدلاً من كشفها مباشرة.
303
+ ## القيود
265
304
 
266
- ### مثال 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
- حدّث متغيرات البيئة التالية في `.env` لتتناسب مع نطاقاتك العامة:
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_*` في صورة لوحة التحكم عند وقت البناء. إذا غيّرتها بعد بناء الصورة، ستحتاج إلى إعادة بناء صورة `app` (`docker compose build app`) أو استخدام حقن التهيئة في وقت التشغيل.
305
+ - **MongoDB يجب أن يكون خارجياً (Atlas).** يتصل الخادم الخلفي فقط عبر `mongodb+srv://` (مبني من `DB_ID` / `DB_MDP` / `DB_CLUSTER`)، لذا لا يمكن استخدام `mongodb://host:27017` العادي — بما في ذلك `mongod` المدمج في الحاوية الخاصة — لا يمكن استخدامه. قدم مجموعة MongoDB Atlas.
306
+ - **لا توجد نطاقات مخصصة.** جميع عناوين URL الموجهة للمتصفح `VITE_*` مدرجة مباشرة في التطبيق وقت البناء، والصورة المنشورة تأتي مع قيم `localhost`. يجب الوصول إلى لوحة التحكم على `http://localhost:3000`؛ تقديمها على نطاق عام سيتطلب إعادة بناء الصورة مع عناوين URL المستهدفة المدمجة فيها وليس مدعوماً بشكل افتراضي.
307
+ - **البريد الإلكتروني يتطلب خادم بريد يعمل.** إعداد التشغيل الأول يفرض التحقق من البريد الإلكتروني، لذا يجب تكوين إما `RESEND_API_KEY` أو [خادم SMTP عام](#global-mailer) (`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`). بعد دخول المسؤول الأول، يمكن لكل منظمة أيضاً تكوين خادم SMTP أو Resend الخاص بها من لوحة التحكم.
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
- ### البريد الإلكتروني لا يُرسل
328
-
329
- افتراضياً، يتم التقاط جميع البريد الصادر بواسطة Mailpit. افتح `http://localhost:8025` لرؤية الرسائل المرسلة. لإرسال بريد إلكتروني حقيقي، اضبط `MAIL_PROVIDER=resend` و`RESEND_API_KEY=<your-key>` في `.env`، ثم أعد تشغيل الخادم الخلفي:
330
-
331
- ```sh
332
- docker compose restart backend
333
- ```
334
-
335
332
  ### دلو MinIO مفقود
336
333
 
337
334
  إذا لم تُشغَّل خدمة `minio-init` المؤقتة (أو شُغّلت قبل أن يكون MinIO جاهزاً)، أنشئ الدلو يدوياً: