@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
@@ -13,6 +13,10 @@ keywords:
13
13
  - Intlayer
14
14
  - Next.js
15
15
  - Vite
16
+ slugs:
17
+ - doc
18
+ - concept
19
+ - live-sync
16
20
  history:
17
21
  - version: 9.0.0
18
22
  date: 2026-07-08
@@ -24,26 +24,9 @@ history:
24
24
  author: aymericzip
25
25
  ---
26
26
 
27
- ## Приклад використання в React
27
+ # Документація Hook useDictionary
28
28
 
29
- Нижче наведено приклад того, як використовувати хук `useDictionary` у React-компоненті:
30
-
31
- ```tsx fileName="./ComponentExample.tsx" codeFormat={["typescript", "esm"]}
32
- import type { FC } from "react";
33
- import { useDictionary } from "react-intlayer";
34
- import componentContent from "./component.content";
35
-
36
- const ComponentExample: FC = () => {
37
- const { title, content } = useDictionary(componentContent);
38
-
39
- return (
40
- <div>
41
- <h1>{title}</h1>
42
- <p>{content}</p>
43
- </div>
44
- );
45
- };
46
- ```
29
+ Hook `useDictionary` дозволяє обробляти об'єкт, який виглядає як словник (містить ключі та вміст) та обробляти переклади, перелічення тощо всередині нього. На відміну від `useIntlayer`, який призначений для роботи з генерованими деклараціями словників, `useDictionary` є більш гнучким і може використовуватися з будь-яким об'єктом, що відповідає структурі словника.
47
30
 
48
31
  ## Інтеграція на сервері
49
32
 
@@ -48,3 +48,18 @@ import "vite-intlayer";
48
48
  | `intlayerProxy` | Плагін middleware для розробки, що обробляє визначення локалі та маршрутизацію. | - |
49
49
  | `intlayerMiddleware` | (**Застарілий**) Аліас для `intlayerProxy`. | - |
50
50
  | `intlayerPrune` | Плагін для tree-shake та видалення невикористаних словників під час збірки. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/packages/vite-intlayer/intlayerPrune.md) |
51
+
52
+ ### Утиліти
53
+
54
+ | Export | Опис | Пов'язана документація |
55
+ | ---------------------------- | -------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
56
+ | `createIntlayerProxyHandler` | Повертає framework-agnostic Node.js `(req, res, next)` middleware з логікою маршрутизації локалей. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/packages/vite-intlayer/intlayerProxy.md) |
57
+
58
+ ### Типи
59
+
60
+ | Export | Опис |
61
+ | ---------------------------- | ------------------------------------------------------------------------------------------------------------- |
62
+ | `IntlayerPluginOptions` | Параметри, прийняті `intlayer()`. Розширює `GetConfigurationOptions` за допомогою `compatCallers` та `proxy`. |
63
+ | `IntlayerProxyPluginOptions` | Параметри, прийняті `intlayerProxy()` та `createIntlayerProxyHandler()`. Включає `ignore` та `configOptions`. |
64
+ | `IntlayerCompilerOptions` | Параметри, прийняті `intlayerCompiler()`. Включає `configOptions` та `compilerConfig`. |
65
+ | `CompatCallerConfig` | Re-export з `@intlayer/babel`. Описує compat-adapter caller pattern для аналізу field-usage. |
@@ -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
+ #### З користувацьким шляхом до файлу конфігурації
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 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
+ ## Що робить плагін
105
+
106
+ ### 1. Підготовка словника
107
+
108
+ Перед початком збірки (та один раз на годину в режимі розробки), `intlayer` викликає `prepareIntlayer` для компіляції всіх файлів `.content.ts` в оптимізовані JSON-словники, які зберігаються в `.intlayer/`.
109
+
110
+ ### 2. Module aliases
111
+
112
+ Плагін додає Vite resolve aliases, щоб `import { myDict } from 'intlayer/dictionaries/my-dict'` розв'язувався до скомпільованого JSON файлу на диску. SSR builds використовують `ssr.noExternal`, щоб забезпечити, що всі пакети `@intlayer/*` об'єднані з застосованими aliases.
113
+
114
+ ### 3. Dev-server watcher
115
+
116
+ У режимі розробки запускається `chokidar` watcher. Коли змінюється файл `.content.ts`, словники перекомпілюються, а Vite's HMR поширює оновлення на браузер.
117
+
118
+ ### 4. Bundled locale-routing proxy (v9+)
119
+
120
+ З версії Intlayer v9 middleware `intlayerProxy` реєструється автоматично всередині `intlayer()`. Він обробляє:
121
+
122
+ - Визначення локалі за префіксом URL, cookies та заголовком `Accept-Language`.
123
+ - 301 переспрямування, коли визначена локаль не відповідає поточному URL.
124
+ - Внутрішні переписування URL, щоб framework бачив правильний параметр маршруту `[locale]`.
125
+
126
+ Proxy керується параметром `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
+ Щоб налаштувати поведінку proxy без окремого виклику `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/uk/packages/vite-intlayer/intlayerProxy.md) для повного довідника поведінки маршрутизації.
144
+
145
+ ### 5. Bundled compiler (v9+)
146
+
147
+ Коли `compiler.enabled` має значення `true` **та** `compiler.output` встановлено у вашій конфігурації Intlayer, `intlayer()` автоматично реєструє `intlayerCompiler`. Компілятор витягує вбудовані декларації контенту, написані безпосередньо у файлах компонентів, і записує їх у словники під час трансформації. Дивіться [документацію intlayerCompiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/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. **Аліаси**: він надає аліаси для доступу до словників у вашому застосунку.
49
- 4. **Tree-shaking**: він підтримує tree-shaking невикористаних перекладів через плагін `intlayerPrune`.
161
+ | Застарілий експорт | Заміна |
162
+ | ------------------ | ---------- |
163
+ | `intlayerPlugin` | `intlayer` |
164
+ | `intLayerPlugin` | `intlayer` |
@@ -30,16 +30,89 @@ author: aymericzip
30
30
 
31
31
  ## Використання
32
32
 
33
+ ### У складі `intlayer()` (рекомендовано)
34
+
35
+ Увімкніть pruning через конфіг Intlayer, і основний плагін буде керувати всім:
36
+
37
+ ```ts
38
+ // intlayer.config.ts
39
+ import { defineConfig } from "intlayer";
40
+
41
+ export default defineConfig({
42
+ build: {
43
+ optimize: true, // вмикає як pruning, так і 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
+ Якщо ви вручну складаєте стек плагінів, `intlayerPrune` та `intlayerMinify` спільно використовують об'єкт `PruneContext`, який має бути створений один раз і передан обом:
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), // опціональний, читає з того ж контексту
76
+ ],
40
77
  });
41
78
  ```
42
79
 
43
- ## Опис
80
+ ## Як це працює
81
+
82
+ ### 1. Аналіз використання (buildStart)
83
+
84
+ Під час `buildStart` плагін `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 pruning (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
+ Коли pruning успішно завершується, `intlayerPrune` також записує `pruneContext.dictionaryKeyToFieldRenameMap` — відображення оригінальних назв полів на короткі псевдоніми. `intlayerMinify` читає цю карту для перейменування полів у вихідному JSON, а pass перейменування Babel в `intlayerOptimize` оновлює доступи до властивостей у вихідних файлах відповідно.
109
+
110
+ ## Умови активації
111
+
112
+ `intlayerPrune` активний **лише** коли всі наступні умови виконані:
113
+
114
+ 1. Команда Vite — `build`.
115
+ 2. `build.optimize` має значення `true` (або `undefined`, що за замовчуванням дорівнює `true` для збірок).
116
+ 3. `build.purge` має значення `true` у вашій конфігурації Intlayer.
44
117
 
45
- Плагін аналізує ваш вихідний код, щоб визначити, які ключі словників фактично використовуються. Після цього він видаляє будь-який невикористаний вміст із bundled файлів словників. Це особливо корисно для великих проєктів з багатьма словниками, де лише підмножина використовується на певних сторінках або в компонентах.
118
+ Він автоматично **вимикається**, коли `editor.enabled` має значення `true`, оскільки редактору потрібна повна змістова частина словника.
@@ -373,21 +373,6 @@ curl -fsSL https://intlayer.org/install.sh | sh
373
373
 
374
374
  Встановлювач завантажує `docker-compose.yml` та `.env`, автоматично генерує необхідні секрети та запускає `docker compose up -d`. Все — дашборд, API, база даних, сховище об'єктів та транзакційна електронна пошта — працює локально у контейнерах.
375
375
 
376
- ### Включені сервіси
377
-
378
- | Сервіс | Призначення |
379
- | ----------------------------------------- | ------------------------------------------------------------------------------ |
380
- | **app** (TanStack Start) | UI дашборду на порту `3000` |
381
- | **backend** (Fastify/Bun) | REST API на порту `3100` |
382
- | **MongoDB 7** (одновузловий набір реплік) | Основна база даних |
383
- | **Redis 7** | Черги завдань та кешування |
384
- | **MinIO** | S3-сумісне сховище об'єктів (аватари, знімки екрана) |
385
- | **Mailpit** | Локальний SMTP-приймач + веб-інтерфейс для транзакційної пошти на порту `8025` |
386
-
387
- Chromium (що використовується для генерації знімків екрана через Puppeteer) вбудований у образ бекенду — додатковий контейнер не потрібен.
388
-
389
- ---
390
-
391
376
  ## Примітки щодо міграції з v8
392
377
 
393
378
  Якщо ви оновлюєтеся з v8, зверніть увагу, що v9 не містить критичних змін (breaking changes). Проте ось ключові зміни:
@@ -64,6 +64,32 @@ Chromium (використовується для генерації скрін
64
64
 
65
65
  ## Швидкий старт
66
66
 
67
+ Витягніть і запустіть опубліковану image, надавши ваші облікові дані та секрети MongoDB Atlas:
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
+ Потім відкрийте **http://localhost:3000**.
86
+
87
+ > Dashboard доступний на `localhost`. Див. [Обмеження](#limitations) — користувацькі домени не підтримуються опублікованою image.
88
+
89
+ ---
90
+
91
+ ## Швидкий старт
92
+
67
93
  ```sh
68
94
  curl -fsSL https://intlayer.org/install.sh | sh
69
95
  ```
@@ -99,7 +125,16 @@ curl -fsSL https://intlayer.org/install.sh | sh
99
125
 
100
126
  ## Змінні середовища
101
127
 
102
- Інсталятор генерує готовий до використання файл `.env`. Таблиця нижче описує кожну змінну.
128
+ ### Обов'язково
129
+
130
+ | Variable | Example | Description |
131
+ | ---------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
132
+ | `DB_ID` | `intlayer` | MongoDB Atlas користувач |
133
+ | `DB_MDP` | _(ваш пароль)_ | MongoDB Atlas пароль |
134
+ | `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | MongoDB Atlas cluster хост (використовується в URI `mongodb+srv://`) |
135
+ | `BETTER_AUTH_SECRET` | _(згенерований)_ | 32-байтовий secret для підписання сеансу |
136
+ | `S3_SECRET_ACCESS_KEY` | _(згенерований)_ | Secret для bundled MinIO |
137
+ | `RESEND_API_KEY` | _(ваш ключ)_ | Transactional email через Resend. Обов'язково для першого запуску, якщо ви не налаштуєте глобальний SMTP mailer (див. [Global mailer](#global-mailer)) |
103
138
 
104
139
  ### Обов'язкові (автоматично генеруються або запитуються)
105
140
 
@@ -141,6 +176,26 @@ curl -fsSL https://intlayer.org/install.sh | sh
141
176
 
142
177
  ---
143
178
 
179
+ ### Глобальний поштовик
180
+
181
+ За замовчуванням усі транзакційні електронні листи відправляються через Resend з використанням `RESEND_API_KEY`. Самостійно розгорнуті розгортання можуть натомість маршрутизувати **кожну** електронну пошту — включаючи не-організаційні листи, такі як скидання паролів і магічні посилання — через глобальний поштовик, налаштований за допомогою змінних середовища.
182
+
183
+ Встановіть `MAIL_PROVIDER`, щоб активувати це. Коли не встановлено, використовується поштовик за замовчуванням Resend.
184
+
185
+ | Змінна | Приклад | Опис |
186
+ | -------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------- |
187
+ | `MAIL_PROVIDER` | `smtp` | Глобальний транспорт: `smtp` або `resend`. Залиште не встановленим для використання за замовчуванням |
188
+ | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | Заголовок відправника. Приймає просту адресу або формат `Name <email>` |
189
+ | `MAIL_SMTP_HOST` | `smtp.acme.com` | Хост SMTP (обов'язково, коли `MAIL_PROVIDER=smtp`) |
190
+ | `MAIL_SMTP_PORT` | `587` | Порт SMTP (за замовчуванням `587`) |
191
+ | `MAIL_SMTP_SECURE` | `false` | Неявний TLS. Встановіть `true` для порту `465` |
192
+ | `MAIL_SMTP_USER` | _(ваш користувач)_ | Ім'я користувача SMTP (необов'язково; пропустіть для незаповнених реле) |
193
+ | `MAIL_SMTP_PASSWORD` | _(ваш пароль)_ | Пароль SMTP |
194
+
195
+ > Пріоритет: власний поштовик організації (налаштований з панелі керування **Organization**) має пріоритет над глобальним поштовиком, який у свою чергу має пріоритет над ключем Resend за замовчуванням.
196
+
197
+ ---
198
+
144
199
  ## Підключення вашого проекту Intlayer
145
200
 
146
201
  Після запуску стека направте свій проект на самостійно розгорнутий бекенд та дашборд замість `intlayer.org`.
@@ -259,47 +314,11 @@ docker run --rm \
259
314
 
260
315
  ---
261
316
 
262
- ## Використання зворотного проксі (Nginx / Caddy)
263
-
264
- Для виробничих розгортань розмістіть зворотний проксі перед контейнерами застосунку та бекенду замість прямого їх виставлення.
265
-
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
- }
317
+ ## Обмеження
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
- Оновіть наступні змінні `.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`) або використовувати ін'єкцію конфігурації під час виконання.
319
+ - **MongoDB має бути зовнішньою (Atlas).** Backend підключається лише через `mongodb+srv://` (побудований на основі `DB_ID` / `DB_MDP` / `DB_CLUSTER`), тому звичайний `mongodb://host:27017` — включаючи вбудований `mongod` контейнера — не може бути використаний. Надайте кластер MongoDB Atlas.
320
+ - **Немає користувацького домену.** Усі `VITE_*` URL-адреси, видимі браузером, вбудовуються в додаток під час збирання, а опублікований образ поставляється зі значеннями `localhost`. Доступ до панелі керування має здійснюватися через `http://localhost:3000`; обслуговування її на публічному домені потребувало б перебудови образу з цільовими URL-адресами вбудованими та не підтримується з коробки.
321
+ - **Email вимагає працюючого mailer.** Перша установка примушує перевірку електронної пошти, тому має бути налаштований або `RESEND_API_KEY`, або [глобальний SMTP mailer](#global-mailer) (`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`). Після того як перший адміністратор увійде, кожна організація також може налаштувати власний SMTP або Resend mailer з панелі керування.
303
322
 
304
323
  ---
305
324
 
@@ -315,15 +334,6 @@ docker compose logs mongo
315
334
  docker compose logs redis
316
335
  ```
317
336
 
318
- ### Дашборд не може дістатися до API
319
-
320
- Переконайтеся, що `VITE_BACKEND_URL` відповідає URL-адресі, за якою бекенд доступний з **браузера** (не мережі Docker). Якщо ви змінили порт бекенду або додали зворотний проксі, перезіберіть образ дашборду:
321
-
322
- ```sh
323
- docker compose build app
324
- docker compose up -d app
325
- ```
326
-
327
337
  ### Електронні листи не надсилаються
328
338
 
329
339
  За замовчуванням усі вихідні електронні листи захоплюються Mailpit. Відкрийте `http://localhost:8025`, щоб побачити надіслані повідомлення. Щоб надсилати реальні електронні листи, встановіть `MAIL_PROVIDER=resend` та `RESEND_API_KEY=<ваш-ключ>` у `.env`, а потім перезапустіть бекенд:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-06-07
3
+ updatedAt: 2026-08-09
4
4
  title: i18n بنڈل سائز اور کارکردگی کی آپٹیمائزیشن
5
5
  description: انٹرنیشنلائزیشن (i18n) مواد کو آپٹیمائز کرکے اپنی ایپلیکیشن کے بنڈل سائز کو کم کریں۔ جانیں کہ Intlayer کے ساتھ ڈکشنریوں کے لیے ٹری شیکنگ (tree shaking) اور لیزی لوڈنگ (lazy loading) کا استعمال کیسے کریں۔
6
6
  keywords:
@@ -16,6 +16,12 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 9.2.1
20
+ date: 2026-08-09
21
+ changes: "`purge` اور `minify` اب `@intlayer/swc` کے ذریعے Next.js پر کام کرتے ہیں — `babel.config.js` کی ضرورت نہیں"
22
+ - version: 8.12.0
23
+ date: 2026-06-24
24
+ changes: "حوالہ جاتی جدولوں میں Babel پلگ اِنز کو مطلوبہ پائپ لائن ترتیب (extract → purge → minify → optimize) میں درج کرنا"
19
25
  - version: 8.12.0
20
26
  date: 2026-06-07
21
27
  changes: "Babel/Webpack کے لیے `intlayerPurgeBabelPlugin` اور `intlayerMinifyBabelPlugin` شامل کیا گیا؛ پلگ ان پائپ لائن کو واضح کیا گیا"
@@ -191,12 +197,14 @@ Intlayer کا بلڈ آپٹیمائزیشن کئی الگ الگ پلگ انز
191
197
 
192
198
  یہ براہ راست Webpack پر مبنی سیٹ اپس کے لیے `babel.config.js` میں استعمال ہوتے ہیں (جیسے Babel کے ساتھ Next.js، CRA، کسٹم Webpack وغیرہ)۔
193
199
 
200
+ نیچے دیا گیا جدول انہیں مطلوبہ پائپ لائن ترتیب میں درج کرتا ہے (وہی ترتیب جس میں انہیں `babel.config.js` میں آنا چاہیے):
201
+
194
202
  | پلگ ان | یہ کیا کرتا ہے |
195
203
  | :---------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
196
204
  | `intlayerExtractBabelPlugin` | `.content.ts` فائلوں کو اسکین کرتا ہے اور مرتب کی گئی (compiled) ڈکشنریوں کو `.intlayer/` میں لکھتا ہے |
197
- | `intlayerOptimizeBabelPlugin` | `useIntlayer('key')` کو `useDictionary(hash)` میں بدل دیتا ہے اور متعلقہ ڈکشنری کا `import` شامل (inject) کرتا ہے |
198
205
  | `intlayerPurgeBabelPlugin` | تمام سورس (source) فائلوں کو اسکین کرتا ہے، مرتب شدہ `.intlayer/**/*.json` ڈکشنری فائلوں سے **غیر استعمال شدہ مواد (unused content fields)** کو ہٹا دیتا ہے |
199
206
  | `intlayerMinifyBabelPlugin` | JSON فائلوں اور سورس کوڈ دونوں میں **مواد کی فیلڈ کیز (keys) کا نام بدل کر** چھوٹے حروف تہجی (alias) رکھ دیتا ہے (جیسے `title` → `a`) |
207
+ | `intlayerOptimizeBabelPlugin` | `useIntlayer('key')` کو `useDictionary(hash)` میں بدل دیتا ہے اور متعلقہ ڈکشنری کا `import` شامل (inject) کرتا ہے |
200
208
 
201
209
  > **پلگ ان کی ترتیب اہم ہے۔** آپ کے `babel.config.js` میں purge اور minify کے پلگ انز کا optimize پلگ ان سے **پہلے** ہونا لازمی ہے۔ optimize مرحلہ (pass) `useIntlayer('key')` کو ایک مبہم `useDictionary(hash)` کال سے بدل دیتا ہے، جس سے ڈکشنری کی (key) کی وہ معلومات مٹ جاتی ہے جس کی purge اور minify مراحل کو ضرورت ہوتی ہے تاکہ وہ جان سکیں کہ کون سی فیلڈز استعمال ہو رہی ہیں۔
202
210
 
@@ -205,9 +213,9 @@ Intlayer کا بلڈ آپٹیمائزیشن کئی الگ الگ پلگ انز
205
213
  | آپشنز ہیلپر (Options helper) | کس کے ساتھ استعمال ہوتا ہے |
206
214
  | :--------------------------- | :---------------------------- |
207
215
  | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
208
- | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
209
216
  | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
210
217
  | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
218
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
211
219
 
212
220
  ### Vite پلگ انز (`vite-intlayer`)
213
221
 
@@ -220,6 +228,20 @@ Vite کے صارفین **انہیں کبھی بھی براہ راست کنفیگ
220
228
  | Dictionary minify | بالکل `intlayerMinifyBabelPlugin` کے JSON رائٹ مرحلے کی طرح |
221
229
  | Babel transform | بالکل `intlayerMinifyBabelPlugin` کے سورس کوڈ کے رینیم اور `intlayerOptimizeBabelPlugin` کی طرح |
222
230
 
231
+ ### SWC پلگ اِن (`@intlayer/swc`)
232
+
233
+ Next.js استعمال کرنے والے بھی **انہیں کبھی براہِ راست ترتیب نہیں دیتے**۔ **v9.2.1** سے، `next.config.ts` میں `withIntlayer()` صرف `build.purge` اور `build.minify` فلیگز کی بنیاد پر مکمل پائپ لائن چلاتا ہے — purge، minify اور import کی دوبارہ تحریر۔
234
+
235
+ کام دو حصوں میں بٹا ہوا ہے، کیونکہ SWC کا Wasm پلگ اِن ایک وقت میں ایک ہی فائل کو تبدیل کرتا ہے اور اسے فائل سسٹم تک رسائی نہیں ہوتی:
236
+
237
+ | مرحلہ | کہاں چلتا ہے | کیا کرتا ہے |
238
+ | :-------------------------------------------- | :----------------------------- | :--------------------------------------------------------------------------------------------------------- |
239
+ | استعمال کا تجزیہ + JSON purge/minify | Node، `withIntlayer()` کے اندر | ہر کمپوننٹ سورس فائل پڑھتا ہے، `.intlayer/**/*.json` دوبارہ لکھتا ہے، اور نام بدلنے کی جدولیں تیار کرتا ہے |
240
+ | سورس کی دوبارہ تحریر (`content.title` ← `.a`) | `@intlayer/swc` (Wasm) | نام بدلنے کی جدولیں آپ کے کوڈ میں متعلقہ پراپرٹی رسائیوں پر لاگو کرتا ہے |
241
+ | Import کی دوبارہ تحریر (`useIntlayer` ← dict) | `@intlayer/swc` (Wasm) | `intlayerOptimizeBabelPlugin` کی طرح |
242
+
243
+ یہ طے کرنا کہ _کون سے_ فیلڈز غیر استعمال شدہ ہیں اور ہر ایک کو _کون سا_ مختصر نام ملے گا، اس کے لیے فائلوں کے درمیان حالت اور فائل I/O درکار ہے، اس لیے وہ نصف حصہ Node میں چلتا ہے؛ SWC پلگ اِن کو صرف نتیجہ خیز جدولیں ملتی ہیں۔
244
+
223
245
  ## پلیٹ فارم کے لحاظ سے سیٹ اپ
224
246
 
225
247
  <Tabs>
@@ -227,10 +249,12 @@ Vite کے صارفین **انہیں کبھی بھی براہ راست کنفیگ
227
249
 
228
250
  ### Next.js
229
251
 
230
- Next.js کو آپٹیمائز پاس (import rewrite) کے لیے `@intlayer/swc` پلگ ان کی ضرورت ہوتی ہے، کیونکہ Next.js بلڈز کے لیے SWC کا استعمال کرتا ہے۔
252
+ Next.js کو `@intlayer/swc` پلگ اِن درکار ہے، کیونکہ Next.js بلڈ کے لیے SWC استعمال کرتا ہے۔ **v9.2.1** سے یہ اکیلا پیکیج پوری پائپ لائن کا احاطہ کرتا ہے — آپٹیمائز (import کی دوبارہ تحریر)، purge اور minify۔
231
253
 
232
254
  > یہ پلگ ان بائی ڈیفالٹ انسٹال نہیں ہوتا کیونکہ SWC کے پلگ انز Next.js کے لیے اب بھی تجرباتی مراحل میں ہیں۔ یہ مستقبل میں بدل سکتا ہے۔
233
255
 
256
+ > **Next.js 16.1.0 کم از کم ورژن ہے۔** یہ SWC کے آگے کی جانب ہم آہنگ Wasm پلگ اِن ABI پر بنایا گیا پہلا ریلیز ہے؛ اس سے پرانے ریلیز پلگ اِن کو مسترد کر دیتے ہیں۔ `withIntlayer` آپ کے پروجیکٹ کا Next.js ورژن پڑھتا ہے اور 16.1.0 سے نیچے پلگ اِن رجسٹر ہی نہیں کرتا — وہ بلڈز پھر بھی کامیاب ہوتے ہیں، بس بنڈل آپٹیمائزیشن کے بغیر چلتے ہیں۔
257
+
234
258
  <Tabs>
235
259
  <Tab value="npm">
236
260
 
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
265
289
 
266
290
  انسٹال ہونے کے بعد، Intlayer خود بخود پلگ ان کو شناخت کر کے اس کا استعمال شروع کر دے گا۔
267
291
 
268
- **purge اور minify** مراحل (فیلڈ کو ہٹانے اور رینیم کرنے) کے لیے، اس کے ساتھ `@intlayer/babel` انسٹال کریں اور Babel کے پلگ انز کو شامل کریں۔ چونکہ Next.js ٹرانسفارمیشن کے لیے SWC استعمال کرتا ہے لیکن پھر بھی پلگ ان کنفیگریشن کے لیے `babel.config.js` کو ایویلیوایٹ (evaluate) کرتا ہے، اس لیے Babel پلگ انز SWC سے پہلے ایک پری-پاس (pre-pass) کے طور پر چلتے ہیں۔
292
+ **Purge اور minify** مراحل (فیلڈ ہٹانا اور فیلڈ کا نام بدلنا) کے لیے کسی اضافی پیکیج یا `babel.config.js` کی ضرورت نہیں۔ اپنی کنفیگ کو `withIntlayer` سے لپیٹیں اور `intlayer.config.ts` میں فلیگز آن کریں:
269
293
 
270
- ```bash packageManager="npm"
271
- npm install -D @intlayer/babel
294
+ ```typescript fileName="next.config.ts"
295
+ import { withIntlayer } from "next-intlayer/server";
296
+ import type { NextConfig } from "next";
297
+
298
+ const nextConfig: NextConfig = {/* آپ کی کنفیگ */};
299
+
300
+ export default withIntlayer(nextConfig);
272
301
  ```
273
302
 
274
- ```javascript fileName="babel.config.js"
275
- const {
276
- intlayerPurgeBabelPlugin,
277
- intlayerMinifyBabelPlugin,
278
- getPurgePluginOptions,
279
- getMinifyPluginOptions,
280
- } = require("@intlayer/babel");
303
+ ```typescript fileName="intlayer.config.ts"
304
+ import type { IntlayerConfig } from "intlayer";
281
305
 
282
- module.exports = {
283
- presets: ["next/babel"],
284
- plugins: [
285
- // Purge: غیر استعمال شدہ مواد کو .intlayer/**/*.json سے ہٹا دیں
286
- [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
287
- // Minify: JSON اور سورس کوڈ میں مواد کی فیلڈ کیز کا نام بدلیں
288
- [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
289
- // نوٹ: intlayerOptimizeBabelPlugin کی یہاں ضرورت نہیں ہے کیونکہ
290
- // @intlayer/swc اسے useIntlayer → useDictionary ری رائٹ کو سنبھالتا ہے۔
291
- ],
306
+ const config: IntlayerConfig = {
307
+ build: {
308
+ purge: true, // بنڈل کیے گئے JSON سے غیر استعمال شدہ مواد کے فیلڈز ہٹاتا ہے
309
+ minify: true, // مواد کے فیلڈ کیز کو مختصر ناموں میں بدلتا ہے
310
+ },
292
311
  };
312
+
313
+ export default config;
293
314
  ```
294
315
 
316
+ `next build` کے دوران، `withIntlayer` آپ کے سورسز کا تجزیہ کرتا ہے، مرتب شدہ ڈکشنریز دوبارہ لکھتا ہے، اور نتیجے میں بننے والی فیلڈ نام بدلنے کی جدولیں `@intlayer/swc` کو دیتا ہے، جو آپ کے کوڈ میں متعلقہ پراپرٹی رسائیوں کو اپ ڈیٹ کرتا ہے۔
317
+
318
+ > `withIntlayerSync` نہیں بلکہ غیر ہم وقت (async) `withIntlayer` استعمال کریں۔ ہم وقت نسخہ تجزیے کی پائپ لائن نہیں چلاتا، اس لیے اس کے ساتھ purge اور minify کا کوئی اثر نہیں ہوتا۔
319
+
320
+ > Purge اور minify صرف `next build` پر چلتے ہیں — آپٹیمائز پائپ لائن `next dev` کے دوران بند رہتی ہے۔
321
+
322
+ > جب کمپیٹ اڈاپٹر کالرز ترتیب دیے گئے ہوں تب بھی یہ غیر فعال ہو جاتے ہیں (`swcExtraCallers`، جنہیں `@intlayer/next-intl` یا `@intlayer/react-i18next` جیسے کمپیٹ پیکیجز مقرر کرتے ہیں): وہ کال سائٹس استعمال کے تجزیہ کار کو نظر نہیں آتیں، اس لیے purge ایسے فیلڈز ہٹا دیتا جو کوڈ اب بھی پڑھتا ہے۔ Import کی دوبارہ تحریر فعال رہتی ہے۔
323
+
324
+ **پرانے ورژنز (9.2.1 سے پہلے)** میں `@intlayer/babel` اور ایک ایسی `babel.config.js` درکار تھی جو `intlayerPurgeBabelPlugin` اور `intlayerMinifyBabelPlugin` کا اعلان کرے۔ اب اس فائل کی ضرورت نہیں اور اسے حذف کیا جا سکتا ہے۔
325
+
295
326
  </Tab>
296
327
  <Tab value="vite">
297
328
 
@@ -447,6 +478,8 @@ export default config;
447
478
 
448
479
  > منی فیکیشن کو چھوڑ (skipped) دیا جاتا ہے جب `optimize` کی ویلیو `false` ہو، یا جب `editor.enabled` کی ویلیو `true` ہو (ویژول ایڈیٹر کو ایڈیٹنگ کی اجازت دینے کے لیے اصل فیلڈ کے ناموں کی ضرورت ہوتی ہے)۔
449
480
 
481
+ > Next.js پر، minification تب بھی چھوڑ دی جاتی ہے جب `@intlayer/swc` نصب نہ ہو یا لوڈ نہ ہو سکے (16.1.0 سے نیچے کا Next.js)۔ سورس میں رسائیوں کو دوبارہ لکھنے والا نصف حصہ یہی پلگ اِن ہے، اس لیے اس کے بغیر ڈکشنریز کے نام بدلنے سے آپ کا کوڈ ایسے فیلڈ نام پڑھتا رہ جائے گا جو اب موجود نہیں۔
482
+
450
483
  > منی فیکیشن ان ڈکشنریوں کے لیے بھی نظرانداز کی جاتی ہے جنہیں `importMode: 'fetch'` کے ذریعے لوڈ کیا گیا ہو کیونکہ ان کا JSON ریموٹ API سے اصل فیلڈ ناموں کے ساتھ پیش کیا جاتا ہے — کلائنٹ سائیڈ کیز کا نام بدلنے سے سرور/کلائنٹ کا کنٹریکٹ (contract) ٹوٹ جائے گا۔
451
484
 
452
485
  ### پرجنگ (غیر استعمال شدہ فیلڈز کو ہٹانا)
@@ -475,7 +508,7 @@ export default config;
475
508
  { "title": "…", "subtitle": "…" }
476
509
  ```
477
510
 
478
- > جب `optimize` کی ویلیو `false` ہو یا جب `editor.enabled` کی ویلیو `true` ہو تو پرجنگ (Purging) چھوڑ (skipped) دی جاتی ہے۔
511
+ > جب `optimize` کی ویلیو `false` ہو یا جب `editor.enabled` کی ویلیو `true` ہو تو پرجنگ (Purging) چھوڑ (skipped) دی جاتی ہے۔ Next.js پر یہ تب بھی چھوڑ دیا جاتا ہے جب `@intlayer/swc` دستیاب نہ ہو، اور جب کمپیٹ اڈاپٹر کالرز ترتیب دیے گئے ہوں۔
479
512
 
480
513
  > پرجنگ کو حفاظتی تدابیر (conservatively) کے طور پر ان حالات میں بھی چھوڑ دیا جاتا ہے جب کوئی سورس فائل پارس (parse) نہیں ہو پاتی، یا جب `useIntlayer` کا نتیجہ کسی ویری ایبل کو تفویض (assign) کر دیا جائے اور پھر ان طریقوں سے آگے بڑھایا جائے جن کا اسٹیٹک اینالائزر کھوج نہیں لگا سکتا (جیسے اسپریڈ کو کسی آبجیکٹ میں ڈالنا، ڈسٹرکچر کیے بغیر پروپ کے طور پر بھیجنا)۔ ان صورتوں میں، مکمل ڈکشنری محفوظ رکھی جاتی ہے۔
481
514