@intlayer/docs 9.1.3 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/blog/ar/rag_powered_documentation_assistant.md +7 -0
  2. package/blog/de/rag_powered_documentation_assistant.md +6 -0
  3. package/blog/en-GB/rag_powered_documentation_assistant.md +6 -0
  4. package/blog/es/rag_powered_documentation_assistant.md +7 -0
  5. package/blog/fr/i18n_meaning.md +7 -1
  6. package/blog/fr/list_i18n_technologies/frameworks/angular.md +5 -1
  7. package/blog/fr/rag_powered_documentation_assistant.md +6 -0
  8. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +119 -42
  9. package/blog/hi/rag_powered_documentation_assistant.md +7 -0
  10. package/blog/id/rag_powered_documentation_assistant.md +6 -0
  11. package/blog/it/rag_powered_documentation_assistant.md +6 -0
  12. package/blog/ja/rag_powered_documentation_assistant.md +7 -0
  13. package/blog/ko/list_i18n_technologies/frameworks/react.md +7 -7
  14. package/blog/ko/rag_powered_documentation_assistant.md +6 -0
  15. package/blog/pl/rag_powered_documentation_assistant.md +6 -0
  16. package/blog/pt/rag_powered_documentation_assistant.md +6 -0
  17. package/blog/ru/rag_powered_documentation_assistant.md +7 -0
  18. package/blog/tr/intlayer_with_react-intl.md +3 -1
  19. package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +175 -42
  20. package/blog/tr/rag_powered_documentation_assistant.md +6 -0
  21. package/blog/uk/rag_powered_documentation_assistant.md +6 -0
  22. package/blog/vi/rag_powered_documentation_assistant.md +6 -0
  23. package/blog/zh/intlayer_with_i18next.md +87 -28
  24. package/blog/zh/intlayer_with_next-i18next.md +86 -29
  25. package/blog/zh/intlayer_with_next-intl.md +88 -28
  26. package/blog/zh/intlayer_with_react-i18next.md +87 -28
  27. package/blog/zh/intlayer_with_react-intl.md +88 -27
  28. package/blog/zh/intlayer_with_vue-i18n.md +117 -8
  29. package/blog/zh/rag_powered_documentation_assistant.md +6 -0
  30. package/dist/cjs/generated/blog.entry.cjs +27 -27
  31. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  32. package/dist/cjs/generated/docs.entry.cjs +234 -214
  33. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  34. package/dist/cjs/generated/frequentQuestions.entry.cjs +17 -17
  35. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  36. package/dist/cjs/generated/legal.entry.cjs +2 -2
  37. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  38. package/dist/esm/generated/blog.entry.mjs +27 -27
  39. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  40. package/dist/esm/generated/docs.entry.mjs +234 -214
  41. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  42. package/dist/esm/generated/frequentQuestions.entry.mjs +17 -17
  43. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  44. package/dist/esm/generated/legal.entry.mjs +2 -2
  45. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  46. package/dist/types/generated/docs.entry.d.ts +1 -0
  47. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  48. package/docs/ar/analytics.md +222 -0
  49. package/docs/ar/autoFill.md +28 -9
  50. package/docs/ar/configuration.md +25 -8
  51. package/docs/ar/dictionary/file.md +3 -1
  52. package/docs/ar/dictionary/nesting.md +47 -30
  53. package/docs/ar/formatters.md +148 -193
  54. package/docs/ar/intlayer_CMS.md +152 -0
  55. package/docs/ar/intlayer_with_angular_21.md +9 -9
  56. package/docs/ar/intlayer_with_nextjs_14.md +1 -28
  57. package/docs/ar/intlayer_with_nextjs_15.md +1 -33
  58. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +40 -83
  59. package/docs/ar/intlayer_with_solid_start.md +1078 -0
  60. package/docs/ar/intlayer_with_vite+vue.md +1 -3
  61. package/docs/ar/packages/intlayer/getLocalizedUrl.md +26 -24
  62. package/docs/ar/packages/intlayer/getMultilingualUrls.md +4 -18
  63. package/docs/ar/packages/react-intlayer/useDictionary.md +4 -21
  64. package/docs/ar/packages/react-intlayer/useIntlayer.md +2 -2
  65. package/docs/ar/packages/vite-intlayer/exports.md +15 -0
  66. package/docs/ar/packages/vite-intlayer/intlayer.md +121 -6
  67. package/docs/ar/packages/vite-intlayer/intlayerPrune.md +70 -3
  68. package/docs/ar/releases/v9.md +0 -37
  69. package/docs/ar/self_hosting.md +46 -49
  70. package/docs/bn/configuration.md +25 -8
  71. package/docs/bn/intlayer_with_angular_21.md +9 -9
  72. package/docs/cs/configuration.md +25 -8
  73. package/docs/cs/intlayer_with_angular_21.md +9 -9
  74. package/docs/de/analytics.md +222 -0
  75. package/docs/de/autoFill.md +28 -9
  76. package/docs/de/configuration.md +25 -8
  77. package/docs/de/dictionary/file.md +3 -1
  78. package/docs/de/dictionary/nesting.md +47 -31
  79. package/docs/de/formatters.md +208 -334
  80. package/docs/de/intlayer_CMS.md +66 -15
  81. package/docs/de/intlayer_with_angular_21.md +9 -9
  82. package/docs/de/intlayer_with_nestjs.md +11 -7
  83. package/docs/de/intlayer_with_nextjs_14.md +1 -28
  84. package/docs/de/intlayer_with_nextjs_15.md +1 -33
  85. package/docs/de/intlayer_with_solid_start.md +1078 -0
  86. package/docs/de/intlayer_with_vite+vue.md +1 -3
  87. package/docs/de/packages/intlayer/getLocalizedUrl.md +33 -25
  88. package/docs/de/packages/intlayer/getMultilingualUrls.md +4 -18
  89. package/docs/de/packages/react-intlayer/useDictionary.md +2 -5
  90. package/docs/de/packages/vite-intlayer/exports.md +15 -0
  91. package/docs/de/packages/vite-intlayer/intlayer.md +121 -6
  92. package/docs/de/packages/vite-intlayer/intlayerPrune.md +77 -4
  93. package/docs/de/releases/v9.md +0 -15
  94. package/docs/de/self_hosting.md +46 -50
  95. package/docs/en/cli/doc-review.md +13 -2
  96. package/docs/en/configuration.md +24 -15
  97. package/docs/en/intlayer_with_angular_21.md +9 -9
  98. package/docs/en/intlayer_with_solid_start.md +1091 -0
  99. package/docs/en/intlayer_with_vite+solid.md +12 -0
  100. package/docs/en-GB/analytics.md +222 -0
  101. package/docs/en-GB/autoFill.md +26 -7
  102. package/docs/en-GB/configuration.md +25 -8
  103. package/docs/en-GB/dictionary/file.md +2 -0
  104. package/docs/en-GB/dictionary/nesting.md +64 -205
  105. package/docs/en-GB/formatters.md +146 -181
  106. package/docs/en-GB/intlayer_CMS.md +152 -0
  107. package/docs/en-GB/intlayer_with_angular_21.md +9 -9
  108. package/docs/en-GB/intlayer_with_nestjs.md +6 -2
  109. package/docs/en-GB/intlayer_with_nextjs_14.md +0 -27
  110. package/docs/en-GB/intlayer_with_nextjs_15.md +1 -33
  111. package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +40 -82
  112. package/docs/en-GB/intlayer_with_solid_start.md +1078 -0
  113. package/docs/en-GB/intlayer_with_vite+vue.md +1 -3
  114. package/docs/en-GB/packages/intlayer/getLocalizedUrl.md +30 -22
  115. package/docs/en-GB/packages/intlayer/getMultilingualUrls.md +16 -48
  116. package/docs/en-GB/packages/vite-intlayer/exports.md +15 -0
  117. package/docs/en-GB/packages/vite-intlayer/intlayer.md +121 -6
  118. package/docs/en-GB/packages/vite-intlayer/intlayerPrune.md +77 -4
  119. package/docs/en-GB/self_hosting.md +60 -49
  120. package/docs/es/analytics.md +222 -0
  121. package/docs/es/autoFill.md +28 -9
  122. package/docs/es/configuration.md +24 -7
  123. package/docs/es/dictionary/file.md +3 -1
  124. package/docs/es/dictionary/nesting.md +47 -30
  125. package/docs/es/formatters.md +114 -168
  126. package/docs/es/intlayer_CMS.md +35 -10
  127. package/docs/es/intlayer_with_angular_21.md +9 -9
  128. package/docs/es/intlayer_with_nextjs_14.md +1 -28
  129. package/docs/es/intlayer_with_nextjs_15.md +1 -33
  130. package/docs/es/intlayer_with_solid_start.md +1078 -0
  131. package/docs/es/packages/intlayer/getLocalizedUrl.md +31 -23
  132. package/docs/es/packages/intlayer/getMultilingualUrls.md +4 -18
  133. package/docs/es/packages/vite-intlayer/exports.md +15 -0
  134. package/docs/es/packages/vite-intlayer/intlayer.md +121 -6
  135. package/docs/es/packages/vite-intlayer/intlayerPrune.md +69 -2
  136. package/docs/es/releases/v9.md +0 -15
  137. package/docs/es/self_hosting.md +46 -49
  138. package/docs/fr/analytics.md +222 -0
  139. package/docs/fr/autoFill.md +27 -8
  140. package/docs/fr/configuration.md +25 -8
  141. package/docs/fr/dictionary/file.md +2 -0
  142. package/docs/fr/dictionary/nesting.md +37 -184
  143. package/docs/fr/formatters.md +95 -236
  144. package/docs/fr/intlayer_CMS.md +66 -15
  145. package/docs/fr/intlayer_with_angular_21.md +9 -9
  146. package/docs/fr/intlayer_with_nextjs_14.md +1 -28
  147. package/docs/fr/intlayer_with_nextjs_15.md +1 -33
  148. package/docs/fr/intlayer_with_solid_start.md +1078 -0
  149. package/docs/fr/packages/intlayer/getLocalizedUrl.md +37 -27
  150. package/docs/fr/packages/intlayer/getMultilingualUrls.md +18 -20
  151. package/docs/fr/packages/vite-intlayer/exports.md +15 -0
  152. package/docs/fr/packages/vite-intlayer/intlayer.md +121 -6
  153. package/docs/fr/packages/vite-intlayer/intlayerPrune.md +77 -4
  154. package/docs/fr/releases/v9.md +0 -15
  155. package/docs/fr/self_hosting.md +46 -49
  156. package/docs/hi/analytics.md +222 -0
  157. package/docs/hi/autoFill.md +28 -9
  158. package/docs/hi/configuration.md +25 -8
  159. package/docs/hi/dictionary/file.md +3 -1
  160. package/docs/hi/dictionary/nesting.md +47 -30
  161. package/docs/hi/formatters.md +233 -334
  162. package/docs/hi/how_works_intlayer.md +3 -1
  163. package/docs/hi/intlayer_CMS.md +152 -0
  164. package/docs/hi/intlayer_with_angular_21.md +9 -9
  165. package/docs/hi/intlayer_with_nestjs.md +11 -7
  166. package/docs/hi/intlayer_with_nextjs_14.md +1 -28
  167. package/docs/hi/intlayer_with_nextjs_15.md +1 -33
  168. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +40 -83
  169. package/docs/hi/intlayer_with_solid_start.md +1077 -0
  170. package/docs/hi/intlayer_with_vite+preact.md +56 -49
  171. package/docs/hi/intlayer_with_vite+react.md +48 -41
  172. package/docs/hi/intlayer_with_vite+solid.md +32 -41
  173. package/docs/hi/intlayer_with_vite+vue.md +49 -44
  174. package/docs/hi/packages/intlayer/getLocalizedUrl.md +26 -24
  175. package/docs/hi/packages/intlayer/getMultilingualUrls.md +4 -18
  176. package/docs/hi/packages/next-intlayer/t.md +33 -1
  177. package/docs/hi/packages/react-intlayer/useDictionary.md +4 -21
  178. package/docs/hi/packages/vite-intlayer/exports.md +15 -0
  179. package/docs/hi/packages/vite-intlayer/intlayer.md +121 -6
  180. package/docs/hi/packages/vite-intlayer/intlayerPrune.md +78 -5
  181. package/docs/hi/plugins/sync-json.md +9 -9
  182. package/docs/hi/releases/v9.md +0 -15
  183. package/docs/hi/self_hosting.md +38 -51
  184. package/docs/id/analytics.md +223 -0
  185. package/docs/id/configuration.md +25 -8
  186. package/docs/id/dictionary/nesting.md +37 -184
  187. package/docs/id/formatters.md +208 -305
  188. package/docs/id/intlayer_CMS.md +164 -0
  189. package/docs/id/intlayer_with_angular_21.md +9 -9
  190. package/docs/id/intlayer_with_nextjs_14.md +1 -26
  191. package/docs/id/intlayer_with_react_router_v7_fs_routes.md +70 -63
  192. package/docs/id/intlayer_with_solid_start.md +1078 -0
  193. package/docs/id/packages/intlayer/getMultilingualUrls.md +4 -18
  194. package/docs/id/packages/react-intlayer/useIntlayer.md +2 -2
  195. package/docs/id/packages/vite-intlayer/exports.md +15 -0
  196. package/docs/id/packages/vite-intlayer/intlayer.md +121 -6
  197. package/docs/id/packages/vite-intlayer/intlayerPrune.md +78 -5
  198. package/docs/id/releases/v9.md +12 -0
  199. package/docs/id/self_hosting.md +61 -50
  200. package/docs/it/analytics.md +222 -0
  201. package/docs/it/autoFill.md +27 -8
  202. package/docs/it/configuration.md +25 -8
  203. package/docs/it/dictionary/file.md +3 -1
  204. package/docs/it/dictionary/nesting.md +47 -30
  205. package/docs/it/formatters.md +114 -168
  206. package/docs/it/intlayer_CMS.md +66 -15
  207. package/docs/it/intlayer_with_angular_21.md +9 -9
  208. package/docs/it/intlayer_with_nestjs.md +11 -7
  209. package/docs/it/intlayer_with_nextjs_14.md +1 -28
  210. package/docs/it/intlayer_with_nextjs_15.md +1 -33
  211. package/docs/it/intlayer_with_solid_start.md +1078 -0
  212. package/docs/it/intlayer_with_vite+vue.md +1 -3
  213. package/docs/it/packages/intlayer/getLocalizedUrl.md +34 -26
  214. package/docs/it/packages/intlayer/getMultilingualUrls.md +4 -18
  215. package/docs/it/packages/react-intlayer/useDictionary.md +4 -21
  216. package/docs/it/packages/vite-intlayer/exports.md +15 -0
  217. package/docs/it/packages/vite-intlayer/intlayer.md +121 -6
  218. package/docs/it/packages/vite-intlayer/intlayerPrune.md +77 -4
  219. package/docs/it/releases/v9.md +0 -15
  220. package/docs/it/self_hosting.md +60 -49
  221. package/docs/ja/analytics.md +222 -0
  222. package/docs/ja/autoFill.md +28 -9
  223. package/docs/ja/configuration.md +25 -8
  224. package/docs/ja/dictionary/content_file.md +15 -7
  225. package/docs/ja/dictionary/file.md +3 -1
  226. package/docs/ja/dictionary/nesting.md +47 -30
  227. package/docs/ja/formatters.md +133 -187
  228. package/docs/ja/intlayer_visual_editor.md +3 -1
  229. package/docs/ja/intlayer_with_angular_21.md +6 -6
  230. package/docs/ja/intlayer_with_nestjs.md +2 -12
  231. package/docs/ja/intlayer_with_nextjs_14.md +1 -28
  232. package/docs/ja/intlayer_with_nextjs_15.md +1 -33
  233. package/docs/ja/intlayer_with_react_router_v7.md +456 -20
  234. package/docs/ja/intlayer_with_solid_start.md +1078 -0
  235. package/docs/ja/intlayer_with_vite+preact.md +73 -41
  236. package/docs/ja/intlayer_with_vite+vue.md +1 -3
  237. package/docs/ja/mcp_server.md +3 -9
  238. package/docs/ja/packages/intlayer/getLocalizedUrl.md +26 -24
  239. package/docs/ja/packages/intlayer/getMultilingualUrls.md +3 -17
  240. package/docs/ja/packages/vite-intlayer/exports.md +15 -0
  241. package/docs/ja/packages/vite-intlayer/intlayer.md +121 -6
  242. package/docs/ja/packages/vite-intlayer/intlayerPrune.md +79 -6
  243. package/docs/ja/releases/v9.md +12 -0
  244. package/docs/ja/self_hosting.md +46 -50
  245. package/docs/ko/analytics.md +222 -0
  246. package/docs/ko/autoFill.md +28 -9
  247. package/docs/ko/configuration.md +25 -8
  248. package/docs/ko/dictionary/file.md +3 -1
  249. package/docs/ko/dictionary/nesting.md +47 -30
  250. package/docs/ko/formatters.md +133 -187
  251. package/docs/ko/intlayer_with_angular_21.md +9 -9
  252. package/docs/ko/intlayer_with_lynx+react.md +133 -39
  253. package/docs/ko/intlayer_with_nextjs_14.md +1 -28
  254. package/docs/ko/intlayer_with_nextjs_15.md +1 -33
  255. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +40 -188
  256. package/docs/ko/intlayer_with_solid_start.md +1078 -0
  257. package/docs/ko/intlayer_with_vite+preact.md +57 -23
  258. package/docs/ko/intlayer_with_vite+vue.md +1 -3
  259. package/docs/ko/packages/intlayer/getLocalizedUrl.md +26 -24
  260. package/docs/ko/packages/intlayer/getMultilingualUrls.md +4 -18
  261. package/docs/ko/packages/vite-intlayer/exports.md +15 -0
  262. package/docs/ko/packages/vite-intlayer/intlayer.md +121 -6
  263. package/docs/ko/packages/vite-intlayer/intlayerPrune.md +79 -6
  264. package/docs/ko/releases/v9.md +12 -0
  265. package/docs/ko/self_hosting.md +60 -49
  266. package/docs/nl/configuration.md +25 -8
  267. package/docs/nl/intlayer_with_angular_21.md +9 -9
  268. package/docs/pl/analytics.md +220 -0
  269. package/docs/pl/configuration.md +25 -8
  270. package/docs/pl/dictionary/nesting.md +47 -30
  271. package/docs/pl/formatters.md +208 -305
  272. package/docs/pl/intlayer_CMS.md +152 -0
  273. package/docs/pl/intlayer_with_angular_21.md +9 -9
  274. package/docs/pl/intlayer_with_nextjs_14.md +1 -26
  275. package/docs/pl/intlayer_with_solid_start.md +1078 -0
  276. package/docs/pl/packages/intlayer/getMultilingualUrls.md +4 -18
  277. package/docs/pl/packages/react-intlayer/useDictionary.md +2 -19
  278. package/docs/pl/packages/vite-intlayer/exports.md +15 -0
  279. package/docs/pl/packages/vite-intlayer/intlayer.md +121 -6
  280. package/docs/pl/packages/vite-intlayer/intlayerPrune.md +77 -4
  281. package/docs/pl/releases/v9.md +0 -15
  282. package/docs/pl/self_hosting.md +60 -49
  283. package/docs/pt/analytics.md +222 -0
  284. package/docs/pt/configuration.md +25 -8
  285. package/docs/pt/dictionary/file.md +3 -1
  286. package/docs/pt/dictionary/nesting.md +47 -30
  287. package/docs/pt/formatters.md +112 -168
  288. package/docs/pt/intlayer_CMS.md +66 -15
  289. package/docs/pt/intlayer_with_angular_21.md +9 -9
  290. package/docs/pt/intlayer_with_astro_lit.md +26 -1
  291. package/docs/pt/intlayer_with_nextjs_14.md +1 -28
  292. package/docs/pt/intlayer_with_nextjs_15.md +1 -33
  293. package/docs/pt/intlayer_with_solid_start.md +1078 -0
  294. package/docs/pt/intlayer_with_vite+vue.md +1 -3
  295. package/docs/pt/packages/intlayer/getLocalizedUrl.md +34 -26
  296. package/docs/pt/packages/intlayer/getMultilingualUrls.md +4 -18
  297. package/docs/pt/packages/vite-intlayer/exports.md +15 -0
  298. package/docs/pt/packages/vite-intlayer/intlayer.md +121 -6
  299. package/docs/pt/packages/vite-intlayer/intlayerPrune.md +78 -6
  300. package/docs/pt/releases/v9.md +0 -15
  301. package/docs/pt/self_hosting.md +60 -49
  302. package/docs/ru/analytics.md +222 -0
  303. package/docs/ru/autoFill.md +27 -8
  304. package/docs/ru/configuration.md +25 -8
  305. package/docs/ru/dictionary/file.md +3 -1
  306. package/docs/ru/dictionary/nesting.md +64 -205
  307. package/docs/ru/formatters.md +108 -128
  308. package/docs/ru/intlayer_with_angular_21.md +9 -9
  309. package/docs/ru/intlayer_with_nextjs_14.md +1 -28
  310. package/docs/ru/intlayer_with_nextjs_15.md +1 -33
  311. package/docs/ru/intlayer_with_solid_start.md +1078 -0
  312. package/docs/ru/intlayer_with_vite+vue.md +1 -3
  313. package/docs/ru/packages/intlayer/getLocalizedUrl.md +34 -26
  314. package/docs/ru/packages/intlayer/getMultilingualUrls.md +4 -18
  315. package/docs/ru/packages/react-intlayer/useDictionary.md +4 -21
  316. package/docs/ru/packages/vite-intlayer/exports.md +15 -0
  317. package/docs/ru/packages/vite-intlayer/intlayer.md +121 -6
  318. package/docs/ru/packages/vite-intlayer/intlayerPrune.md +77 -4
  319. package/docs/ru/releases/v9.md +0 -15
  320. package/docs/ru/self_hosting.md +60 -49
  321. package/docs/tr/analytics.md +222 -0
  322. package/docs/tr/autoFill.md +28 -9
  323. package/docs/tr/configuration.md +25 -8
  324. package/docs/tr/dictionary/file.md +2 -0
  325. package/docs/tr/dictionary/nesting.md +47 -30
  326. package/docs/tr/formatters.md +144 -190
  327. package/docs/tr/intlayer_CMS.md +152 -0
  328. package/docs/tr/intlayer_with_angular_21.md +9 -9
  329. package/docs/tr/intlayer_with_nestjs.md +2 -12
  330. package/docs/tr/intlayer_with_nextjs_15.md +1 -33
  331. package/docs/tr/intlayer_with_solid_start.md +1078 -0
  332. package/docs/tr/intlayer_with_vite+vue.md +1 -3
  333. package/docs/tr/packages/intlayer/getMultilingualUrls.md +4 -18
  334. package/docs/tr/packages/vite-intlayer/exports.md +15 -0
  335. package/docs/tr/packages/vite-intlayer/intlayer.md +121 -6
  336. package/docs/tr/packages/vite-intlayer/intlayerPrune.md +77 -4
  337. package/docs/tr/self_hosting.md +47 -50
  338. package/docs/uk/analytics.md +222 -0
  339. package/docs/uk/configuration.md +25 -8
  340. package/docs/uk/dictionary/nesting.md +47 -30
  341. package/docs/uk/formatters.md +128 -185
  342. package/docs/uk/intlayer_CMS.md +152 -0
  343. package/docs/uk/intlayer_with_angular_21.md +9 -9
  344. package/docs/uk/intlayer_with_nextjs_14.md +1 -26
  345. package/docs/uk/intlayer_with_solid_start.md +1078 -0
  346. package/docs/uk/packages/react-intlayer/useDictionary.md +2 -19
  347. package/docs/uk/packages/vite-intlayer/exports.md +15 -0
  348. package/docs/uk/packages/vite-intlayer/intlayer.md +121 -6
  349. package/docs/uk/packages/vite-intlayer/intlayerPrune.md +77 -4
  350. package/docs/uk/releases/v9.md +0 -15
  351. package/docs/uk/self_hosting.md +60 -50
  352. package/docs/ur/configuration.md +25 -8
  353. package/docs/ur/intlayer_with_angular_21.md +9 -9
  354. package/docs/vi/analytics.md +222 -0
  355. package/docs/vi/configuration.md +24 -8
  356. package/docs/vi/dictionary/nesting.md +37 -184
  357. package/docs/vi/formatters.md +208 -309
  358. package/docs/vi/intlayer_CMS.md +164 -0
  359. package/docs/vi/intlayer_with_angular_21.md +9 -9
  360. package/docs/vi/intlayer_with_nextjs_14.md +0 -25
  361. package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +70 -63
  362. package/docs/vi/intlayer_with_solid_start.md +1078 -0
  363. package/docs/vi/packages/intlayer/getMultilingualUrls.md +4 -18
  364. package/docs/vi/packages/react-intlayer/useIntlayer.md +2 -2
  365. package/docs/vi/packages/vite-intlayer/exports.md +15 -0
  366. package/docs/vi/packages/vite-intlayer/intlayer.md +121 -6
  367. package/docs/vi/packages/vite-intlayer/intlayerPrune.md +77 -4
  368. package/docs/vi/plugins/sync-json.md +6 -6
  369. package/docs/vi/releases/v9.md +12 -0
  370. package/docs/vi/self_hosting.md +61 -50
  371. package/docs/zh/CI_CD.md +4 -0
  372. package/docs/zh/analytics.md +222 -0
  373. package/docs/zh/autoFill.md +28 -9
  374. package/docs/zh/configuration.md +24 -8
  375. package/docs/zh/dictionary/file.md +2 -0
  376. package/docs/zh/dictionary/nesting.md +47 -30
  377. package/docs/zh/formatters.md +140 -188
  378. package/docs/zh/intlayer_CMS.md +164 -0
  379. package/docs/zh/intlayer_with_analog.md +193 -3
  380. package/docs/zh/intlayer_with_angular_19.md +272 -3
  381. package/docs/zh/intlayer_with_angular_21.md +7 -7
  382. package/docs/zh/intlayer_with_create_react_app.md +348 -26
  383. package/docs/zh/intlayer_with_lynx+react.md +263 -4
  384. package/docs/zh/intlayer_with_nextjs_14.md +1 -28
  385. package/docs/zh/intlayer_with_nextjs_15.md +1 -33
  386. package/docs/zh/intlayer_with_nextjs_no_locale_path.md +558 -1
  387. package/docs/zh/intlayer_with_nuxt.md +182 -7
  388. package/docs/zh/intlayer_with_react_router_v7.md +183 -25
  389. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +306 -42
  390. package/docs/zh/intlayer_with_solid_start.md +1077 -0
  391. package/docs/zh/intlayer_with_storybook.md +260 -3
  392. package/docs/zh/intlayer_with_svelte_kit.md +428 -48
  393. package/docs/zh/intlayer_with_tanstack+solid.md +713 -13
  394. package/docs/zh/intlayer_with_tanstack.md +731 -20
  395. package/docs/zh/intlayer_with_vanilla.md +314 -4
  396. package/docs/zh/intlayer_with_vite+lit.md +465 -4
  397. package/docs/zh/intlayer_with_vite+preact.md +422 -116
  398. package/docs/zh/intlayer_with_vite+react.md +324 -45
  399. package/docs/zh/intlayer_with_vite+react_compiler.md +228 -13
  400. package/docs/zh/intlayer_with_vite+solid.md +462 -32
  401. package/docs/zh/intlayer_with_vite+vanilla.md +497 -4
  402. package/docs/zh/mcp_server.md +3 -9
  403. package/docs/zh/packages/intlayer/getLocalizedUrl.md +26 -24
  404. package/docs/zh/packages/intlayer/getMultilingualUrls.md +4 -18
  405. package/docs/zh/packages/vite-intlayer/exports.md +29 -0
  406. package/docs/zh/packages/vite-intlayer/intlayer.md +121 -6
  407. package/docs/zh/packages/vite-intlayer/intlayerPrune.md +79 -6
  408. package/docs/zh/releases/v9.md +12 -0
  409. package/docs/zh/self_hosting.md +60 -50
  410. package/docs/zh-TW/intlayer_with_angular_21.md +7 -7
  411. package/package.json +6 -6
  412. package/src/generated/blog.entry.ts +27 -27
  413. package/src/generated/docs.entry.ts +234 -214
  414. package/src/generated/frequentQuestions.entry.ts +17 -17
  415. package/src/generated/legal.entry.ts +2 -2
@@ -30,9 +30,7 @@ history:
30
30
  author: aymericzip
31
31
  ---
32
32
 
33
- # Intlayer ile Vite and Vue çevirin | Uluslararasılaştırma (i18n)
34
-
35
- GitHub'da [Uygulama Şablonu](https://github.com/aymericzip/intlayer-vite-vue-template)'na bakın.
33
+ # Intlayer kullanarak Vite ve Vue web sitenizi çevirme | Uluslararasılaştırma (i18n)
36
34
 
37
35
  ## İçindekiler
38
36
 
@@ -49,26 +49,12 @@ author: aymericzip
49
49
 
50
50
  ## Parametreler
51
51
 
52
- ## Parametreler
52
+ ### Gerekli Parametreler
53
53
 
54
54
  - `url: string`
55
- - **Açıklama**: Yerel ayarlarla öneklendirilecek orijinal URL dizesi.
56
- - **Tür**: `string`
57
-
58
- - `locales: Locales[]`
59
- - **Açıklama**: İsteğe bağlı desteklenen yerel ayarlar dizisi. Varsayılan olarak projede yapılandırılan yerel ayarları kullanır.
60
- - **Tür**: `Locales[]`
61
- - **Varsayılan**: `localesDefault`
62
-
63
- - `defaultLocale: Locales`
64
- - **Açıklama**: Uygulamanın varsayılan yerel ayarı. Varsayılan olarak projede yapılandırılan varsayılan yerel ayarı kullanır.
65
- - **Tür**: `Locales`
66
- - **Varsayılan**: `defaultLocaleDefault`
67
-
68
- - `prefixDefault: boolean`
69
- - **Açıklama**: Varsayılan yerel ayarı öneklendirip öneklendirmeyeceğinizi belirtir. Varsayılan olarak projede yapılandırılan değeri kullanır.
70
- - **Tür**: `boolean`
71
- - **Varsayılan**: `prefixDefaultDefault`
55
+ - **Description**: Locale'ler ile ön ek eklenecek orijinal URL string'i.
56
+ - **Type**: `string`
57
+ - **Required**: Yes
72
58
 
73
59
  ### İsteğe Bağlı Parametreler
74
60
 
@@ -48,3 +48,18 @@ import "vite-intlayer";
48
48
  | `intlayerProxy` | Yerel tespiti ve yönlendirmeyi işlemek için geliştirme middleware eklentisi. | - |
49
49
  | `intlayerMiddleware` | (**Kullanımdan Kaldırıldı**) `intlayerProxy` için takma ad. | - |
50
50
  | `intlayerPrune` | Derleme sırasında kullanılmayan sözlükleri tree-shake yapmak ve budamak için eklenti. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/packages/vite-intlayer/intlayerPrune.md) |
51
+
52
+ ### Utilities
53
+
54
+ | Export | Description | Related Doc |
55
+ | ---------------------------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
56
+ | `createIntlayerProxyHandler` | Framework-agnostic Node.js `(req, res, next)` middleware'i locale-routing logic'i ile döndürür. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/packages/vite-intlayer/intlayerProxy.md) |
57
+
58
+ ### Türler
59
+
60
+ | Export | Açıklama |
61
+ | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
62
+ | `IntlayerPluginOptions` | `intlayer()` tarafından kabul edilen seçenekler. `GetConfigurationOptions` öğesini `compatCallers` ve `proxy` ile genişletir. |
63
+ | `IntlayerProxyPluginOptions` | `intlayerProxy()` ve `createIntlayerProxyHandler()` tarafından kabul edilen seçenekler. `ignore` ve `configOptions` öğelerini içerir. |
64
+ | `IntlayerCompilerOptions` | `intlayerCompiler()` tarafından kabul edilen seçenekler. `configOptions` ve `compilerConfig` öğelerini içerir. |
65
+ | `CompatCallerConfig` | `@intlayer/babel` öğesinden yeniden dışa aktarılan. Alan kullanımı analizi için compat-adapter çağrı deseni tanımlar. |
@@ -39,11 +39,126 @@ export default defineConfig({
39
39
  });
40
40
  ```
41
41
 
42
- ## Açıklama
42
+ ## Seçenekler
43
43
 
44
- Eklenti şu görevleri yerine getirir:
44
+ ```ts
45
+ import type { IntlayerPluginOptions } from "vite-intlayer";
46
+ ```
47
+
48
+ `IntlayerPluginOptions`, `GetConfigurationOptions` (bkz. `@intlayer/config`) öğesini aşağıdaki ek alanlarla genişletir:
49
+
50
+ | Seçenek | Tür | Varsayılan | Açıklama |
51
+ | --------------- | ------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
52
+ | `compatCallers` | `CompatCallerConfig[]` | `[]` | Compat-adapter paketleri için ek çağrı desenleri (örn. `@intlayer/react-i18next`). Derleme zamanında alan kullanımı analizine iletilir. |
53
+ | `proxy` | `{ ignore?: (req) => boolean }` | `undefined` | Paketlenmiş yerel ayar yönlendirme proxy'sine iletilen seçenekler. Belirli yolları (örn. API rotaları) yerel ayar yönlendirmesinden hariç tutmak için `ignore` kullanın. |
54
+
55
+ Diğer tüm seçenekler (`override`, `configFile`, …) doğrudan `getConfiguration()` öğesine iletilir.
56
+
57
+ ### Örnekler
58
+
59
+ #### Yerel yönlendirmeden API rotalarını yoksay
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
+ #### Özel bir config dosya yolu ile
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 çağırıcıları ile
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
+ ## Eklentinin ne yaptığı
105
+
106
+ ### 1. Sözlük hazırlığı
107
+
108
+ Build başlamadan önce (ve geliştirme ortamında saatte bir), `intlayer` tüm `.content.ts` dosyalarını `.intlayer/` klasöründe depolanan optimize edilmiş JSON sözlüklerine derlemek için `prepareIntlayer` işlevini çağırır.
109
+
110
+ ### 2. Module aliases
111
+
112
+ Plugin, `import { myDict } from 'intlayer/dictionaries/my-dict'` ifadesinin diskte derlenen JSON dosyasına çözümlenmesi için Vite resolve aliases'lerini ekler. SSR buildleri, tüm `@intlayer/*` paketlerinin alias'lar uygulanarak birlikte paketlenmesini sağlamak için `ssr.noExternal` kullanır.
113
+
114
+ ### 3. Dev-server watcher
115
+
116
+ Geliştirme modunda bir `chokidar` watcher başlatılır. Bir `.content.ts` dosyası değiştiğinde sözlükler yeniden derlenir ve Vite'in HMR güncellemeleri tarayıcıya yayınlar.
117
+
118
+ ### 4. Bundled locale-routing proxy (v9+)
119
+
120
+ Intlayer v9'dan beri `intlayerProxy` middleware'i `intlayer()` içinde otomatik olarak kaydedilir. Şunları işler:
121
+
122
+ - URL ön eki, çerezler ve `Accept-Language` başlığından yerel ayar algılaması.
123
+ - Algılanan yerel ayar geçerli URL ile eşleşmediğinde 301 yönlendirmeleri.
124
+ - Framework'ün doğru `[locale]` rota parametresini görmesi için iç URL yeniden yazmaları.
125
+
126
+ Proxy, Intlayer yapılandırmanızda `routing.enableProxy` (varsayılan `true`) tarafından kontrol edilir. Tamamen devre dışı bırakmak için:
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
+ Ayrı bir `intlayerProxy()` çağrısı olmadan proxy davranışını özelleştirmek için ana eklentiye `proxy` seçeneklerini geçin:
138
+
139
+ ```ts
140
+ intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api") } });
141
+ ```
142
+
143
+ Tam yönlendirme davranışı referansı için [intlayerProxy belgelerine](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/packages/vite-intlayer/intlayerProxy.md) bakın.
144
+
145
+ ### 5. Bundled compiler (v9+)
146
+
147
+ `compiler.enabled` değeri `true` **ve** Intlayer config dosyanızda `compiler.output` ayarlandığında, `intlayer()` otomatik olarak `intlayerCompiler` kaydeder. Compiler, bileşen dosyalarının içinde doğrudan yazılan satır içi içerik bildirimleri çıkarır ve bunları dönüştürme zamanında sözlüklere yazar. [intlayerCompiler dokumentasyonu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/packages/vite-intlayer/intlayerCompiler.md) sayfasına bakın.
148
+
149
+ ### 6. Build optimisasyonları
150
+
151
+ Bir üretim derlemesi sırasında eklenti şunları ekler:
152
+
153
+ - **intlayerOptimize** – `useIntlayer('key')` → `useDictionary(hash)` yeniden yazılıp doğrudan JSON içe aktarımlarını enjekte eden Babel dönüşümü.
154
+ - **intlayerPrune** – sözlük JSON'undan kullanılmayan içerik alanlarını kaldırır.
155
+ - **intlayerMinify** – sözlük JSON'unu sıkıştırır ve isteğe bağlı olarak alan adlarını karıştırır.
156
+
157
+ Bunlar geliştirme modunda etkin değildir.
158
+
159
+ ## Kullanım Dışı Bırakılan Takma Adlar
45
160
 
46
- 1. **Sözlükleri Hazırlama**: Yapı veya geliştirme sürecinin başında sözlükleri optimize edilmiş dosyalara derler.
47
- 2. **İzleme Modu**: Geliştirme modunda, sözlük dosyalarındaki değişiklikleri izler ve bunları otomatik olarak yeniden derler.
48
- 3. **Aliaslar**: Uygulamanızda sözlüklere erişim için aliaslar sağlar.
49
- 4. **Tree-shaking**: Kullanılmayan çevirilerin `intlayerPrune` eklentisi aracılığıyla tree-shaking ile kaldırılmasını destekler.
161
+ | Kullanım Dışı Bırakılan Export | Değiştirme |
162
+ | ------------------------------ | ---------- |
163
+ | `intlayerPlugin` | `intlayer` |
164
+ | `intLayerPlugin` | `intlayer` |
@@ -30,16 +30,89 @@ author: aymericzip
30
30
 
31
31
  ## Kullanım
32
32
 
33
+ ### `intlayer()` kapsamında (önerilen)
34
+
35
+ Intlayer yapılandırmanız aracılığıyla pruning'i etkinleştirin ve ana plugin her şeyi işler:
36
+
37
+ ```ts
38
+ // intlayer.config.ts
39
+ import { defineConfig } from "intlayer";
40
+
41
+ export default defineConfig({
42
+ build: {
43
+ optimize: true, // pruning ve minify'ı etkinleştirir
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
+ Plugin stack'ini manuel olarak oluşturuyorsanız, `intlayerPrune` ve `intlayerMinify` bir `PruneContext` nesnesini paylaşır ve bu nesne bir kez oluşturulup her ikisine de geçirilmelidir:
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), // isteğe bağlı, aynı context'ten okur
76
+ ],
40
77
  });
41
78
  ```
42
79
 
43
- ## Açıklama
80
+ ## Nasıl çalışır
81
+
82
+ ### 1. Kullanım analizi (buildStart)
83
+
84
+ `buildStart` sırasında, `intlayerOptimize` eklentisi (aynı zamanda `intlayer()`'ın bir parçası) `build.filesList`'de listelenen her bileşen kaynak dosyasını tarar. Her `useIntlayer('key')` veya `getIntlayer('key')` çağrısı için, hangi alanların erişildiğini tam olarak kaydeder, örneğin:
85
+
86
+ ```ts
87
+ const { title, description } = useIntlayer("myDict");
88
+ // kaydeder: myDict → { title, description }
89
+ ```
90
+
91
+ Bu, herhangi bir `transform` çağrısı çalışmadan önce `pruneContext.fieldUsageMap`'i oluşturur.
92
+
93
+ ### 2. JSON budama (transform, enforce: 'pre')
94
+
95
+ Vite derlenmiş bir sözlük JSON dosyasını işlediğinde, `intlayerPrune` bunu Vite'nin yerleşik JSON → ESM dönüştürmesinden önce ele geçirir. `pruneContext`'ten alan kullanım haritasını okur ve kaydedilen kullanım setinde olmayan herhangi bir içerik alanını kaldırır.
96
+
97
+ İki içerik şekli desteklenir:
98
+
99
+ - **Statik sözlükler** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`. Alanlar `translation` içinde yerel başına budanır.
100
+ - **Dinamik (yerel başına) sözlükler** — düz `{ fieldA: ..., fieldB: ... }`. Alanlar en üst düzeyde budanır.
101
+
102
+ ### 3. Edge cases
103
+
104
+ Bir sözlüğün içerik yapısı tanınamazsa (örneğin, olağandışı iç içe bir şekil), `pruneContext.dictionariesWithEdgeCases` öğesine eklenir ve **değiştirilmez bırakılır**. Bir uyarı günlüğe kaydedilir. `intlayerMinify` bu sözlükleri de atlar.
105
+
106
+ ### 4. Field-rename map
107
+
108
+ Budama başarılı olduğunda, `intlayerPrune` ayrıca `pruneContext.dictionaryKeyToFieldRenameMap` — orijinal alan adlarından kısa takma adlara eşleme yazar. `intlayerMinify` çıktı JSON'daki alanları yeniden adlandırmak için bu haritayı okur ve `intlayerOptimize`'ın Babel rename geçişi kaynak dosyalardaki property erişimlerini buna göre günceller.
109
+
110
+ ## Aktivasyon koşulları
111
+
112
+ `intlayerPrune` **yalnızca** aşağıdakilerin hepsi doğru olduğunda etkin olur:
113
+
114
+ 1. Vite komutu `build` olur.
115
+ 2. `build.optimize` `true` olur (veya `undefined`, derlemeler için varsayılan olarak `true` olur).
116
+ 3. `build.purge` Intlayer yapılandırmanızda `true` olur.
44
117
 
45
- Eklenti, kaynak kodunuzu analiz ederek hangi sözlük anahtarlarının gerçekten kullanıldığını belirler. Ardından paketlenen sözlük dosyalarından kullanılmayan içeriği kaldırır. Bu, yalnızca belirli sayfalar veya bileşenlerde bir alt kümesi kullanılan birçok sözlüğe sahip büyük projeler için özellikle faydalıdır.
118
+ `editor.enabled` `true` olduğunda otomatik olarak **devre dışı bırakılır** çünkü düzenleyici tam sözlük içeriğine ihtiyaç duyar.
@@ -80,6 +80,18 @@ Yığın çalışmaya başladıktan sonra **http://localhost:3000** adresini aç
80
80
 
81
81
  ---
82
82
 
83
+ ## İlk çalıştırma kurulumu
84
+
85
+ Yeni bir instance'ta (boş veritabanı), dashboard'u açmak sizi **`/init`** sayfasına yönlendirir:
86
+
87
+ 1. İlk hesabı oluşturun. Kullanıcılar koleksiyonu boş olduğundan, bu hesap otomatik olarak **super admin** olarak yükseltilir.
88
+ 2. Bir doğrulama e-postası gönderilir (Resend aracılığıyla). E-posta doğrulaması **zorunludur** — bu nedenle `RESEND_API_KEY` başlamadan önce ayarlanmalıdır.
89
+ 3. E-postadaki bağlantıyı tıklayın, ardından oturum açın.
90
+
91
+ Bir admin mevcut olduğunda, `/init` standart oturum açma sayfasına yönlendirilir.
92
+
93
+ ---
94
+
83
95
  ## Servisler
84
96
 
85
97
  | Servis | Görüntü | Ana Bilgisayar Bağlantı Noktası(ları) | Amaç |
@@ -97,9 +109,18 @@ Dahili bağlantı noktaları (mongo, redis) varsayılan olarak ana bilgisayara a
97
109
 
98
110
  ---
99
111
 
100
- ## Ortam Değişkenleri
112
+ ## Ortam değişkenleri
101
113
 
102
- Yükleyici, kullanıma hazır bir `.env` dosyası oluşturur. Aşağıdaki tablo her değişkeni açıklar.
114
+ ### Gerekli
115
+
116
+ | Variable | Example | Description |
117
+ | ---------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
118
+ | `DB_ID` | `intlayer` | MongoDB Atlas kullanıcısı |
119
+ | `DB_MDP` | _(şifreniz)_ | MongoDB Atlas şifresi |
120
+ | `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | MongoDB Atlas cluster host'u (`mongodb+srv://` URI'de kullanılır) |
121
+ | `BETTER_AUTH_SECRET` | _(generated)_ | Session imzalama için 32-byte secret |
122
+ | `S3_SECRET_ACCESS_KEY` | _(generated)_ | Bundled MinIO için secret |
123
+ | `RESEND_API_KEY` | _(your key)_ | Resend aracılığıyla işlemsel e-posta. Global SMTP mailer'ı yapılandırmadığınız sürece ilk çalıştırma kurulumu için gereklidir (bkz. [Global mailer](#global-mailer)) |
103
124
 
104
125
  ### Gerekli (otomatik oluşturulur veya istenir)
105
126
 
@@ -141,6 +162,26 @@ Yükleyici, kullanıma hazır bir `.env` dosyası oluşturur. Aşağıdaki tablo
141
162
 
142
163
  ---
143
164
 
165
+ ### Global mailer
166
+
167
+ Varsayılan olarak, tüm işlemsel e-postalar Resend üzerinden `RESEND_API_KEY` kullanılarak gönderilir. Self-hosted dağıtımlar bunun yerine **tüm** e-postaları — şifre sıfırlamaları ve magic linkler gibi organizasyon dışı e-postalar dahil — ortam değişkenleriyle yapılandırılmış global bir mailer üzerinden yönlendirebilir.
168
+
169
+ Etkinleştirmek için `MAIL_PROVIDER` ayarlayın. Ayarlanmadığında, varsayılan Resend mailer kullanılır.
170
+
171
+ | Değişken | Örnek | Açıklama |
172
+ | -------------------- | ------------------------------ | --------------------------------------------------------------------------------- |
173
+ | `MAIL_PROVIDER` | `smtp` | Global transport: `smtp` veya `resend`. Varsayılanları kullanmak için ayarlamayın |
174
+ | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | Gönderen başlığı. Düz bir adres veya `Name <email>` formatını kabul eder |
175
+ | `MAIL_SMTP_HOST` | `smtp.acme.com` | SMTP host (`MAIL_PROVIDER=smtp` olduğunda gerekli) |
176
+ | `MAIL_SMTP_PORT` | `587` | SMTP port (varsayılan `587`) |
177
+ | `MAIL_SMTP_SECURE` | `false` | Implicit TLS. Port `465` için `true` olarak ayarlayın |
178
+ | `MAIL_SMTP_USER` | _(your user)_ | SMTP kullanıcı adı (isteğe bağlı; kimliği doğrulanmamış relayler için atlayın) |
179
+ | `MAIL_SMTP_PASSWORD` | _(your password)_ | SMTP şifresi |
180
+
181
+ > Öncelik: bir organizasyonun kendi mailer'ı (**Organization** panosundan yapılandırılmış) global mailer'dan daha yüksek önceliğe sahiptir ve bu da varsayılan Resend anahtarından daha yüksek önceliğe sahiptir.
182
+
183
+ ---
184
+
144
185
  ## Intlayer projenizi bağlama
145
186
 
146
187
  Yığın çalışmaya başladıktan sonra, projenizi `intlayer.org` yerine kendi barındırılan backend ve kontrol paneline yönlendirin.
@@ -259,47 +300,11 @@ docker run --rm \
259
300
 
260
301
  ---
261
302
 
262
- ## Ters Proxy Kullanımı (Nginx / Caddy)
263
-
264
- Üretim dağıtımları için, uygulama ve backend kapsayıcılarının önüne doğrudan açmak yerine bir ters proxy yerleştirin.
303
+ ## Sınırlamalar
265
304
 
266
- ### Nginx örneği
267
-
268
- ```nginx
269
- server {
270
- listen 80;
271
- server_name cms.example.com;
272
-
273
- location / {
274
- proxy_pass http://localhost:3000;
275
- proxy_set_header Host $host;
276
- proxy_set_header X-Real-IP $remote_addr;
277
- }
278
- }
279
-
280
- server {
281
- listen 80;
282
- server_name api.example.com;
283
-
284
- location / {
285
- proxy_pass http://localhost:3100;
286
- proxy_set_header Host $host;
287
- proxy_set_header X-Real-IP $remote_addr;
288
- }
289
- }
290
- ```
291
-
292
- Aşağıdaki `.env` değişkenlerini genel alan adlarınızla eşleşecek şekilde güncelleyin:
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_*` değişkenleri oluşturma zamanında kontrol paneli görüntüsüne gömülür. Görüntü oluşturulduktan sonra bunları değiştirirseniz, `app` görüntüsünü yeniden oluşturmanız (`docker compose build app`) veya çalışma zamanı yapılandırma enjeksiyonu kullanmanız gerekir.
305
+ - **MongoDB harici (Atlas) olmalıdır.** Backend yalnızca `mongodb+srv://` üzerinden bağlanır (`DB_ID` / `DB_MDP` / `DB_CLUSTER` öğesinden oluşturulur), bu nedenle düz `mongodb://host:27017` — konteyner'ın kendi paketlenmiş `mongod` dahil — kullanılamaz. Bir MongoDB Atlas kümesi sağlayın.
306
+ - **Özel alan adı yok.** Tüm tarayıcıya yönelik `VITE_*` URL'leri derleme zamanında uygulamaya satır içine alınır ve yayınlanan görüntü `localhost` değerleriyle gemi. Pano şu adreste erişilmelidir: `http://localhost:3000`; bunu genel bir alan adında sunmak, görüntüyü hedef URL'ler ile yeniden oluşturmayı gerektiriyor ve kutudan hemen çıkar desteklenmiyor.
307
+ - **E-posta çalışan bir postacı gerektirir.** İlk çalıştırma kurulumu e-posta doğrulamasını uygular, bu nedenle `RESEND_API_KEY` veya bir [global SMTP postacısı](#global-mailer) (`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`) yapılandırılmalıdır. İlk yönetici oturum açtıktan sonra, her kuruluş panodan kendi SMTP veya Resend postacısını da yapılandırabilir.
303
308
 
304
309
  ---
305
310
 
@@ -324,14 +329,6 @@ docker compose build app
324
329
  docker compose up -d app
325
330
  ```
326
331
 
327
- ### E-posta Gönderilmiyor
328
-
329
- Varsayılan olarak, tüm giden e-postalar Mailpit tarafından yakalanır. Gönderilen mesajları görmek için `http://localhost:8025` adresini açın. Gerçek e-posta göndermek için `.env` dosyasında `MAIL_PROVIDER=resend` ve `RESEND_API_KEY=<anahtarınız>` ayarlayın, ardından backend'i yeniden başlatın:
330
-
331
- ```sh
332
- docker compose restart backend
333
- ```
334
-
335
332
  ### MinIO Kovası Eksik
336
333
 
337
334
  Eğer `minio-init` tek seferlik servisi çalışmadıysa (veya MinIO hazır olmadan önce çalıştıysa), kovayı manuel olarak oluşturun:
@@ -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
+ - Аудиторія (Audience)
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` об'єднує в пакети (batch) три типи анонімних подій:
40
+
41
+ | Подія | Де фіксується | Про що вона говорить |
42
+ | ------------------ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
43
+ | `page_view` | На рівні провайдера (`IntlayerProvider`) | Яку сторінку та локаль переглянув користувач (сесія) під час першого завантаження, зміни маршруту або зміни локалі. |
44
+ | `content_exposure` | На рівні вузла (`useIntlayer` / плагіни) | Який ключ словника / шлях до ключа було фактично вирішено (resolved) та показано — і, якщо це частина експерименту, який **варіант** (variant). |
45
+ | `conversion` | Скрізь, де викликається `useConversion()` | Досягнення мети (реєстрація, клік, покупка...), пов'язане з A/B-варіантом, який бачив користувач у цій сесії. |
46
+
47
+ Події збираються в пам'яті та надсилаються як **один пакетний запит приблизно кожні 20 секунд** — а не при кожному натисканні клавіші або рендерингу — тому аналітика ніколи не впливає на час першого рендерингу і не додає запити на кожну взаємодію.
48
+
49
+ ## Як це працює для A/B-тестування контенту
50
+
51
+ Intlayer вже дозволяє вам оголошувати [Варіанти (Variants)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dynamic_dictionaries/index.md) контенту (наприклад, словник `hero-banner` з варіантами `control` та `black_friday`). `@intlayer/analytics` замикає цикл:
52
+
53
+ 1. `getVariant(experimentKey, variants)` детерміновано призначає кожну анонімну сесію варіанту — це чиста функція від ID сесії та ключа експерименту, тому призначення є **стабільним протягом усієї сесії** і не вимагає **запитів до сервера (server round-trips)** до першого рендерингу (без мерехтіння і зсувів макета).
54
+ 2. Кожна подія `content_exposure` містить показаний `variant`.
55
+ 3. `useConversion()` дозволяє пов'язати мету (наприклад, `"cta_click"`) з цим варіантом.
56
+ 4. Ендпоінт результатів експериментів у дашборді порівнює коефіцієнти конверсії (conversion rates) за варіантами, включаючи статистичну значущість (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
+ - ініціалізує клієнт аналітики при монтуванні (mount),
121
+ - записує `page_view` при початковому завантаженні,
122
+ - записує `page_view` при кожній зміні локалі,
123
+ - запускає цикл очищення (flush) з інтервалом ~20 с і надсилає всі події, що залишилися, при розмонтуванні / закритті вкладки (через `navigator.sendBeacon`, з відкатом (fallback) на `fetch(..., { keepalive: true })`).
124
+
125
+ ### Автоматичне відстеження на рівні вузла
126
+
127
+ Щоразу, коли `useIntlayer` розв'язує фрагмент контенту для відображення, інтерпретатор повідомляє про подію `content_exposure` для цього точного `dictionaryKey` + шляху до ключа + локалі — знову ж таки, жодних змін у коді не потрібно. Повторні покази одного й того ж вузла в межах вікна очищення (flush window) об'єднуються в одну подію з лічильником (`count`), тому список, що перемальовується (re-render) 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, що обертається (rotating id); сервер (backend) коли-небудь зберігає лише **SHA-256 хеш** цього id — ніколи сам id і ніколи IP-адресу.
170
+ - **Приблизне місцезнаходження (Coarse location)**: лише код країни, отриманий із заголовків геолокації CDN (наприклад, `cf-ipcountry`, `x-vercel-ip-country`, ...) — IP не зчитується і не зберігається.
171
+ - **URL виключають параметри пошуку** за замовчуванням, тому рядки запиту (query strings) ніколи не фіксуються.
172
+ - **Семпліювання (Sampling)**: `sampleRate` дозволяє зберігати лише частину подій показу контенту в додатках з високим трафіком.
173
+ - **Пакетна передача (Batched)**: один запит приблизно кожні 20 секунд (`flushInterval`) або раніше, якщо буфер заповнений (`maxBufferSize`) — ніколи не надсилається один запит на кожну подію.
174
+
175
+ ### Нульові витрати, якщо не встановлено
176
+
177
+ `@intlayer/analytics` дотримується того ж патерну опціональних залежностей, що й `@intlayer/editor`:
178
+
179
+ - кожна точка інтеграції завантажує пакет через **динамічний `import()`, обгорнутий у `try/catch`** — додаток, який ніколи не встановлює `@intlayer/analytics`, не збільшує розмір збірки (bundle size) і не витрачає ресурси під час виконання, а також ніколи не бачить помилок;
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
+ - **Перегляди сторінок (Page views)** за вибране вікно.
190
+ - **Графік динаміки** унікальних відвідувачів по днях.
191
+ - Вкладки з розбивкою по **Локалях (Locales)** та **Місцезнаходженню (Location)**, що ранжують вашу аудиторію за локаллю та країною.
192
+
193
+ ## Довідник API бекенда (Backend API reference)
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/uk/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/uk/dynamic_dictionaries/index.md)
219
+ - [Intlayer CMS - CMS SDK](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_CMS.md)
220
+ - [Візуальний редактор Intlayer (Visual Editor)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_visual_editor.md)
221
+ - [Довідник з конфігурації (Configuration Reference)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md)
222
+ - [Посібник із самостійного хостингу (Self-Hosting)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/self_hosting.md)