@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
@@ -49,26 +49,12 @@ Funkcja `getMultilingualUrls` generuje mapowanie wielojęzycznych URL-i, poprzed
49
49
 
50
50
  ## Parametry
51
51
 
52
- ## Parametry
52
+ ### Wymagane parametry
53
53
 
54
54
  - `url: string`
55
- - **Opis**: Oryginalny ciąg URL, który ma zostać poprzedzony prefiksami językowymi.
56
- - **Typ**: `string`
57
-
58
- - `locales: Locales[]`
59
- - **Opis**: Opcjonalna tablica obsługiwanych języków. Domyślnie używa skonfigurowanych języków w projekcie.
60
- - **Typ**: `Locales[]`
61
- - **Domyślnie**: `localesDefault`
62
-
63
- - `defaultLocale: Locales`
64
- - **Opis**: Domyślny język aplikacji. Domyślnie używa skonfigurowanego domyślnego języka w projekcie.
65
- - **Typ**: `Locales`
66
- - **Domyślnie**: `defaultLocaleDefault`
67
-
68
- - `prefixDefault: boolean`
69
- - **Opis**: Czy poprzedzać domyślny język prefiksem. Domyślnie używa skonfigurowanej wartości w projekcie.
70
- - **Typ**: `boolean`
71
- - **Domyślnie**: `prefixDefaultDefault`
55
+ - **Description**: Oryginalny ciąg URL do prefiksu z lokalizacjami.
56
+ - **Type**: `string`
57
+ - **Required**: Tak
72
58
 
73
59
  ### Parametry opcjonalne
74
60
 
@@ -24,26 +24,9 @@ history:
24
24
  author: aymericzip
25
25
  ---
26
26
 
27
- ## Przykład użycia w React
27
+ # Dokumentacja hooka useDictionary
28
28
 
29
- Poniżej znajduje się przykład, jak użyć hooka `useDictionary` w komponencie React:
30
-
31
- ```tsx fileName="./ComponentExample.tsx" codeFormat={["typescript", "esm"]}
32
- import type { FC } from "react";
33
- import { useDictionary } from "react-intlayer";
34
- import componentContent from "./component.content";
35
-
36
- const ComponentExample: FC = () => {
37
- const { title, content } = useDictionary(componentContent);
38
-
39
- return (
40
- <div>
41
- <h1>{title}</h1>
42
- <p>{content}</p>
43
- </div>
44
- );
45
- };
46
- ```
29
+ Hook `useDictionary` umożliwia przetwarzanie obiektu wyglądającego jak słownik (zawierającego klucze i zawartość) oraz obsługę tłumaczeń, enumeracji itp. w jego obrębie. W przeciwieństwie do `useIntlayer`, który jest przeznaczony do pracy z wygenerowanymi deklaracjami słownika, `useDictionary` jest bardziej elastyczny i może być używany z dowolnym obiektem, który następuje strukturę słownika.
47
30
 
48
31
  ## Integracja z serwerem
49
32
 
@@ -48,3 +48,18 @@ import "vite-intlayer";
48
48
  | `intlayerProxy` | Wtyczka middleware do środowiska deweloperskiego obsługująca wykrywanie lokalizacji i routingu. | - |
49
49
  | `intlayerMiddleware` | (**Przestarzały**) Alias dla `intlayerProxy`. | - |
50
50
  | `intlayerPrune` | Wtyczka do tree-shake i usuwania nieużywanych słowników podczas builda. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/vite-intlayer/intlayerPrune.md) |
51
+
52
+ ### Narzędzia
53
+
54
+ | Export | Opis | Powiązana dokumentacja |
55
+ | ---------------------------- | ------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
56
+ | `createIntlayerProxyHandler` | Zwraca niezależne od framework'u oprogramowanie Node.js `(req, res, next)` middleware z logiką routowania locale'i. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/vite-intlayer/intlayerProxy.md) |
57
+
58
+ ### Typy
59
+
60
+ | Export | Opis |
61
+ | ---------------------------- | --------------------------------------------------------------------------------------------------------------- |
62
+ | `IntlayerPluginOptions` | Opcje akceptowane przez `intlayer()`. Rozszerza `GetConfigurationOptions` o `compatCallers` i `proxy`. |
63
+ | `IntlayerProxyPluginOptions` | Opcje akceptowane przez `intlayerProxy()` i `createIntlayerProxyHandler()`. Zawiera `ignore` i `configOptions`. |
64
+ | `IntlayerCompilerOptions` | Opcje akceptowane przez `intlayerCompiler()`. Zawiera `configOptions` i `compilerConfig`. |
65
+ | `CompatCallerConfig` | Re-export z `@intlayer/babel`. Opisuje wzorzec compat-adapter caller do analizy użycia pól. |
@@ -39,11 +39,126 @@ export default defineConfig({
39
39
  });
40
40
  ```
41
41
 
42
- ## Opis
42
+ ## Opcje
43
43
 
44
- Wtyczka wykonuje następujące zadania:
44
+ ```ts
45
+ import type { IntlayerPluginOptions } from "vite-intlayer";
46
+ ```
47
+
48
+ `IntlayerPluginOptions` rozszerza `GetConfigurationOptions` (zobacz `@intlayer/config`) o następujące dodatkowe pola:
49
+
50
+ | Opcja | Typ | Domyślnie | Opis |
51
+ | --------------- | ------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
52
+ | `compatCallers` | `CompatCallerConfig[]` | `[]` | Dodatkowe wzorce callerów dla pakietów compat-adapter (np. `@intlayer/react-i18next`). Przekazywane do analizatora użycia pól w czasie budowania. |
53
+ | `proxy` | `{ ignore?: (req) => boolean }` | `undefined` | Opcje przekazywane do wbudowanego proxy routingu lokalizacyjnego. Użyj `ignore` aby wykluczyć określone ścieżki (np. trasy API) z routingu lokalizacyjnego. |
54
+
55
+ Wszystkie inne opcje (`override`, `configFile`, …) są przekazywane bezpośrednio do `getConfiguration()`.
56
+
57
+ ### Przykłady
58
+
59
+ #### Ignoruj trasy API z routingu locale'a
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
+ #### Ze spersonalizowaną ścieżką pliku konfiguracyjnego
78
+
79
+ ```ts
80
+ export default defineConfig({
81
+ plugins: [
82
+ intlayer({
83
+ configFile: "./config/intlayer.config.ts",
84
+ }),
85
+ ],
86
+ });
87
+ ```
88
+
89
+ #### Z adapterami kompatybilności
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
+ ## Co robi wtyczka
105
+
106
+ ### 1. Przygotowanie słownika
107
+
108
+ Przed rozpoczęciem buildu (i raz na godzinę w dev), `intlayer` wywołuje `prepareIntlayer` aby skompilować wszystkie pliki `.content.ts` do zoptymalizowanych słowników JSON przechowywanych w `.intlayer/`.
109
+
110
+ ### 2. Aliasy modułów
111
+
112
+ Plugin dodaje aliasy resolve Vite'a, aby `import { myDict } from 'intlayer/dictionaries/my-dict'` rozwiązywał się do skompilowanego pliku JSON na dysku. Buildy SSR wykorzystują `ssr.noExternal`, aby zapewnić, że wszystkie pakiety `@intlayer/*` są spakowane z zastosowanymi aliasami.
113
+
114
+ ### 3. Dev-server watcher
115
+
116
+ W trybie development uruchamiany jest watcher `chokidar`. Gdy plik `.content.ts` się zmieni, słowniki są rekompilowane, a HMR Vite'a propaguje aktualizację do przeglądarki.
117
+
118
+ ### 4. Wbudowany proxy do routowania locale (v9+)
119
+
120
+ Od Intlayer v9 middleware `intlayerProxy` jest rejestrowany automatycznie wewnątrz `intlayer()`. Obsługuje:
121
+
122
+ - Wykrywanie locale z prefiksu URL, cookies i nagłówka `Accept-Language`.
123
+ - Przekierowania 301 gdy wykryte locale nie odpowiada bieżącemu URL.
124
+ - Wewnętrzne przepisywanie URL-i tak aby framework widział prawidłowy parametr trasy `[locale]`.
125
+
126
+ Proxy jest kontrolowane przez `routing.enableProxy` (domyślnie `true`) w konfiguracji Intlayer. Aby całkowicie je wyłączyć:
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
+ Aby dostosować zachowanie proxy bez osobnego wywołania `intlayerProxy()`, przekaż opcje `proxy` do głównego pluginu:
138
+
139
+ ```ts
140
+ intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api") } });
141
+ ```
142
+
143
+ Zapoznaj się z [dokumentacją intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/vite-intlayer/intlayerProxy.md) aby poznać pełne referencje zachowania routowania.
144
+
145
+ ### 5. Bundled compiler (v9+)
146
+
147
+ Gdy `compiler.enabled` jest `true` **oraz** `compiler.output` jest ustawiony w konfiguracji Intlayer, `intlayer()` rejestruje `intlayerCompiler` automatycznie. Compiler wyodrębnia deklaracje treści inline zapisane bezpośrednio w plikach komponentów i zapisuje je do słowników w czasie transformacji. Zobacz [dokumentację intlayerCompiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pl/packages/vite-intlayer/intlayerCompiler.md).
148
+
149
+ ### 6. Optymalizacje budowania
150
+
151
+ Podczas budowania w trybie produkcji plugin dodaje:
152
+
153
+ - **intlayerOptimize** – transformacja Babel, która przepisuje `useIntlayer('key')` → `useDictionary(hash)` i wstrzykuje bezpośrednie importy JSON.
154
+ - **intlayerPrune** – usuwa nieużywane pola zawartości z JSON słownika.
155
+ - **intlayerMinify** – kompresuje JSON słownika i opcjonalnie zmienia nazwy pól.
156
+
157
+ Te funkcje są nieaktywne w trybie rozwojowym.
158
+
159
+ ## Przestarzałe aliasy
45
160
 
46
- 1. **Przygotowanie słowników**: kompiluje słowniki do zoptymalizowanych plików na początku procesu build lub w trybie deweloperskim.
47
- 2. **Tryb nasłuchiwania**: w trybie deweloperskim obserwuje zmiany w plikach słowników i automatycznie je rekompiluje.
48
- 3. **Aliasy**: udostępnia aliasy do dostępu do słowników w Twojej aplikacji.
49
- 4. **Tree-shaking**: wspiera usuwanie nieużywanych tłumaczeń (tree-shaking) za pomocą pluginu `intlayerPrune`.
161
+ | Przestarzały eksport | Zamiennik |
162
+ | -------------------- | ---------- |
163
+ | `intlayerPlugin` | `intlayer` |
164
+ | `intLayerPlugin` | `intlayer` |
@@ -30,16 +30,89 @@ Wtyczka Vite `intlayerPrune` służy do tree-shakingu i usuwania nieużywanych s
30
30
 
31
31
  ## Użycie
32
32
 
33
+ ### W ramach `intlayer()` (zalecane)
34
+
35
+ Włącz pruning poprzez konfigurację Intlayer, a główny plugin zajmie się wszystkim:
36
+
37
+ ```ts
38
+ // intlayer.config.ts
39
+ import { defineConfig } from "intlayer";
40
+
41
+ export default defineConfig({
42
+ build: {
43
+ optimize: true, // włącza zarówno prune, jak i minify
44
+ },
45
+ });
46
+ ```
47
+
48
+ ```ts
49
+ // vite.config.ts
50
+ import { defineConfig } from "vite";
51
+ import { intlayer } from "vite-intlayer";
52
+
53
+ export default defineConfig({
54
+ plugins: [intlayer()],
55
+ });
56
+ ```
57
+
58
+ ### Standalone
59
+
60
+ Jeśli ręcznie komponujesz stos pluginów, `intlayerPrune` i `intlayerMinify` współdzielą obiekt `PruneContext`, który musi być utworzony raz i przekazany do obu:
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), // opcjonalnie, odczytuje z tego samego kontekstu
76
+ ],
40
77
  });
41
78
  ```
42
79
 
43
- ## Opis
80
+ ## Jak to działa
81
+
82
+ ### 1. Analiza użycia (buildStart)
83
+
84
+ Podczas `buildStart`, plugin `intlayerOptimize` (również część `intlayer()`) skanuje każdy plik źródłowy komponentu wymieniony w `build.filesList`. Dla każdego wywołania `useIntlayer('key')` lub `getIntlayer('key')` rejestruje dokładnie, które pola są dostępne, np.:
85
+
86
+ ```ts
87
+ const { title, description } = useIntlayer("myDict");
88
+ // rejestruje: myDict → { title, description }
89
+ ```
90
+
91
+ To buduje `pruneContext.fieldUsageMap` przed uruchomieniem jakichkolwiek wywołań `transform`.
92
+
93
+ ### 2. JSON pruning (transform, enforce: 'pre')
94
+
95
+ When Vite processes a compiled dictionary JSON file, `intlayerPrune` intercepts it before Vite's built-in JSON → ESM conversion. It reads the field-usage map from `pruneContext` and removes any content field that is not in the recorded usage set.
96
+
97
+ Two content shapes are supported:
98
+
99
+ - **Static dictionaries** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`. Fields are pruned per-locale inside `translation`.
100
+ - **Dynamic (per-locale) dictionaries** — flat `{ fieldA: ..., fieldB: ... }`. Fields are pruned at the top level.
101
+
102
+ ### 3. Przypadki szczególne
103
+
104
+ Jeśli struktura zawartości słownika nie może być rozpoznana (np. niezwykły kształt zagnieżdżenia), jest dodawana do `pruneContext.dictionariesWithEdgeCases` i **pozostawiana bez zmian**. Rejestrowane jest ostrzeżenie. `intlayerMinify` również pomija te słowniki.
105
+
106
+ ### 4. Mapa zmian nazw pól
107
+
108
+ Gdy przycinanie przebiegnie pomyślnie, `intlayerPrune` zapisuje również `pruneContext.dictionaryKeyToFieldRenameMap` — mapowanie z oryginalnych nazw pól na krótkie aliasy. `intlayerMinify` odczytuje tę mapę, aby zmienić nazwy pól w wyjściowym JSON, a przebieg zmiany nazwy Babel w `intlayerOptimize` aktualizuje dostępy do właściwości w plikach źródłowych odpowiednio.
109
+
110
+ ## Warunki aktywacji
111
+
112
+ `intlayerPrune` jest aktywny **tylko** wtedy, gdy wszystkie poniższe warunki są spełnione:
113
+
114
+ 1. Polecenie Vite to `build`.
115
+ 2. `build.optimize` to `true` (lub `undefined`, które domyślnie przyjmuje wartość `true` dla kompilacji).
116
+ 3. `build.purge` to `true` w konfiguracji Intlayer.
44
117
 
45
- Wtyczka analizuje kod źródłowy, aby zidentyfikować, które klucze słowników są faktycznie używane. Następnie usuwa wszelkie nieużywane treści z zabundlowanych plików słowników. Jest to szczególnie przydatne w dużych projektach z wieloma słownikami, gdzie tylko podzbiór jest używany na określonych stronach lub w komponentach.
118
+ Jest automatycznie **wyłączony** gdy `editor.enabled` to `true`, ponieważ edytor wymaga pełnej zawartości słownika.
@@ -373,21 +373,6 @@ curl -fsSL https://intlayer.org/install.sh | sh
373
373
 
374
374
  Instalator pobiera `docker-compose.yml` i `.env`, automatycznie generuje wymagane sekrety i uruchamia `docker compose up -d`. Wszystko — panel, API, baza danych, magazyn obiektów oraz transakcyjne wiadomości e-mail — działa lokalnie w kontenerach.
375
375
 
376
- ### Uwzględnione serwisy
377
-
378
- | Serwis | Przeznaczenie |
379
- | ------------------------------------------ | ---------------------------------------------------------------------------------- |
380
- | **app** (TanStack Start) | Interfejs panelu na porcie `3000` |
381
- | **backend** (Fastify/Bun) | REST API na porcie `3100` |
382
- | **MongoDB 7** (jednowęzłowy zestaw replik) | Główna baza danych |
383
- | **Redis 7** | Kolejki zadań i pamięć podręczna |
384
- | **MinIO** | Magazyn obiektów zgodny z S3 (awatary, zrzuty ekranu) |
385
- | **Mailpit** | Lokalny odbiorca SMTP + interfejs webowy dla poczty transakcyjnej na porcie `8025` |
386
-
387
- Chromium (używany do generowania zrzutów ekranu przez Puppeteer) jest wbudowany w obraz backendu — żaden dodatkowy kontener nie jest potrzebny.
388
-
389
- ---
390
-
391
376
  ## Uwagi dotyczące migracji z wersji v8
392
377
 
393
378
  Jeśli aktualizujesz aplikację z wersji v8, pamiętaj, że wersja v9 nie zawiera zmian wprowadzających niekompatybilność wsteczną (breaking changes). Oto jednak kluczowe zmiany:
@@ -64,6 +64,32 @@ Chromium (używany do generowania zrzutów ekranu przez Puppeteer) jest dołącz
64
64
 
65
65
  ## Szybki start
66
66
 
67
+ Pobierz i uruchom opublikowany obraz, podając swoje poświadczenia i sekrety MongoDB Atlas:
68
+
69
+ ```sh
70
+ docker run -d --name intlayer \
71
+ -p 3000:3000 \
72
+ -p 3100:3100 \
73
+ -p 9000:9000 \
74
+ -p 9001:9001 \
75
+ -v intlayer-data:/data \
76
+ -e DB_ID="<atlas-user>" \
77
+ -e DB_MDP="<atlas-password>" \
78
+ -e DB_CLUSTER="<cluster>.xxxxx.mongodb.net" \
79
+ -e BETTER_AUTH_SECRET="$(openssl rand -hex 32)" \
80
+ -e S3_SECRET_ACCESS_KEY="$(openssl rand -hex 16)" \
81
+ -e RESEND_API_KEY="<your-resend-key>" \
82
+ aymericzip/intlayer-selfhost
83
+ ```
84
+
85
+ Następnie otwórz **http://localhost:3000**.
86
+
87
+ > Dashboard jest obsługiwany na `localhost`. Zapoznaj się z [Ograniczeniami](#limitations) — domeny niestandardowe nie są obsługiwane przez opublikowany obraz.
88
+
89
+ ---
90
+
91
+ ## Szybki start
92
+
67
93
  ```sh
68
94
  curl -fsSL https://intlayer.org/install.sh | sh
69
95
  ```
@@ -99,7 +125,16 @@ Wewnętrzne porty (mongo, redis) nie są domyślnie udostępniane na hoście.
99
125
 
100
126
  ## Zmienne środowiskowe
101
127
 
102
- Instalator generuje gotowy do użycia plik `.env`. Poniższa tabela opisuje każdą zmienną.
128
+ ### Wymagane
129
+
130
+ | Variable | Example | Description |
131
+ | ---------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
132
+ | `DB_ID` | `intlayer` | Użytkownik MongoDB Atlas |
133
+ | `DB_MDP` | _(your password)_ | Hasło MongoDB Atlas |
134
+ | `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | Host klastra MongoDB Atlas (używany w URI `mongodb+srv://`) |
135
+ | `BETTER_AUTH_SECRET` | _(generated)_ | 32-bajtowy secret do podpisywania sesji |
136
+ | `S3_SECRET_ACCESS_KEY` | _(generated)_ | Secret dla wbudowanego MinIO |
137
+ | `RESEND_API_KEY` | _(your key)_ | Transakcyjne e-maile via Resend. Wymagane dla konfiguracji przy pierwszym uruchomieniu, chyba że skonfigurujesz globalny mailer SMTP (zobacz [Global mailer](#global-mailer)) |
103
138
 
104
139
  ### Wymagane (generowane automatycznie lub monitowane)
105
140
 
@@ -141,6 +176,26 @@ Instalator generuje gotowy do użycia plik `.env`. Poniższa tabela opisuje każ
141
176
 
142
177
  ---
143
178
 
179
+ ### Globalny dostawca poczty
180
+
181
+ Domyślnie wszystkie transakcyjne wiadomości e-mail są wysyłane za pośrednictwem Resend przy użyciu `RESEND_API_KEY`. Wdrożenia self-hosted mogą zamiast tego kierować **każdy** e-mail — w tym e-maile niezwiązane z organizacją, takie jak resetowanie hasła i linki magiczne — za pośrednictwem globalnego dostawcy poczty skonfigurowanego zmiennymi środowiskowymi.
182
+
183
+ Ustaw `MAIL_PROVIDER`, aby go aktywować. Jeśli nie jest ustawiony, używany jest domyślny dostawca Resend.
184
+
185
+ | Zmienna | Przykład | Opis |
186
+ | -------------------- | ------------------------------ | --------------------------------------------------------------------------------- |
187
+ | `MAIL_PROVIDER` | `smtp` | Transport globalny: `smtp` lub `resend`. Pozostaw puste, aby użyć domyślnych |
188
+ | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | Nagłówek nadawcy. Akceptuje zwykły adres lub format `Nazwa <email>` |
189
+ | `MAIL_SMTP_HOST` | `smtp.acme.com` | Host SMTP (wymagany, gdy `MAIL_PROVIDER=smtp`) |
190
+ | `MAIL_SMTP_PORT` | `587` | Port SMTP (domyślnie `587`) |
191
+ | `MAIL_SMTP_SECURE` | `false` | Niejawny TLS. Ustaw `true` dla portu `465` |
192
+ | `MAIL_SMTP_USER` | _(twoja nazwa użytkownika)_ | Nazwa użytkownika SMTP (opcjonalnie; pomiń dla nieuwierzytelnionych przekaźników) |
193
+ | `MAIL_SMTP_PASSWORD` | _(twoje hasło)_ | Hasło SMTP |
194
+
195
+ > Priorytet: własny dostawca poczty organizacji (skonfigurowany z pulpitu **Organizacji**) ma priorytet nad globalnym dostawcą poczty, który z kolei ma priorytet nad domyślnym kluczem Resend.
196
+
197
+ ---
198
+
144
199
  ## Łączenie Twojego projektu Intlayer
145
200
 
146
201
  Po uruchomieniu stosu, skieruj swój projekt na samodzielnie hostowany backend i pulpit nawigacyjny zamiast na `intlayer.org`.
@@ -259,47 +314,11 @@ docker run --rm \
259
314
 
260
315
  ---
261
316
 
262
- ## Używanie reverse proxy (Nginx / Caddy)
263
-
264
- W przypadku wdrożeń produkcyjnych, umieść reverse proxy przed kontenerami aplikacji i backendu, zamiast udostępniać je bezpośrednio.
265
-
266
- ### Przykład Nginx
267
-
268
- ```nginx
269
- server {
270
- listen 80;
271
- server_name cms.example.com;
272
-
273
- location / {
274
- proxy_pass http://localhost:3000;
275
- proxy_set_header Host $host;
276
- proxy_set_header X-Real-IP $remote_addr;
277
- }
278
- }
317
+ ## Ograniczenia
279
318
 
280
- server {
281
- listen 80;
282
- server_name api.example.com;
283
-
284
- location / {
285
- proxy_pass http://localhost:3100;
286
- proxy_set_header Host $host;
287
- proxy_set_header X-Real-IP $remote_addr;
288
- }
289
- }
290
- ```
291
-
292
- Zaktualizuj poniższe zmienne `.env`, aby odpowiadały Twoim publicznym domenom:
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
- > Zmienne `VITE_*` są wbudowywane w obraz pulpitu nawigacyjnego podczas kompilacji. Jeśli zmienisz je po zbudowaniu obrazu, musisz ponownie zbudować obraz `app` (`docker compose build app`) lub użyć wstrzykiwania konfiguracji w czasie uruchomienia.
319
+ - **MongoDB musi być zewnętrzna (Atlas).** Backend łączy się tylko przez `mongodb+srv://` (zbudowany z `DB_ID` / `DB_MDP` / `DB_CLUSTER`), więc zwykły `mongodb://host:27017` — w tym wbudowany `mongod` kontenera — nie może być używany. Zapewnij klaster MongoDB Atlas.
320
+ - **Brak niestandardowej domeny.** Wszystkie adresy URL `VITE_*` dostępne w przeglądarce są wbudowywane w aplikację w czasie kompilacji, a opublikowany obraz zawiera wartości `localhost`. Dostęp do dashboardu musi być realizowany pod adresem `http://localhost:3000`; udostępnienie go w domenie publicznej wymagałoby przebudowania obrazu z docelowymi adresami URL wbakowanymi w kod i nie jest obsługiwane out of the box.
321
+ - **Email wymaga działającego mailera.** Konfiguracja przy pierwszym uruchomieniu wymusza weryfikację email, więc musi być skonfigurowany `RESEND_API_KEY` lub [globalny mailer SMTP](#global-mailer) (`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`). Po zalogowaniu się pierwszego administratora każda organizacja może również skonfigurować swój własny mailer SMTP lub Resend z dashboardu.
303
322
 
304
323
  ---
305
324
 
@@ -324,14 +343,6 @@ docker compose build app
324
343
  docker compose up -d app
325
344
  ```
326
345
 
327
- ### E-mail nie jest wysyłany
328
-
329
- Domyślnie wszystkie wychodzące wiadomości e-mail są przechwytywane przez Mailpit. Otwórz `http://localhost:8025`, aby zobaczyć wysłane wiadomości. Aby wysyłać prawdziwe wiadomości e-mail, ustaw `MAIL_PROVIDER=resend` i `RESEND_API_KEY=<your-key>` w `.env`, a następnie zrestartuj backend:
330
-
331
- ```sh
332
- docker compose restart backend
333
- ```
334
-
335
346
  ### Brak zasobnika MinIO
336
347
 
337
348
  Jeśli jednorazowa usługa `minio-init` nie uruchomiła się (lub uruchomiła się, zanim MinIO było gotowe), utwórz zasobnik ręcznie: