@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
@@ -0,0 +1,222 @@
1
+ ---
2
+ createdAt: 2026-07-08
3
+ updatedAt: 2026-07-08
4
+ title: Intlayer Analytics | Отслеживание показов контента и проведение A/B-тестирования
5
+ description: Узнайте, как @intlayer/analytics отслеживает просмотры страниц/локалей и показы контента, а также как использовать это для проведения A/B-тестирования вашего контента Intlayer.
6
+ keywords:
7
+ - Analytics
8
+ - A/B-тестирование
9
+ - Аудитория
10
+ - Интернационализация
11
+ - Документация
12
+ - Intlayer
13
+ - Next.js
14
+ - JavaScript
15
+ - React
16
+ slugs:
17
+ - doc
18
+ - concept
19
+ - analytics
20
+ history:
21
+ - version: 9.0.0
22
+ date: 2026-07-08
23
+ changes: "Init doc — пакет @intlayer/analytics, отслеживание на уровне провайдера/узла, A/B-тестирование, дашборд"
24
+ author: aymericzip
25
+ ---
26
+
27
+ # Документация Intlayer Analytics
28
+
29
+ `@intlayer/analytics` — это дополнительный пакет, который показывает, **какой контент на самом деле видят** ваши посетители (какая страница, в какой локали и какой именно фрагмент переведенного контента), чтобы вы могли лучше понимать свою аудиторию и **проводить A/B-тестирование контента**.
30
+
31
+ ## Содержание
32
+
33
+ <TOC/>
34
+
35
+ ---
36
+
37
+ ## Что отслеживается
38
+
39
+ `@intlayer/analytics` объединяет в пакеты три типа анонимных событий:
40
+
41
+ | Событие | Где фиксируется | О чем оно говорит |
42
+ | ------------------ | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
43
+ | `page_view` | На уровне провайдера (`IntlayerProvider`) | Какую страницу и локаль просмотрел пользователь при начальной загрузке, смене маршрута или смене локали. |
44
+ | `content_exposure` | На уровне узла (`useIntlayer` / плагины) | Какой ключ словаря / путь к ключу был фактически разрешен и отображен — и, если это часть эксперимента, какой **вариант**. |
45
+ | `conversion` | Везде, где вызывается `useConversion()` | Достижение цели (регистрация, клик, покупка...), связанное с A/B-вариантом, который видел пользователь в этой сессии. |
46
+
47
+ События собираются в памяти и отправляются как **один пакетный запрос примерно каждые 20 секунд** — а не при каждом нажатии клавиши или рендеринге — поэтому аналитика никогда не влияет на время первого рендеринга и не добавляет запросы на каждое взаимодействие.
48
+
49
+ ## Как это работает для A/B-тестирования контента
50
+
51
+ Intlayer уже позволяет вам объявлять [Варианты](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dynamic_dictionaries/index.md) контента (например, словарь `hero-banner` с вариантами `control` и `black_friday`). `@intlayer/analytics` замыкает цикл:
52
+
53
+ 1. `getVariant(experimentKey, variants)` детерминированно назначает каждую анонимную сессию варианту — это чистая функция от ID сессии и ключа эксперимента, поэтому назначение **стабильно на протяжении всей сессии** и не требует **серверных запросов** до первого рендеринга (без мерцания и сдвигов макета).
54
+ 2. Каждое событие `content_exposure` содержит показанный `variant`.
55
+ 3. `useConversion()` позволяет связать цель (например, `"cta_click"`) с этим вариантом.
56
+ 4. Эндпоинт результатов экспериментов в дашборде сравнивает коэффициенты конверсии по вариантам, включая статистическую значимость (z-тест).
57
+
58
+ ## Установка
59
+
60
+ `@intlayer/analytics` — это **одноранговая (peer), опциональная** зависимость. Фреймворки не устанавливают её автоматически. Добавьте её вместе с `intlayer`:
61
+
62
+ ```bash packageManager="npm"
63
+ npm install @intlayer/analytics
64
+ ```
65
+
66
+ ```bash packageManager="yarn"
67
+ yarn add @intlayer/analytics
68
+ ```
69
+
70
+ ```bash packageManager="pnpm"
71
+ pnpm add @intlayer/analytics
72
+ ```
73
+
74
+ ```bash packageManager="bun"
75
+ bun add @intlayer/analytics
76
+ ```
77
+
78
+ Если вы её не установите, все точки интеграции будут разрешаться в пустые операции (no-op) — см. [Нулевые затраты, если не установлено](#нулевые-затраты-если-не-установлено) ниже.
79
+
80
+ ## Настройка
81
+
82
+ Аналитика **повторно использует существующий блок конфигурации `editor`** — вам не нужно заполнять отдельную схему конфигурации для `analytics`:
83
+
84
+ ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
85
+ import type { IntlayerConfig } from "intlayer";
86
+
87
+ const config: IntlayerConfig = {
88
+ editor: {
89
+ backendURL: "https://back.intlayer.org", // Также используется как конечная точка для сбора аналитики
90
+ clientId: "your-client-id", // Также используется как ключ проекта аналитики
91
+ clientSecret: "your-client-secret",
92
+ },
93
+ };
94
+
95
+ export default config;
96
+ ```
97
+
98
+ - `editor.backendURL` — базовый URL, на который отправляются события аналитики (`POST {backendURL}/api/analytics/events`).
99
+ - `editor.clientId` — открытый ключ проекта, присваиваемый каждому принятому событию. Он также действует как **переключатель включения**: аналитика остается полностью отключенной (и удаляется при tree-shaking, см. ниже), пока не настроен `clientId`.
100
+
101
+ Если вы самостоятельно размещаете (self-host) Intlayer, аналитика автоматически указывает на ваш собственный экземпляр, поскольку она использует общий `editor.backendURL`.
102
+
103
+ ## Поддержка фреймворков
104
+
105
+ Аналитика встроена в общий `IntlayerProvider` из `react-intlayer`, поэтому она доступна уже сегодня везде, где используется этот провайдер:
106
+
107
+ | Фреймворк | Статус |
108
+ | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
109
+ | React | ✅ Доступно |
110
+ | Next.js (`next-intlayer`) | ✅ Доступно (через `react-intlayer`) |
111
+ | React Native / Expo (`react-native-intlayer`) | ✅ Доступно (через `react-intlayer`) |
112
+ | Vue, Svelte, Angular, Solid, Preact, Lit, Astro, Vanilla | 🚧 Запланировано — тот же клиент, привязки на уровне провайдера по образцу развертывания `@intlayer/editor` |
113
+
114
+ ## Использование
115
+
116
+ ### Автоматическое отслеживание на уровне провайдера
117
+
118
+ Никаких изменений в коде не требуется. Как только установлен `@intlayer/analytics` и настроен `editor.clientId`, `IntlayerProvider` автоматически:
119
+
120
+ - инициализирует клиент аналитики при монтировании,
121
+ - записывает `page_view` при начальной загрузке,
122
+ - записывает `page_view` при каждой смене локали,
123
+ - запускает цикл очистки (flush) с интервалом около 20 с и отправляет оставшиеся события при размонтировании / закрытии вкладки (через `navigator.sendBeacon`, с откатом на `fetch(..., { keepalive: true })`).
124
+
125
+ ### Автоматическое отслеживание на уровне узла
126
+
127
+ Каждый раз, когда `useIntlayer` разрешает фрагмент контента для отображения, интерпретатор сообщает о событии `content_exposure` для этого точного `dictionaryKey` + пути к ключу + локали — опять же, никаких изменений в коде не требуется. Повторяющиеся показы одного и того же узла в пределах окна очистки объединяются в одно событие со счетчиком (`count`), поэтому список, перерисовывающийся 50 раз, не отправляет 50 событий.
128
+
129
+ ### Отслеживание конверсий для A/B-тестирования
130
+
131
+ Используйте `useConversion()`, чтобы связать цель с вариантом, который видела сессия:
132
+
133
+ ```tsx fileName="CTAButton.tsx" codeFormat="tsx"
134
+ import { useConversion } from "react-intlayer";
135
+
136
+ const CTAButton = () => {
137
+ const trackConversion = useConversion();
138
+
139
+ return (
140
+ <button
141
+ onClick={() =>
142
+ trackConversion({
143
+ experimentKey: "homepage-hero",
144
+ variant: "black_friday",
145
+ goal: "cta_click",
146
+ })
147
+ }
148
+ >
149
+ Начать
150
+ </button>
151
+ );
152
+ };
153
+ ```
154
+
155
+ ### Разрешение варианта на стороне клиента
156
+
157
+ ```tsx fileName="useHeroVariant.ts" codeFormat="tsx"
158
+ import { getGlobalAnalyticsClient } from "@intlayer/analytics/client";
159
+
160
+ const client = getGlobalAnalyticsClient();
161
+ const variant = client?.getVariant("homepage-hero", [
162
+ "control",
163
+ "black_friday",
164
+ ]);
165
+ ```
166
+
167
+ ## Конфиденциальность и производительность
168
+
169
+ - **Анонимность по дизайну**: сессии идентифицируются по ротируемому id; сервер когда-либо сохраняет только **SHA-256 хэш** этого id — никогда сам id и никогда IP-адрес.
170
+ - **Приблизительное местоположение**: только код страны, полученный из заголовков геолокации CDN (`cf-ipcountry`, `x-vercel-ip-country`, ...) — IP не считывается и не сохраняется.
171
+ - **URL исключают параметры поиска** по умолчанию, поэтому строки запроса никогда не фиксируются.
172
+ - **Семплирование**: `sampleRate` позволяет сохранять только часть событий показа контента в приложениях с высоким трафиком.
173
+ - **Пакетная передача**: один запрос примерно каждые 20 секунд (`flushInterval`) или раньше, если буфер заполнен (`maxBufferSize`) — никогда не отправляется один запрос на каждое событие.
174
+
175
+ ### Нулевые затраты, если не установлено
176
+
177
+ `@intlayer/analytics` следует тому же паттерну опциональных зависимостей, что и `@intlayer/editor`:
178
+
179
+ - каждая точка интеграции загружает пакет через **динамический `import()`, обернутый в `try/catch`** — приложение, которое никогда не устанавливает `@intlayer/analytics`, не увеличивает размер сборки (bundle) и не тратит ресурсы во время выполнения, а также никогда не видит ошибок;
180
+ - переменная окружения времени компиляции (`INTLAYER_ANALYTICS_ENABLED`), автоматически устанавливаемая в `'false'` пакетом `@intlayer/config`, когда не настроен `editor.clientId`, позволяет бандлерам **удалять весь код интеграции (dead-code-eliminate)**;
181
+ - аналитика отключена внутри iframe предварительного просмотра редактора/CMS Intlayer, поэтому сессии в редакторе никогда не учитываются как реальный трафик.
182
+
183
+ ## Дашборд: Страница Analytics
184
+
185
+ Как только ваш проект соберет события, страница **Analytics** в [дашборде Intlayer](https://app.intlayer.org/analytics) (видна в боковой панели после выбора проекта) покажет:
186
+
187
+ - **Активные пользователи** — уникальные посетители за выбранное скользящее окно (7 / 30 / 90 дней).
188
+ - **Пользователи сегодня** и **пользователи за последние 7 дней**.
189
+ - **Просмотры страниц** за выбранное окно.
190
+ - **График динамики** уникальных посетителей по дням.
191
+ - Вкладки с разбивкой по **Локалям** и **Местоположению**, ранжирующие вашу аудиторию по локали и по стране.
192
+
193
+ ## Справочник API бэкенда
194
+
195
+ Все эндпоинты для чтения требуют аутентификации; прием данных публичный и ассоциируется по `clientId` в теле запроса.
196
+
197
+ | Метод | Эндпоинт | Описание |
198
+ | ------ | ------------------------------------------- | ------------------------------------------------------------------------------------ |
199
+ | `POST` | `/api/analytics/events` | Прием пакета событий (публичный, ассоциируется по `clientId` в теле). |
200
+ | `GET` | `/api/analytics/overview` | Общие показатели страниц/локалей для аутентифицированного проекта. |
201
+ | `GET` | `/api/analytics/audience?days=30` | Уникальные посетители, просмотры страниц, серии по дням, разбивка (локаль + страна). |
202
+ | `GET` | `/api/analytics/content-stats` | Общие показатели показов контента, сгруппированные по ключу словаря / пути / локали. |
203
+ | `GET` | `/api/analytics/experiments/:experimentKey` | Коэффициенты конверсии по вариантам и статистическая значимость для A/B-теста. |
204
+
205
+ Вы также можете вызывать их программно с помощью [CMS SDK](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md):
206
+
207
+ ```ts fileName="analytics.ts"
208
+ import { createIntlayerCMS } from "@intlayer/api";
209
+ import { analyticsEndpoint } from "@intlayer/api/analytics";
210
+
211
+ const cms = createIntlayerCMS();
212
+
213
+ const { data: audience } = await analyticsEndpoint(cms).getAudience(30);
214
+ ```
215
+
216
+ ## Полезные ссылки
217
+
218
+ - [Динамические словари - Коллекции и варианты](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dynamic_dictionaries/index.md)
219
+ - [Intlayer CMS - CMS SDK](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md)
220
+ - [Визуальный редактор Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md)
221
+ - [Справочник по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md)
222
+ - [Руководство по самостоятельному хостингу (Self-Hosting)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/self_hosting.md)
@@ -75,11 +75,30 @@ Intlayer также будет учитывать следующую инстр
75
75
 
76
76
  При использовании опции пути для записи в другой файл механизм заполнения работает через отношение _master-slave_ между файлами объявления содержимого. Основной файл (master) служит источником истины, и при его обновлении Intlayer автоматически применит эти изменения к производным (заполненным) файлам объявления, указанным в пути.
77
77
 
78
- # Переводы файлов декларации автозаполнения контента
78
+ ### Кастомизация по локалям
79
79
 
80
- **Файлы декларации автозаполнения контента**, это способ ускорить ваш процесс разработки.
80
+ Вы также можете кастомизировать поведение для каждой локали, используя объект:
81
81
 
82
- Механизм автозаполнения работает через _мастер-слейв_ отношения между файлами декларации контента. Когда основной (мастер) файл обновляется, Intlayer автоматически применяет эти изменения к производным (автозаполненным) файлам декларации.
82
+ ```ts fileName="intlayer.config.ts"
83
+ const config: IntlayerConfig = {
84
+ content: {
85
+ internationalization: {
86
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.POLISH],
87
+ defaultLocale: Locales.ENGLISH,
88
+ requiredLocales: [Locales.ENGLISH], // Рекомендуется, чтобы избежать Property 'pl' is missing in type '{ en: string; xxx } on your t function if
89
+ },
90
+ },
91
+ dictionary: {
92
+ fill: {
93
+ en: true, // Заполнить и отредактировать текущий файл для английского языка
94
+ fr: "./translations/fr.json", // Создать отдельный файл для французского языка
95
+ es: false, // Отключить заполнение для испанского языка
96
+ },
97
+ },
98
+ };
99
+ ```
100
+
101
+ Это позволяет вам иметь разные поведения заполнения для разных локалей в одном проекте.
83
102
 
84
103
  ```ts fileName="src/components/example/example.content.ts"
85
104
  import { Locales, type Dictionary } from "intlayer";
@@ -87,16 +106,16 @@ import { Locales, type Dictionary } from "intlayer";
87
106
  const exampleContent = {
88
107
  key: "example",
89
108
  locale: Locales.ENGLISH,
90
- autoFill: "./example.content.json",
109
+ fill: "./example.content.json",
91
110
  content: {
92
- contentExample: "Это пример контента", // пример контента
111
+ contentExample: "This is an example of content",
93
112
  },
94
113
  } satisfies Dictionary;
95
114
 
96
115
  export default exampleContent;
97
116
  ```
98
117
 
99
- Вот [файл декларации контента для каждого локаля](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/per_locale_file.md), использующий инструкцию `autoFill`.
118
+ Вот [файл объявления содержимого для каждой локали](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/per_locale_file.md) с использованием инструкции `fill`.
100
119
 
101
120
  Затем, когда вы выполните следующую команду:
102
121
 
@@ -116,7 +135,7 @@ pnpm intlayer fill --file 'src/components/example/example.content.ts'
116
135
  bun x intlayer fill --file 'src/components/example/example.content.ts'
117
136
  ```
118
137
 
119
- Intlayer автоматически сгенерирует производный файл декларации по пути `src/components/example/example.content.json`, заполняя все локали, которые ещё не объявлены в основном файле.
138
+ Intlayer автоматически создаст производный файл объявления в `src/components/example/example.content.json`, заполняя все локали, которые еще не объявлены в основном файле.
120
139
 
121
140
  ```json5 fileName="src/components/example/example.content.json"
122
141
  {
@@ -133,7 +152,7 @@ Intlayer автоматически сгенерирует производны
133
152
  }
134
153
  ```
135
154
 
136
- После этого оба файла деклараций будут объединены в один словарь, доступный через стандартный хук `useIntlayer("example")` (react) / композицию (vue).
155
+ После этого оба файла объявления будут объединены в один словарь, доступный с помощью стандартного хука `useIntlayer("example")` (react) / композабла (vue).
137
156
 
138
157
  ## Глобальная конфигурация
139
158
 
@@ -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: Оптимизация размера сборки (bundle) i18n и производительности
5
5
  description: Уменьшите размер сборки вашего приложения за счет оптимизации контента интернационализации (i18n). Узнайте, как использовать tree shaking и ленивую загрузку (lazy loading) для словарей с помощью Intlayer.
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` теперь работают в Next.js через `@intlayer/swc` — файл `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: "Добавлены `intlayerPurgeBabelPlugin` и `intlayerMinifyBabelPlugin` для Babel/Webpack; уточнен процесс работы плагинов (pipeline)"
@@ -191,12 +197,14 @@ Intlayer использует **компонентный подход**. В от
191
197
 
192
198
  Они используются непосредственно в `babel.config.js` для сборок на базе Webpack (Next.js с Babel, CRA, пользовательский Webpack и т.д.).
193
199
 
200
+ В таблице ниже они перечислены в требуемом порядке конвейера (в том же порядке, в котором они должны идти в `babel.config.js`):
201
+
194
202
  | Плагин | Что делает |
195
203
  | :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------- |
196
204
  | `intlayerExtractBabelPlugin` | Сканирует `.content.ts` файлы и записывает скомпилированные словари в `.intlayer/` |
197
- | `intlayerOptimizeBabelPlugin` | Переписывает `useIntlayer('key')` → `useDictionary(hash)` и внедряет (import) соответствующий словарь |
198
205
  | `intlayerPurgeBabelPlugin` | Сканирует все исходные файлы, удаляет **неиспользуемые поля контента** из скомпилированных `.intlayer/**/*.json` файлов словарей |
199
206
  | `intlayerMinifyBabelPlugin` | **Переименовывает ключи полей контента** в короткие буквенные алиасы (например, `title` → `a`) как в JSON-файлах, так и в исходном коде |
207
+ | `intlayerOptimizeBabelPlugin` | Переписывает `useIntlayer('key')` → `useDictionary(hash)` и внедряет (import) соответствующий словарь |
200
208
 
201
209
  > **Порядок плагинов имеет значение.** В вашем `babel.config.js` плагины purge и minify должны быть указаны **до** плагина optimize. Оптимизация (optimize) заменяет `useIntlayer('key')` непрозрачным вызовом `useDictionary(hash)`, стирая информацию о ключе словаря, которая нужна плагинам purge и minify для определения того, какие поля используются.
202
210
 
@@ -205,9 +213,9 @@ Intlayer использует **компонентный подход**. В от
205
213
  | Помощник параметров | Используется вместе с |
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 @@ Intlayer использует **компонентный подход**. В от
220
228
  | Dictionary minify | То же самое, что и запись JSON плагином `intlayerMinifyBabelPlugin` |
221
229
  | Babel transform | То же самое, что и переименование исходного кода `intlayerMinifyBabelPlugin` + `intlayerOptimizeBabelPlugin` |
222
230
 
231
+ ### Плагин SWC (`@intlayer/swc`)
232
+
233
+ Пользователи Next.js **тоже никогда не настраивают это напрямую**. Начиная с **v9.2.1**, `withIntlayer()` в `next.config.ts` выполняет весь конвейер — purge, минификацию и переписывание импортов — опираясь только на флаги `build.purge` и `build.minify`.
234
+
235
+ Работа разделена на две части, поскольку Wasm-плагин SWC преобразует по одному файлу за раз и не имеет доступа к файловой системе:
236
+
237
+ | Проход | Где выполняется | Что делает |
238
+ | :---------------------------------------------------- | :---------------------------- | :----------------------------------------------------------------------------------------------------------- |
239
+ | Анализ использования + purge/минификация JSON | Node, внутри `withIntlayer()` | Читает каждый исходный файл компонента, переписывает `.intlayer/**/*.json`, формирует таблицы переименования |
240
+ | Переписывание исходного кода (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | Применяет таблицы переименования к соответствующим обращениям к свойствам в вашем коде |
241
+ | Переписывание импортов (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | То же, что `intlayerOptimizeBabelPlugin` |
242
+
243
+ Определение того, _какие_ поля не используются и _какой_ псевдоним получит каждое из них, требует состояния между файлами и файлового ввода-вывода, поэтому эта половина выполняется в Node; плагин SWC получает лишь готовые таблицы.
244
+
223
245
  ## Настройка по платформам
224
246
 
225
247
  <Tabs>
@@ -227,10 +249,12 @@ Intlayer использует **компонентный подход**. В от
227
249
 
228
250
  ### Next.js
229
251
 
230
- Next.js требует использования плагина `@intlayer/swc` для оптимизации (перезаписи импортов), так как Next.js использует SWC при сборке.
252
+ Next.js требует плагин `@intlayer/swc`, поскольку Next.js использует SWC для сборки. Начиная с **v9.2.1** этот единственный пакет покрывает весь конвейер — оптимизацию (переписывание импортов), purge и минификацию.
231
253
 
232
254
  > Этот плагин не устанавливается по умолчанию, поскольку плагины SWC всё еще находятся на стадии эксперимента для Next.js. Это может измениться в будущем.
233
255
 
256
+ > **Next.js 16.1.0 — минимальная версия.** Это первый релиз, построенный на прямо совместимом ABI Wasm-плагинов SWC; более ранние релизы отклоняют плагин. `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 для преобразований, но по-прежнему вычисляет (evaluates) `babel.config.js` для конфигурации плагинов, плагины Babel запускаются в качестве предварительного этапа до SWC.
292
+ Проходы **purge и минификации** (удаление и переименование полей) не требуют ни дополнительного пакета, ни `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
+ > Используйте асинхронный `withIntlayer`, а не `withIntlayerSync`. Синхронный вариант не запускает конвейер анализа, поэтому purge и минификация с ним не действуют.
319
+
320
+ > Purge и минификация выполняются только при `next build` — конвейер оптимизации отключён во время `next dev`.
321
+
322
+ > Они также отключаются, когда настроены вызывающие из адаптеров совместимости (`swcExtraCallers`, задаваемые пакетами совместимости, такими как `@intlayer/next-intl` или `@intlayer/react-i18next`): эти места вызова невидимы для анализатора использования, поэтому purge удалил бы поля, которые код всё ещё читает. Переписывание импортов остаётся активным.
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
  > Процесс минификации пропускается, если `optimize` установлен в `false` или когда `editor.enabled` имеет значение `true` (визуальный редактор требует сохранения оригинальных имен полей для возможности редактирования).
449
480
 
481
+ > В Next.js минификация также пропускается, когда `@intlayer/swc` не установлен или не может быть загружен (Next.js ниже 16.1.0). Плагин — это та половина, которая переписывает обращения в исходном коде, поэтому переименование словарей без него оставило бы ваш код читающим имена полей, которых больше нет.
482
+
450
483
  > Минификация также пропускается для словарей, загружаемых через `importMode: 'fetch'`, поскольку их JSON выдается удаленным API с оригинальными именами полей — изменение ключей на клиентской стороне нарушит контракт сервер/клиент.
451
484
 
452
485
  ### Удаление неиспользуемых полей (Purging)
@@ -475,7 +508,7 @@ export default config;
475
508
  { "title": "…", "subtitle": "…" }
476
509
  ```
477
510
 
478
- > Процесс очистки пропускается, если `optimize` установлен в `false` или когда `editor.enabled` имеет значение `true`.
511
+ > Процесс очистки пропускается, если `optimize` установлен в `false` или когда `editor.enabled` имеет значение `true`. В Next.js он дополнительно пропускается, когда `@intlayer/swc` недоступен и когда настроены вызывающие из адаптеров совместимости.
479
512
 
480
513
  > Очистка также отменяется из соображений надежности, когда исходный файл не удается разобрать (парсинг), или если результат работы `useIntlayer` присваивается переменной и передается способами, которые статический анализатор не может проконтролировать (например, spreading объекта, передача через prop без деструктуризации). В этих случаях сохраняется весь словарь целиком.
481
514
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2024-08-13
3
- updatedAt: 2026-07-11
3
+ updatedAt: 2026-08-06
4
4
  title: Конфигурация (Configuration)
5
5
  description: Узнайте, как настроить Intlayer для вашего приложения. Разберитесь в различных параметрах и опциях, доступных для настройки Intlayer в соответствии с вашими потребностями.
6
6
  keywords:
@@ -14,6 +14,9 @@ slugs:
14
14
  - concept
15
15
  - configuration
16
16
  history:
17
+ - version: 9.1.3
18
+ date: 2026-08-06
19
+ changes: "Сделать `routing.enableProxy` трёхпозиционным: не задано (auto), `true`, `false`"
17
20
  - version: 9.0.0
18
21
  date: 2026-07-11
19
22
  changes: "Добавлена конфигурация `analytics`"
@@ -235,6 +238,19 @@ const config: IntlayerConfig = {
235
238
  */
236
239
  mode: "prefix-no-default",
237
240
 
241
+ /**
242
+ * Включает прокси маршрутизации локалей Intlayer (middleware).
243
+ * Отвечает за определение локали, редиректы и перезапись URL в dev, preview и SSR.
244
+ * - не задано (auto): серверы dev и preview сохраняют маршрутизацию по URL,
245
+ * игнорируя локаль, сохранённую в cookie и заголовках. Префиксы по-прежнему
246
+ * разрешаются, локаль по-прежнему сохраняется, а определение Accept-Language
247
+ * по-прежнему действует. В продакшене ведёт себя как `true`.
248
+ * - true: полное поведение во всех окружениях.
249
+ * - false: маршрутизация локалей отключена.
250
+ * По умолчанию: undefined (auto)
251
+ */
252
+ enableProxy: undefined,
253
+
238
254
  /**
239
255
  * Где хранить выбранный пользователем язык.
240
256
  * Опции: 'cookie', 'localStorage', 'sessionStorage', 'header' или их массив.
@@ -713,13 +729,14 @@ export default config;
713
729
 
714
730
  Настройки, управляющие поведением маршрутизации, включая структуру URL, хранение языков и управление middleware.
715
731
 
716
- | Поле | Описание | Тип | По умолчанию | Пример | Примечание |
717
- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
718
- | `mode` | Режим маршрутизации URL для управления языками. | `'prefix-no-default'` &#124; <br/> `'prefix-all'` &#124; <br/> `'no-prefix'` &#124; <br/> `'search-params'` | `'prefix-no-default'` | `'prefix-no-default'`: `/dashboard` (en) или `/fr/dashboard` (fr). `'prefix-all'`: `/en/dashboard`. `'no-prefix'`: язык управляется другими способами. `'search-params'`: `/dashboard?locale=fr` | Не влияет на управление куками или хранилищем языков. |
719
- | `storage` | Конфигурация хранения языка на клиенте. | `false` &#124; <br/> `'cookie'` &#124; <br/> `'localStorage'` &#124; <br/> `'sessionStorage'` &#124; <br/> `'header'` &#124; <br/> `CookiesAttributes` &#124; <br/> `StorageAttributes` &#124; <br/> `Array` | `['cookie', 'header']` | `'localStorage'` <br/> `[{ type: 'cookie', name: 'custom-locale', secure: true }]` | См. таблицу параметров хранения ниже. |
720
- | `basePath` | Базовый путь для URL-адресов приложения. | `string` | `''` | `'/my-app'` | Если приложение находится по адресу `https://example.com/my-app`, basePath - `'/my-app'`, а URL становятся `https://example.com/my-app/en`. |
721
- | `rewrite` | Пользовательские правила перезаписи URL, которые переопределяют режим маршрутизации по умолчанию для определенных путей. Поддерживает динамические параметры `[param]`. | `Record<string, StrictModeLocaleMap<string>>` | `undefined` | См. пример ниже | Правила перезаписи имеют приоритет над `mode`.<br/>• Работает с Next.js и Vite.<br/>• `getLocalizedUrl()` автоматически применяет соответствующие правила.<br/>• См. [Пользовательские перезаписи URL](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/custom_url_rewrites.md). |
722
- | `domains` | Сопоставляет локали с именами хостов доменов для маршрутизации на основе доменов. Когда установлено, URL-адреса для локали используют этот домен в качестве базы (абсолютный URL), и к пути не добавляется префикс локали. | `Partial<Record<Locale, string>>` | `undefined` | `{ zh: 'intlayer.zh', fr: 'intlayer.org' }` | • Протокол по умолчанию - `https://`, если он не указан в имени хоста.<br/>• Сам домен идентифицирует локаль, поэтому префикс `/zh/` не добавляется.<br/>• `getLocalizedUrl('/', 'zh')` возвращает `https://intlayer.zh/`. |
732
+ | Поле | Описание | Тип | По умолчанию | Пример | Примечание |
733
+ | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
734
+ | `mode` | Режим маршрутизации URL для управления языками. | `'prefix-no-default'` &#124; <br/> `'prefix-all'` &#124; <br/> `'no-prefix'` &#124; <br/> `'search-params'` | `'prefix-no-default'` | `'prefix-no-default'`: `/dashboard` (en) или `/fr/dashboard` (fr). `'prefix-all'`: `/en/dashboard`. `'no-prefix'`: язык управляется другими способами. `'search-params'`: `/dashboard?locale=fr` | Не влияет на управление куками или хранилищем языков. |
735
+ | `enableProxy` | Включает прокси маршрутизации локалей Intlayer (middleware). | `boolean` &#124; <br/> `undefined` | `undefined` (auto) | `true` | Не задано (auto): серверы dev и preview игнорируют локаль из cookie/заголовков как источник редиректа; префиксы, сохранение локали и определение `Accept-Language` продолжают работать. В продакшене ведёт себя как `true`.<br/>• `true`: полное поведение везде.<br/>• `false`: маршрутизация локалей отключена. В Next.js middleware `intlayerProxy` становится сквозным. |
736
+ | `storage` | Конфигурация хранения языка на клиенте. | `false` &#124; <br/> `'cookie'` &#124; <br/> `'localStorage'` &#124; <br/> `'sessionStorage'` &#124; <br/> `'header'` &#124; <br/> `CookiesAttributes` &#124; <br/> `StorageAttributes` &#124; <br/> `Array` | `['cookie', 'header']` | `'localStorage'` <br/> `[{ type: 'cookie', name: 'custom-locale', secure: true }]` | См. таблицу параметров хранения ниже. |
737
+ | `basePath` | Базовый путь для URL-адресов приложения. | `string` | `''` | `'/my-app'` | Если приложение находится по адресу `https://example.com/my-app`, basePath - `'/my-app'`, а URL становятся `https://example.com/my-app/en`. |
738
+ | `rewrite` | Пользовательские правила перезаписи URL, которые переопределяют режим маршрутизации по умолчанию для определенных путей. Поддерживает динамические параметры `[param]`. | `Record<string, StrictModeLocaleMap<string>>` | `undefined` | См. пример ниже | • Правила перезаписи имеют приоритет над `mode`.<br/>• Работает с Next.js и Vite.<br/>• `getLocalizedUrl()` автоматически применяет соответствующие правила.<br/>• См. [Пользовательские перезаписи URL](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/custom_url_rewrites.md). |
739
+ | `domains` | Сопоставляет локали с именами хостов доменов для маршрутизации на основе доменов. Когда установлено, URL-адреса для локали используют этот домен в качестве базы (абсолютный URL), и к пути не добавляется префикс локали. | `Partial<Record<Locale, string>>` | `undefined` | `{ zh: 'intlayer.zh', fr: 'intlayer.org' }` | • Протокол по умолчанию - `https://`, если он не указан в имени хоста.<br/>• Сам домен идентифицирует локаль, поэтому префикс `/zh/` не добавляется.<br/>• `getLocalizedUrl('/', 'zh')` возвращает `https://intlayer.zh/`. |
723
740
 
724
741
  **Пример `rewrite`**:
725
742
 
@@ -23,7 +23,9 @@ history:
23
23
  author: aymericzip
24
24
  ---
25
25
 
26
- # Содержимое файла / Встраивание файлов в Intlayer
26
+ # Содержимое файлов / Встраивание файлов в Intlayer
27
+
28
+ В Intlayer функция `file` позволяет встраивать содержимое внешних файлов в словарь. Такой подход гарантирует, что Intlayer распознает исходный файл, обеспечивая безупречную интеграцию с Visual Editor и CMS Intlayer.
27
29
 
28
30
  ## Как работает встраивание файлов
29
31