@intlayer/docs 9.5.5 → 9.5.7

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 (920) hide show
  1. package/README.md +0 -1
  2. package/blog/ar/i18next_vs_intlayer-i18next.md +122 -15
  3. package/blog/ar/i18next_vs_intlayer.md +130 -16
  4. package/blog/ar/lingui_vs_intlayer.md +122 -15
  5. package/blog/ar/next-intl_vs_intlayer-next-intl.md +124 -15
  6. package/blog/ar/next-intl_vs_intlayer.md +136 -20
  7. package/blog/ar/transform_existing_vite_react_app_using_compiler.md +4 -2
  8. package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +119 -17
  9. package/blog/ar/vue-i18n_vs_intlayer.md +193 -31
  10. package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +361 -0
  11. package/blog/de/i18next_vs_intlayer-i18next.md +122 -15
  12. package/blog/de/i18next_vs_intlayer.md +128 -14
  13. package/blog/de/lingui_vs_intlayer.md +122 -15
  14. package/blog/de/next-intl_vs_intlayer-next-intl.md +124 -15
  15. package/blog/de/next-intl_vs_intlayer.md +125 -15
  16. package/blog/de/transform_existing_vite_react_app_using_compiler.md +4 -2
  17. package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  18. package/blog/de/vue-i18n_vs_intlayer.md +193 -31
  19. package/blog/en/i18next_vs_intlayer-i18next.md +121 -14
  20. package/blog/en/i18next_vs_intlayer.md +128 -14
  21. package/blog/en/lingui_vs_intlayer.md +124 -15
  22. package/blog/en/next-intl_vs_intlayer-next-intl.md +123 -14
  23. package/blog/en/next-intl_vs_intlayer.md +125 -13
  24. package/blog/en/transform_existing_vite_react_app_using_compiler.md +4 -2
  25. package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +115 -15
  26. package/blog/en/vue-i18n_vs_intlayer.md +188 -27
  27. package/blog/en-GB/i18next_vs_intlayer-i18next.md +121 -14
  28. package/blog/en-GB/i18next_vs_intlayer.md +128 -14
  29. package/blog/en-GB/lingui_vs_intlayer.md +122 -15
  30. package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +124 -15
  31. package/blog/en-GB/next-intl_vs_intlayer.md +125 -15
  32. package/blog/en-GB/transform_existing_vite_react_app_using_compiler.md +4 -2
  33. package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  34. package/blog/en-GB/vue-i18n_vs_intlayer.md +187 -25
  35. package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +116 -0
  36. package/blog/es/i18next_vs_intlayer-i18next.md +122 -15
  37. package/blog/es/i18next_vs_intlayer.md +128 -14
  38. package/blog/es/lingui_vs_intlayer.md +122 -15
  39. package/blog/es/next-intl_vs_intlayer-next-intl.md +124 -15
  40. package/blog/es/next-intl_vs_intlayer.md +125 -15
  41. package/blog/es/transform_existing_vite_react_app_using_compiler.md +4 -2
  42. package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  43. package/blog/es/vue-i18n_vs_intlayer.md +193 -31
  44. package/blog/fr/i18next_vs_intlayer-i18next.md +122 -15
  45. package/blog/fr/i18next_vs_intlayer.md +128 -14
  46. package/blog/fr/lingui_vs_intlayer.md +122 -15
  47. package/blog/fr/next-intl_vs_intlayer-next-intl.md +124 -15
  48. package/blog/fr/next-intl_vs_intlayer.md +127 -15
  49. package/blog/fr/transform_existing_vite_react_app_using_compiler.md +4 -2
  50. package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +118 -17
  51. package/blog/fr/vue-i18n_vs_intlayer.md +192 -31
  52. package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +329 -7
  53. package/blog/hi/i18next_vs_intlayer-i18next.md +122 -15
  54. package/blog/hi/i18next_vs_intlayer.md +130 -16
  55. package/blog/hi/lingui_vs_intlayer.md +122 -15
  56. package/blog/hi/next-intl_vs_intlayer-next-intl.md +124 -15
  57. package/blog/hi/next-intl_vs_intlayer.md +135 -19
  58. package/blog/hi/transform_existing_vite_react_app_using_compiler.md +4 -2
  59. package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  60. package/blog/hi/vue-i18n_vs_intlayer.md +193 -31
  61. package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  62. package/blog/id/i18next_vs_intlayer-i18next.md +122 -15
  63. package/blog/id/i18next_vs_intlayer.md +128 -14
  64. package/blog/id/lingui_vs_intlayer.md +122 -15
  65. package/blog/id/next-intl_vs_intlayer-next-intl.md +124 -15
  66. package/blog/id/next-intl_vs_intlayer.md +135 -19
  67. package/blog/id/transform_existing_vite_react_app_using_compiler.md +4 -2
  68. package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +354 -2
  69. package/blog/id/vue-i18n_vs_intlayer.md +188 -26
  70. package/blog/id/vue-i18n_vs_intlayer_benchmark.md +327 -7
  71. package/blog/it/i18next_vs_intlayer-i18next.md +122 -15
  72. package/blog/it/i18next_vs_intlayer.md +128 -14
  73. package/blog/it/lingui_vs_intlayer.md +122 -15
  74. package/blog/it/next-intl_vs_intlayer-next-intl.md +124 -15
  75. package/blog/it/next-intl_vs_intlayer.md +125 -15
  76. package/blog/it/transform_existing_vite_react_app_using_compiler.md +4 -2
  77. package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  78. package/blog/it/vue-i18n_vs_intlayer.md +191 -31
  79. package/blog/it/vue-i18n_vs_intlayer_benchmark.md +332 -5
  80. package/blog/ja/i18next_vs_intlayer-i18next.md +122 -15
  81. package/blog/ja/i18next_vs_intlayer.md +129 -17
  82. package/blog/ja/lingui_vs_intlayer.md +122 -15
  83. package/blog/ja/next-intl_vs_intlayer-next-intl.md +124 -15
  84. package/blog/ja/next-intl_vs_intlayer.md +124 -14
  85. package/blog/ja/transform_existing_vite_react_app_using_compiler.md +4 -2
  86. package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  87. package/blog/ja/vue-i18n_vs_intlayer.md +193 -31
  88. package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +361 -0
  89. package/blog/ko/i18next_vs_intlayer-i18next.md +122 -15
  90. package/blog/ko/i18next_vs_intlayer.md +129 -17
  91. package/blog/ko/lingui_vs_intlayer.md +122 -15
  92. package/blog/ko/next-intl_vs_intlayer-next-intl.md +124 -15
  93. package/blog/ko/next-intl_vs_intlayer.md +134 -18
  94. package/blog/ko/transform_existing_vite_react_app_using_compiler.md +4 -2
  95. package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  96. package/blog/ko/vue-i18n_vs_intlayer.md +193 -31
  97. package/blog/pl/i18next_vs_intlayer-i18next.md +122 -15
  98. package/blog/pl/i18next_vs_intlayer.md +128 -14
  99. package/blog/pl/lingui_vs_intlayer.md +122 -15
  100. package/blog/pl/next-intl_vs_intlayer-next-intl.md +124 -15
  101. package/blog/pl/next-intl_vs_intlayer.md +134 -18
  102. package/blog/pl/transform_existing_vite_react_app_using_compiler.md +4 -2
  103. package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  104. package/blog/pl/vue-i18n_vs_intlayer.md +188 -26
  105. package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +361 -0
  106. package/blog/pt/i18next_vs_intlayer-i18next.md +122 -15
  107. package/blog/pt/i18next_vs_intlayer.md +128 -14
  108. package/blog/pt/lingui_vs_intlayer.md +122 -15
  109. package/blog/pt/next-intl_vs_intlayer-next-intl.md +124 -15
  110. package/blog/pt/next-intl_vs_intlayer.md +131 -15
  111. package/blog/pt/transform_existing_vite_react_app_using_compiler.md +4 -2
  112. package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  113. package/blog/pt/vue-i18n_vs_intlayer.md +193 -31
  114. package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +361 -0
  115. package/blog/ru/i18next_vs_intlayer-i18next.md +122 -15
  116. package/blog/ru/i18next_vs_intlayer.md +130 -16
  117. package/blog/ru/lingui_vs_intlayer.md +122 -15
  118. package/blog/ru/next-intl_vs_intlayer-next-intl.md +125 -16
  119. package/blog/ru/next-intl_vs_intlayer.md +123 -13
  120. package/blog/ru/transform_existing_vite_react_app_using_compiler.md +4 -2
  121. package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +127 -27
  122. package/blog/ru/vue-i18n_vs_intlayer.md +193 -31
  123. package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +326 -19
  124. package/blog/tr/i18next_vs_intlayer-i18next.md +122 -15
  125. package/blog/tr/i18next_vs_intlayer.md +128 -14
  126. package/blog/tr/lingui_vs_intlayer.md +122 -15
  127. package/blog/tr/next-intl_vs_intlayer-next-intl.md +124 -15
  128. package/blog/tr/next-intl_vs_intlayer.md +136 -20
  129. package/blog/tr/transform_existing_vite_react_app_using_compiler.md +4 -2
  130. package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  131. package/blog/tr/vue-i18n_vs_intlayer.md +188 -26
  132. package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +361 -0
  133. package/blog/uk/i18next_vs_intlayer-i18next.md +122 -15
  134. package/blog/uk/i18next_vs_intlayer.md +130 -16
  135. package/blog/uk/lingui_vs_intlayer.md +122 -15
  136. package/blog/uk/next-intl_vs_intlayer-next-intl.md +124 -15
  137. package/blog/uk/next-intl_vs_intlayer.md +135 -19
  138. package/blog/uk/transform_existing_vite_react_app_using_compiler.md +4 -2
  139. package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +135 -17
  140. package/blog/uk/vue-i18n_vs_intlayer.md +188 -27
  141. package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +361 -0
  142. package/blog/vi/i18next_vs_intlayer-i18next.md +122 -15
  143. package/blog/vi/i18next_vs_intlayer.md +128 -14
  144. package/blog/vi/lingui_vs_intlayer.md +122 -15
  145. package/blog/vi/next-intl_vs_intlayer-next-intl.md +124 -15
  146. package/blog/vi/next-intl_vs_intlayer.md +135 -19
  147. package/blog/vi/transform_existing_vite_react_app_using_compiler.md +4 -2
  148. package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  149. package/blog/vi/vue-i18n_vs_intlayer.md +188 -26
  150. package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +361 -0
  151. package/blog/zh/i18next_vs_intlayer-i18next.md +122 -15
  152. package/blog/zh/i18next_vs_intlayer.md +128 -14
  153. package/blog/zh/lingui_vs_intlayer.md +122 -15
  154. package/blog/zh/next-intl_vs_intlayer-next-intl.md +124 -15
  155. package/blog/zh/next-intl_vs_intlayer.md +125 -15
  156. package/blog/zh/transform_existing_vite_react_app_using_compiler.md +4 -2
  157. package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
  158. package/blog/zh/vue-i18n_vs_intlayer.md +192 -31
  159. package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +340 -9
  160. package/dist/cjs/generated/docs.entry.cjs +40 -40
  161. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  162. package/dist/cjs/index.cjs +2 -2
  163. package/dist/esm/generated/docs.entry.mjs +40 -40
  164. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  165. package/dist/esm/index.mjs +2 -2
  166. package/dist/types/generated/docs.entry.d.ts +2 -2
  167. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  168. package/docs/ar/benchmark/nextjs.md +13 -13
  169. package/docs/ar/benchmark/solid.md +5 -5
  170. package/docs/ar/benchmark/svelte.md +4 -4
  171. package/docs/ar/benchmark/tanstack.md +14 -13
  172. package/docs/ar/benchmark/vue.md +5 -5
  173. package/docs/ar/chrome_extension.md +130 -0
  174. package/docs/ar/cli/index.md +6 -1
  175. package/docs/ar/cli/infra.md +162 -0
  176. package/docs/ar/cli/init.md +24 -1
  177. package/docs/ar/dictionary/html.md +173 -5
  178. package/docs/ar/dictionary/markdown.md +263 -1
  179. package/docs/ar/intlayer_with_analog.md +23 -1
  180. package/docs/ar/intlayer_with_angular_19.md +24 -1
  181. package/docs/ar/intlayer_with_angular_21.md +24 -1
  182. package/docs/ar/intlayer_with_astro.md +42 -32
  183. package/docs/ar/intlayer_with_astro_lit.md +56 -36
  184. package/docs/ar/intlayer_with_astro_preact.md +57 -36
  185. package/docs/ar/intlayer_with_astro_react.md +57 -36
  186. package/docs/ar/intlayer_with_astro_solid.md +57 -36
  187. package/docs/ar/intlayer_with_astro_svelte.md +56 -36
  188. package/docs/ar/intlayer_with_astro_vue.md +56 -36
  189. package/docs/ar/intlayer_with_react_router_v7.md +12 -1
  190. package/docs/ar/intlayer_with_remix_3.md +22 -1
  191. package/docs/ar/intlayer_with_solid_start.md +14 -7
  192. package/docs/ar/intlayer_with_svelte_kit.md +12 -1
  193. package/docs/ar/intlayer_with_tanstack+solid.md +13 -2
  194. package/docs/ar/intlayer_with_tanstack.md +13 -6
  195. package/docs/ar/intlayer_with_vite+lit.md +75 -3
  196. package/docs/ar/intlayer_with_vite+preact.md +27 -19
  197. package/docs/ar/intlayer_with_vite+react.md +27 -19
  198. package/docs/ar/intlayer_with_vite+solid.md +27 -19
  199. package/docs/ar/intlayer_with_vite+svelte.md +27 -19
  200. package/docs/ar/intlayer_with_vite+vanilla.md +16 -3
  201. package/docs/ar/intlayer_with_vite+vue.md +27 -19
  202. package/docs/ar/introduction.md +0 -1
  203. package/docs/ar/readme.md +0 -1
  204. package/docs/ar/releases/v8.md +1 -5
  205. package/docs/ar/self_hosting.md +406 -231
  206. package/docs/bn/intlayer_with_vite+lit.md +75 -3
  207. package/docs/bn/intlayer_with_vite+vanilla.md +16 -3
  208. package/docs/bn/introduction.md +0 -1
  209. package/docs/cs/intlayer_with_vite+lit.md +75 -3
  210. package/docs/cs/intlayer_with_vite+vanilla.md +16 -3
  211. package/docs/cs/introduction.md +0 -1
  212. package/docs/de/benchmark/nextjs.md +13 -13
  213. package/docs/de/benchmark/solid.md +5 -5
  214. package/docs/de/benchmark/svelte.md +4 -4
  215. package/docs/de/benchmark/tanstack.md +14 -13
  216. package/docs/de/benchmark/vue.md +5 -5
  217. package/docs/de/chrome_extension.md +130 -0
  218. package/docs/de/cli/index.md +6 -1
  219. package/docs/de/cli/infra.md +162 -0
  220. package/docs/de/cli/init.md +24 -1
  221. package/docs/de/dictionary/html.md +173 -5
  222. package/docs/de/dictionary/markdown.md +263 -1
  223. package/docs/de/intlayer_with_analog.md +23 -1
  224. package/docs/de/intlayer_with_angular_19.md +24 -1
  225. package/docs/de/intlayer_with_angular_21.md +24 -1
  226. package/docs/de/intlayer_with_astro.md +35 -25
  227. package/docs/de/intlayer_with_astro_lit.md +47 -27
  228. package/docs/de/intlayer_with_astro_preact.md +48 -27
  229. package/docs/de/intlayer_with_astro_react.md +48 -27
  230. package/docs/de/intlayer_with_astro_solid.md +48 -27
  231. package/docs/de/intlayer_with_astro_svelte.md +47 -27
  232. package/docs/de/intlayer_with_astro_vue.md +47 -27
  233. package/docs/de/intlayer_with_react_router_v7.md +12 -1
  234. package/docs/de/intlayer_with_remix_3.md +22 -1
  235. package/docs/de/intlayer_with_solid_start.md +14 -7
  236. package/docs/de/intlayer_with_svelte_kit.md +12 -1
  237. package/docs/de/intlayer_with_tanstack+solid.md +13 -2
  238. package/docs/de/intlayer_with_tanstack.md +13 -6
  239. package/docs/de/intlayer_with_vite+lit.md +75 -3
  240. package/docs/de/intlayer_with_vite+preact.md +16 -3
  241. package/docs/de/intlayer_with_vite+react.md +16 -3
  242. package/docs/de/intlayer_with_vite+solid.md +16 -3
  243. package/docs/de/intlayer_with_vite+svelte.md +16 -3
  244. package/docs/de/intlayer_with_vite+vanilla.md +16 -3
  245. package/docs/de/intlayer_with_vite+vue.md +16 -3
  246. package/docs/de/introduction.md +0 -1
  247. package/docs/de/readme.md +0 -1
  248. package/docs/de/releases/v8.md +1 -5
  249. package/docs/de/self_hosting.md +404 -227
  250. package/docs/en/benchmark/nextjs.md +13 -13
  251. package/docs/en/benchmark/solid.md +5 -5
  252. package/docs/en/benchmark/svelte.md +4 -4
  253. package/docs/en/benchmark/tanstack.md +14 -13
  254. package/docs/en/benchmark/vue.md +5 -5
  255. package/docs/en/chrome_extension.md +130 -0
  256. package/docs/en/cli/index.md +6 -1
  257. package/docs/en/cli/infra.md +175 -0
  258. package/docs/en/cli/init.md +25 -1
  259. package/docs/en/dictionary/html.md +173 -5
  260. package/docs/en/dictionary/markdown.md +263 -1
  261. package/docs/en/intlayer_with_analog.md +23 -1
  262. package/docs/en/intlayer_with_angular_19.md +24 -1
  263. package/docs/en/intlayer_with_angular_21.md +24 -1
  264. package/docs/en/intlayer_with_astro.md +29 -21
  265. package/docs/en/intlayer_with_astro_lit.md +46 -26
  266. package/docs/en/intlayer_with_astro_preact.md +47 -26
  267. package/docs/en/intlayer_with_astro_react.md +47 -26
  268. package/docs/en/intlayer_with_astro_solid.md +47 -26
  269. package/docs/en/intlayer_with_astro_svelte.md +46 -26
  270. package/docs/en/intlayer_with_astro_vue.md +46 -26
  271. package/docs/en/intlayer_with_react_router_v7.md +12 -1
  272. package/docs/en/intlayer_with_remix_3.md +22 -1
  273. package/docs/en/intlayer_with_solid_start.md +14 -7
  274. package/docs/en/intlayer_with_svelte_kit.md +12 -1
  275. package/docs/en/intlayer_with_tanstack+solid.md +13 -2
  276. package/docs/en/intlayer_with_tanstack.md +12 -5
  277. package/docs/en/intlayer_with_vite+lit.md +75 -3
  278. package/docs/en/intlayer_with_vite+preact.md +16 -3
  279. package/docs/en/intlayer_with_vite+react.md +16 -3
  280. package/docs/en/intlayer_with_vite+solid.md +16 -3
  281. package/docs/en/intlayer_with_vite+svelte.md +16 -3
  282. package/docs/en/intlayer_with_vite+vanilla.md +16 -3
  283. package/docs/en/intlayer_with_vite+vue.md +16 -3
  284. package/docs/en/introduction.md +0 -1
  285. package/docs/en/readme.md +0 -1
  286. package/docs/en/releases/v8.md +1 -5
  287. package/docs/en/self_hosting.md +418 -176
  288. package/docs/en-GB/benchmark/nextjs.md +13 -13
  289. package/docs/en-GB/benchmark/solid.md +5 -5
  290. package/docs/en-GB/benchmark/svelte.md +4 -4
  291. package/docs/en-GB/benchmark/tanstack.md +14 -13
  292. package/docs/en-GB/benchmark/vue.md +5 -5
  293. package/docs/en-GB/chrome_extension.md +130 -0
  294. package/docs/en-GB/cli/index.md +6 -1
  295. package/docs/en-GB/cli/infra.md +162 -0
  296. package/docs/en-GB/cli/init.md +24 -1
  297. package/docs/en-GB/dictionary/html.md +173 -5
  298. package/docs/en-GB/dictionary/markdown.md +263 -1
  299. package/docs/en-GB/intlayer_with_analog.md +23 -1
  300. package/docs/en-GB/intlayer_with_angular_19.md +24 -1
  301. package/docs/en-GB/intlayer_with_angular_21.md +24 -1
  302. package/docs/en-GB/intlayer_with_astro.md +35 -25
  303. package/docs/en-GB/intlayer_with_astro_lit.md +47 -27
  304. package/docs/en-GB/intlayer_with_astro_preact.md +48 -27
  305. package/docs/en-GB/intlayer_with_astro_react.md +48 -27
  306. package/docs/en-GB/intlayer_with_astro_solid.md +48 -27
  307. package/docs/en-GB/intlayer_with_astro_svelte.md +47 -27
  308. package/docs/en-GB/intlayer_with_astro_vue.md +47 -27
  309. package/docs/en-GB/intlayer_with_react_router_v7.md +12 -1
  310. package/docs/en-GB/intlayer_with_remix_3.md +22 -1
  311. package/docs/en-GB/intlayer_with_solid_start.md +14 -7
  312. package/docs/en-GB/intlayer_with_svelte_kit.md +12 -1
  313. package/docs/en-GB/intlayer_with_tanstack+solid.md +13 -2
  314. package/docs/en-GB/intlayer_with_tanstack.md +13 -6
  315. package/docs/en-GB/intlayer_with_vite+lit.md +75 -3
  316. package/docs/en-GB/intlayer_with_vite+preact.md +16 -3
  317. package/docs/en-GB/intlayer_with_vite+react.md +16 -3
  318. package/docs/en-GB/intlayer_with_vite+solid.md +25 -15
  319. package/docs/en-GB/intlayer_with_vite+svelte.md +16 -3
  320. package/docs/en-GB/intlayer_with_vite+vanilla.md +16 -3
  321. package/docs/en-GB/intlayer_with_vite+vue.md +16 -3
  322. package/docs/en-GB/introduction.md +0 -1
  323. package/docs/en-GB/readme.md +0 -1
  324. package/docs/en-GB/releases/v8.md +1 -5
  325. package/docs/en-GB/self_hosting.md +381 -206
  326. package/docs/es/benchmark/nextjs.md +13 -13
  327. package/docs/es/benchmark/solid.md +5 -5
  328. package/docs/es/benchmark/svelte.md +4 -4
  329. package/docs/es/benchmark/tanstack.md +14 -13
  330. package/docs/es/benchmark/vue.md +5 -5
  331. package/docs/es/chrome_extension.md +130 -0
  332. package/docs/es/cli/index.md +6 -1
  333. package/docs/es/cli/infra.md +162 -0
  334. package/docs/es/cli/init.md +24 -1
  335. package/docs/es/dictionary/html.md +173 -5
  336. package/docs/es/dictionary/markdown.md +263 -1
  337. package/docs/es/intlayer_with_analog.md +23 -1
  338. package/docs/es/intlayer_with_angular_19.md +24 -1
  339. package/docs/es/intlayer_with_angular_21.md +24 -1
  340. package/docs/es/intlayer_with_astro.md +35 -25
  341. package/docs/es/intlayer_with_astro_lit.md +47 -27
  342. package/docs/es/intlayer_with_astro_preact.md +48 -27
  343. package/docs/es/intlayer_with_astro_react.md +48 -27
  344. package/docs/es/intlayer_with_astro_solid.md +48 -27
  345. package/docs/es/intlayer_with_astro_svelte.md +47 -27
  346. package/docs/es/intlayer_with_astro_vue.md +47 -27
  347. package/docs/es/intlayer_with_react_router_v7.md +12 -1
  348. package/docs/es/intlayer_with_remix_3.md +22 -1
  349. package/docs/es/intlayer_with_solid_start.md +14 -7
  350. package/docs/es/intlayer_with_svelte_kit.md +12 -1
  351. package/docs/es/intlayer_with_tanstack+solid.md +13 -2
  352. package/docs/es/intlayer_with_tanstack.md +13 -6
  353. package/docs/es/intlayer_with_vite+lit.md +75 -3
  354. package/docs/es/intlayer_with_vite+preact.md +16 -3
  355. package/docs/es/intlayer_with_vite+react.md +16 -3
  356. package/docs/es/intlayer_with_vite+solid.md +16 -3
  357. package/docs/es/intlayer_with_vite+svelte.md +16 -3
  358. package/docs/es/intlayer_with_vite+vanilla.md +16 -3
  359. package/docs/es/intlayer_with_vite+vue.md +16 -3
  360. package/docs/es/introduction.md +0 -1
  361. package/docs/es/readme.md +0 -1
  362. package/docs/es/releases/v8.md +1 -5
  363. package/docs/es/self_hosting.md +400 -223
  364. package/docs/fr/benchmark/nextjs.md +13 -13
  365. package/docs/fr/benchmark/solid.md +5 -5
  366. package/docs/fr/benchmark/svelte.md +4 -4
  367. package/docs/fr/benchmark/tanstack.md +14 -13
  368. package/docs/fr/benchmark/vue.md +5 -5
  369. package/docs/fr/chrome_extension.md +130 -0
  370. package/docs/fr/cli/index.md +6 -1
  371. package/docs/fr/cli/infra.md +162 -0
  372. package/docs/fr/cli/init.md +24 -1
  373. package/docs/fr/dictionary/html.md +173 -5
  374. package/docs/fr/dictionary/markdown.md +265 -4
  375. package/docs/fr/intlayer_with_analog.md +23 -1
  376. package/docs/fr/intlayer_with_angular_19.md +24 -1
  377. package/docs/fr/intlayer_with_angular_21.md +24 -1
  378. package/docs/fr/intlayer_with_astro.md +36 -26
  379. package/docs/fr/intlayer_with_astro_lit.md +48 -28
  380. package/docs/fr/intlayer_with_astro_preact.md +49 -28
  381. package/docs/fr/intlayer_with_astro_react.md +49 -28
  382. package/docs/fr/intlayer_with_astro_solid.md +49 -28
  383. package/docs/fr/intlayer_with_astro_svelte.md +48 -28
  384. package/docs/fr/intlayer_with_astro_vue.md +48 -28
  385. package/docs/fr/intlayer_with_react_router_v7.md +15 -4
  386. package/docs/fr/intlayer_with_remix_3.md +22 -1
  387. package/docs/fr/intlayer_with_solid_start.md +14 -7
  388. package/docs/fr/intlayer_with_svelte_kit.md +15 -4
  389. package/docs/fr/intlayer_with_tanstack+solid.md +15 -4
  390. package/docs/fr/intlayer_with_tanstack.md +13 -6
  391. package/docs/fr/intlayer_with_vite+lit.md +75 -3
  392. package/docs/fr/intlayer_with_vite+preact.md +19 -6
  393. package/docs/fr/intlayer_with_vite+react.md +19 -6
  394. package/docs/fr/intlayer_with_vite+solid.md +19 -6
  395. package/docs/fr/intlayer_with_vite+svelte.md +19 -6
  396. package/docs/fr/intlayer_with_vite+vanilla.md +19 -6
  397. package/docs/fr/intlayer_with_vite+vue.md +19 -6
  398. package/docs/fr/introduction.md +0 -1
  399. package/docs/fr/readme.md +0 -1
  400. package/docs/fr/releases/v8.md +1 -5
  401. package/docs/fr/self_hosting.md +401 -224
  402. package/docs/hi/benchmark/nextjs.md +13 -13
  403. package/docs/hi/benchmark/solid.md +5 -5
  404. package/docs/hi/benchmark/svelte.md +4 -4
  405. package/docs/hi/benchmark/tanstack.md +14 -13
  406. package/docs/hi/benchmark/vue.md +5 -5
  407. package/docs/hi/chrome_extension.md +130 -0
  408. package/docs/hi/cli/index.md +6 -1
  409. package/docs/hi/cli/infra.md +162 -0
  410. package/docs/hi/cli/init.md +24 -1
  411. package/docs/hi/dictionary/html.md +173 -5
  412. package/docs/hi/dictionary/markdown.md +263 -1
  413. package/docs/hi/intlayer_with_analog.md +23 -1
  414. package/docs/hi/intlayer_with_angular_19.md +24 -1
  415. package/docs/hi/intlayer_with_angular_21.md +24 -1
  416. package/docs/hi/intlayer_with_astro.md +38 -31
  417. package/docs/hi/intlayer_with_astro_lit.md +50 -33
  418. package/docs/hi/intlayer_with_astro_preact.md +51 -33
  419. package/docs/hi/intlayer_with_astro_react.md +51 -33
  420. package/docs/hi/intlayer_with_astro_solid.md +51 -33
  421. package/docs/hi/intlayer_with_astro_svelte.md +50 -33
  422. package/docs/hi/intlayer_with_astro_vue.md +50 -33
  423. package/docs/hi/intlayer_with_react_router_v7.md +20 -12
  424. package/docs/hi/intlayer_with_remix_3.md +22 -1
  425. package/docs/hi/intlayer_with_solid_start.md +14 -7
  426. package/docs/hi/intlayer_with_svelte_kit.md +20 -12
  427. package/docs/hi/intlayer_with_tanstack+solid.md +13 -2
  428. package/docs/hi/intlayer_with_tanstack.md +21 -17
  429. package/docs/hi/intlayer_with_vite+lit.md +75 -3
  430. package/docs/hi/intlayer_with_vite+preact.md +24 -14
  431. package/docs/hi/intlayer_with_vite+react.md +24 -14
  432. package/docs/hi/intlayer_with_vite+solid.md +24 -14
  433. package/docs/hi/intlayer_with_vite+svelte.md +24 -14
  434. package/docs/hi/intlayer_with_vite+vanilla.md +16 -3
  435. package/docs/hi/intlayer_with_vite+vue.md +24 -14
  436. package/docs/hi/introduction.md +0 -1
  437. package/docs/hi/readme.md +0 -1
  438. package/docs/hi/releases/v8.md +1 -5
  439. package/docs/hi/self_hosting.md +409 -235
  440. package/docs/id/benchmark/nextjs.md +13 -13
  441. package/docs/id/benchmark/solid.md +5 -5
  442. package/docs/id/benchmark/svelte.md +4 -4
  443. package/docs/id/benchmark/tanstack.md +14 -13
  444. package/docs/id/benchmark/vue.md +5 -5
  445. package/docs/id/chrome_extension.md +130 -0
  446. package/docs/id/cli/index.md +6 -1
  447. package/docs/id/cli/infra.md +162 -0
  448. package/docs/id/cli/init.md +24 -1
  449. package/docs/id/dictionary/html.md +173 -5
  450. package/docs/id/dictionary/markdown.md +263 -1
  451. package/docs/id/intlayer_with_analog.md +23 -1
  452. package/docs/id/intlayer_with_angular_19.md +24 -1
  453. package/docs/id/intlayer_with_angular_21.md +24 -1
  454. package/docs/id/intlayer_with_astro.md +35 -25
  455. package/docs/id/intlayer_with_astro_lit.md +47 -27
  456. package/docs/id/intlayer_with_astro_preact.md +48 -27
  457. package/docs/id/intlayer_with_astro_react.md +48 -27
  458. package/docs/id/intlayer_with_astro_solid.md +48 -27
  459. package/docs/id/intlayer_with_astro_svelte.md +47 -27
  460. package/docs/id/intlayer_with_astro_vue.md +47 -27
  461. package/docs/id/intlayer_with_react_router_v7.md +12 -1
  462. package/docs/id/intlayer_with_remix_3.md +22 -1
  463. package/docs/id/intlayer_with_solid_start.md +14 -7
  464. package/docs/id/intlayer_with_svelte_kit.md +12 -1
  465. package/docs/id/intlayer_with_tanstack+solid.md +13 -2
  466. package/docs/id/intlayer_with_tanstack.md +13 -6
  467. package/docs/id/intlayer_with_vite+lit.md +75 -3
  468. package/docs/id/intlayer_with_vite+preact.md +16 -3
  469. package/docs/id/intlayer_with_vite+react.md +16 -3
  470. package/docs/id/intlayer_with_vite+solid.md +16 -3
  471. package/docs/id/intlayer_with_vite+svelte.md +16 -3
  472. package/docs/id/intlayer_with_vite+vanilla.md +16 -3
  473. package/docs/id/intlayer_with_vite+vue.md +16 -3
  474. package/docs/id/introduction.md +0 -1
  475. package/docs/id/readme.md +0 -1
  476. package/docs/id/releases/v8.md +1 -5
  477. package/docs/id/self_hosting.md +416 -243
  478. package/docs/it/benchmark/nextjs.md +13 -13
  479. package/docs/it/benchmark/solid.md +5 -5
  480. package/docs/it/benchmark/svelte.md +4 -4
  481. package/docs/it/benchmark/tanstack.md +14 -13
  482. package/docs/it/benchmark/vue.md +5 -5
  483. package/docs/it/chrome_extension.md +130 -0
  484. package/docs/it/cli/index.md +6 -1
  485. package/docs/it/cli/infra.md +162 -0
  486. package/docs/it/cli/init.md +24 -1
  487. package/docs/it/dictionary/html.md +173 -5
  488. package/docs/it/dictionary/markdown.md +263 -1
  489. package/docs/it/intlayer_with_analog.md +23 -1
  490. package/docs/it/intlayer_with_angular_19.md +24 -1
  491. package/docs/it/intlayer_with_angular_21.md +24 -1
  492. package/docs/it/intlayer_with_astro.md +35 -25
  493. package/docs/it/intlayer_with_astro_lit.md +47 -27
  494. package/docs/it/intlayer_with_astro_preact.md +48 -27
  495. package/docs/it/intlayer_with_astro_react.md +48 -27
  496. package/docs/it/intlayer_with_astro_solid.md +48 -27
  497. package/docs/it/intlayer_with_astro_svelte.md +47 -27
  498. package/docs/it/intlayer_with_astro_vue.md +47 -27
  499. package/docs/it/intlayer_with_react_router_v7.md +12 -1
  500. package/docs/it/intlayer_with_remix_3.md +22 -1
  501. package/docs/it/intlayer_with_solid_start.md +14 -7
  502. package/docs/it/intlayer_with_svelte_kit.md +12 -1
  503. package/docs/it/intlayer_with_tanstack+solid.md +13 -2
  504. package/docs/it/intlayer_with_tanstack.md +13 -6
  505. package/docs/it/intlayer_with_vite+lit.md +75 -3
  506. package/docs/it/intlayer_with_vite+preact.md +16 -3
  507. package/docs/it/intlayer_with_vite+react.md +16 -3
  508. package/docs/it/intlayer_with_vite+solid.md +16 -3
  509. package/docs/it/intlayer_with_vite+svelte.md +16 -3
  510. package/docs/it/intlayer_with_vite+vanilla.md +16 -3
  511. package/docs/it/intlayer_with_vite+vue.md +16 -3
  512. package/docs/it/introduction.md +0 -1
  513. package/docs/it/readme.md +0 -1
  514. package/docs/it/releases/v8.md +1 -5
  515. package/docs/it/self_hosting.md +412 -237
  516. package/docs/ja/benchmark/nextjs.md +13 -13
  517. package/docs/ja/benchmark/solid.md +5 -5
  518. package/docs/ja/benchmark/svelte.md +4 -4
  519. package/docs/ja/benchmark/tanstack.md +13 -12
  520. package/docs/ja/benchmark/vue.md +5 -5
  521. package/docs/ja/chrome_extension.md +130 -0
  522. package/docs/ja/cli/index.md +6 -1
  523. package/docs/ja/cli/infra.md +162 -0
  524. package/docs/ja/cli/init.md +24 -1
  525. package/docs/ja/dictionary/html.md +173 -5
  526. package/docs/ja/dictionary/markdown.md +263 -1
  527. package/docs/ja/intlayer_with_analog.md +23 -1
  528. package/docs/ja/intlayer_with_angular_19.md +24 -1
  529. package/docs/ja/intlayer_with_angular_21.md +24 -1
  530. package/docs/ja/intlayer_with_astro.md +35 -25
  531. package/docs/ja/intlayer_with_astro_lit.md +47 -27
  532. package/docs/ja/intlayer_with_astro_preact.md +48 -27
  533. package/docs/ja/intlayer_with_astro_react.md +48 -27
  534. package/docs/ja/intlayer_with_astro_solid.md +48 -27
  535. package/docs/ja/intlayer_with_astro_svelte.md +47 -27
  536. package/docs/ja/intlayer_with_astro_vue.md +47 -27
  537. package/docs/ja/intlayer_with_react_router_v7.md +12 -1
  538. package/docs/ja/intlayer_with_remix_3.md +22 -1
  539. package/docs/ja/intlayer_with_solid_start.md +14 -7
  540. package/docs/ja/intlayer_with_svelte_kit.md +21 -15
  541. package/docs/ja/intlayer_with_tanstack+solid.md +13 -2
  542. package/docs/ja/intlayer_with_tanstack.md +13 -6
  543. package/docs/ja/intlayer_with_vite+lit.md +75 -3
  544. package/docs/ja/intlayer_with_vite+preact.md +16 -3
  545. package/docs/ja/intlayer_with_vite+react.md +16 -3
  546. package/docs/ja/intlayer_with_vite+solid.md +16 -3
  547. package/docs/ja/intlayer_with_vite+svelte.md +16 -3
  548. package/docs/ja/intlayer_with_vite+vanilla.md +16 -3
  549. package/docs/ja/intlayer_with_vite+vue.md +16 -3
  550. package/docs/ja/introduction.md +0 -1
  551. package/docs/ja/readme.md +0 -1
  552. package/docs/ja/releases/v8.md +1 -5
  553. package/docs/ja/self_hosting.md +398 -223
  554. package/docs/ko/benchmark/nextjs.md +13 -13
  555. package/docs/ko/benchmark/solid.md +5 -5
  556. package/docs/ko/benchmark/svelte.md +4 -4
  557. package/docs/ko/benchmark/tanstack.md +14 -13
  558. package/docs/ko/benchmark/vue.md +5 -5
  559. package/docs/ko/chrome_extension.md +130 -0
  560. package/docs/ko/cli/index.md +6 -1
  561. package/docs/ko/cli/infra.md +162 -0
  562. package/docs/ko/cli/init.md +24 -1
  563. package/docs/ko/dictionary/html.md +173 -5
  564. package/docs/ko/dictionary/markdown.md +263 -1
  565. package/docs/ko/intlayer_with_analog.md +23 -1
  566. package/docs/ko/intlayer_with_angular_19.md +24 -1
  567. package/docs/ko/intlayer_with_angular_21.md +24 -1
  568. package/docs/ko/intlayer_with_astro.md +29 -21
  569. package/docs/ko/intlayer_with_astro_lit.md +47 -27
  570. package/docs/ko/intlayer_with_astro_preact.md +48 -27
  571. package/docs/ko/intlayer_with_astro_react.md +48 -27
  572. package/docs/ko/intlayer_with_astro_solid.md +48 -27
  573. package/docs/ko/intlayer_with_astro_svelte.md +47 -27
  574. package/docs/ko/intlayer_with_astro_vue.md +47 -27
  575. package/docs/ko/intlayer_with_react_router_v7.md +12 -1
  576. package/docs/ko/intlayer_with_remix_3.md +22 -1
  577. package/docs/ko/intlayer_with_solid_start.md +14 -7
  578. package/docs/ko/intlayer_with_svelte_kit.md +12 -1
  579. package/docs/ko/intlayer_with_tanstack+solid.md +13 -2
  580. package/docs/ko/intlayer_with_tanstack.md +13 -6
  581. package/docs/ko/intlayer_with_vite+lit.md +75 -3
  582. package/docs/ko/intlayer_with_vite+preact.md +16 -3
  583. package/docs/ko/intlayer_with_vite+react.md +16 -3
  584. package/docs/ko/intlayer_with_vite+solid.md +26 -16
  585. package/docs/ko/intlayer_with_vite+svelte.md +16 -3
  586. package/docs/ko/intlayer_with_vite+vanilla.md +16 -3
  587. package/docs/ko/intlayer_with_vite+vue.md +16 -3
  588. package/docs/ko/introduction.md +0 -1
  589. package/docs/ko/readme.md +0 -1
  590. package/docs/ko/releases/v8.md +1 -5
  591. package/docs/ko/self_hosting.md +411 -238
  592. package/docs/nl/intlayer_with_vite+lit.md +75 -3
  593. package/docs/nl/intlayer_with_vite+vanilla.md +16 -3
  594. package/docs/nl/introduction.md +0 -1
  595. package/docs/pl/benchmark/nextjs.md +13 -13
  596. package/docs/pl/benchmark/solid.md +5 -5
  597. package/docs/pl/benchmark/svelte.md +4 -4
  598. package/docs/pl/benchmark/tanstack.md +14 -13
  599. package/docs/pl/benchmark/vue.md +5 -5
  600. package/docs/pl/chrome_extension.md +130 -0
  601. package/docs/pl/cli/index.md +6 -1
  602. package/docs/pl/cli/infra.md +162 -0
  603. package/docs/pl/cli/init.md +24 -1
  604. package/docs/pl/dictionary/html.md +173 -5
  605. package/docs/pl/dictionary/markdown.md +263 -1
  606. package/docs/pl/intlayer_with_analog.md +23 -1
  607. package/docs/pl/intlayer_with_angular_19.md +24 -1
  608. package/docs/pl/intlayer_with_angular_21.md +24 -1
  609. package/docs/pl/intlayer_with_astro.md +29 -21
  610. package/docs/pl/intlayer_with_astro_lit.md +47 -27
  611. package/docs/pl/intlayer_with_astro_preact.md +48 -27
  612. package/docs/pl/intlayer_with_astro_react.md +48 -27
  613. package/docs/pl/intlayer_with_astro_solid.md +48 -27
  614. package/docs/pl/intlayer_with_astro_svelte.md +47 -27
  615. package/docs/pl/intlayer_with_astro_vue.md +47 -27
  616. package/docs/pl/intlayer_with_react_router_v7.md +12 -1
  617. package/docs/pl/intlayer_with_remix_3.md +22 -1
  618. package/docs/pl/intlayer_with_solid_start.md +14 -7
  619. package/docs/pl/intlayer_with_svelte_kit.md +12 -1
  620. package/docs/pl/intlayer_with_tanstack+solid.md +13 -2
  621. package/docs/pl/intlayer_with_tanstack.md +13 -6
  622. package/docs/pl/intlayer_with_vite+lit.md +75 -3
  623. package/docs/pl/intlayer_with_vite+preact.md +16 -3
  624. package/docs/pl/intlayer_with_vite+react.md +16 -3
  625. package/docs/pl/intlayer_with_vite+solid.md +16 -3
  626. package/docs/pl/intlayer_with_vite+svelte.md +16 -3
  627. package/docs/pl/intlayer_with_vite+vanilla.md +16 -3
  628. package/docs/pl/intlayer_with_vite+vue.md +16 -3
  629. package/docs/pl/introduction.md +0 -1
  630. package/docs/pl/readme.md +0 -1
  631. package/docs/pl/releases/v8.md +1 -5
  632. package/docs/pl/self_hosting.md +408 -233
  633. package/docs/pt/benchmark/nextjs.md +13 -13
  634. package/docs/pt/benchmark/solid.md +5 -5
  635. package/docs/pt/benchmark/svelte.md +4 -4
  636. package/docs/pt/benchmark/tanstack.md +14 -13
  637. package/docs/pt/benchmark/vue.md +5 -5
  638. package/docs/pt/chrome_extension.md +130 -0
  639. package/docs/pt/cli/index.md +6 -1
  640. package/docs/pt/cli/infra.md +162 -0
  641. package/docs/pt/cli/init.md +24 -1
  642. package/docs/pt/dictionary/html.md +173 -5
  643. package/docs/pt/dictionary/markdown.md +263 -1
  644. package/docs/pt/intlayer_with_analog.md +23 -1
  645. package/docs/pt/intlayer_with_angular_19.md +24 -1
  646. package/docs/pt/intlayer_with_angular_21.md +24 -1
  647. package/docs/pt/intlayer_with_astro.md +29 -21
  648. package/docs/pt/intlayer_with_astro_lit.md +47 -27
  649. package/docs/pt/intlayer_with_astro_preact.md +48 -27
  650. package/docs/pt/intlayer_with_astro_react.md +48 -27
  651. package/docs/pt/intlayer_with_astro_solid.md +48 -27
  652. package/docs/pt/intlayer_with_astro_svelte.md +47 -27
  653. package/docs/pt/intlayer_with_astro_vue.md +47 -27
  654. package/docs/pt/intlayer_with_react_router_v7.md +12 -1
  655. package/docs/pt/intlayer_with_remix_3.md +22 -1
  656. package/docs/pt/intlayer_with_solid_start.md +14 -7
  657. package/docs/pt/intlayer_with_svelte_kit.md +12 -1
  658. package/docs/pt/intlayer_with_tanstack+solid.md +13 -2
  659. package/docs/pt/intlayer_with_tanstack.md +13 -6
  660. package/docs/pt/intlayer_with_vite+lit.md +75 -3
  661. package/docs/pt/intlayer_with_vite+preact.md +16 -3
  662. package/docs/pt/intlayer_with_vite+react.md +16 -3
  663. package/docs/pt/intlayer_with_vite+solid.md +16 -3
  664. package/docs/pt/intlayer_with_vite+svelte.md +16 -3
  665. package/docs/pt/intlayer_with_vite+vanilla.md +16 -3
  666. package/docs/pt/intlayer_with_vite+vue.md +16 -3
  667. package/docs/pt/introduction.md +0 -1
  668. package/docs/pt/readme.md +0 -1
  669. package/docs/pt/releases/v8.md +1 -5
  670. package/docs/pt/self_hosting.md +399 -224
  671. package/docs/ru/benchmark/nextjs.md +13 -13
  672. package/docs/ru/benchmark/solid.md +5 -5
  673. package/docs/ru/benchmark/svelte.md +4 -4
  674. package/docs/ru/benchmark/tanstack.md +14 -13
  675. package/docs/ru/benchmark/vue.md +5 -5
  676. package/docs/ru/chrome_extension.md +130 -0
  677. package/docs/ru/cli/index.md +6 -1
  678. package/docs/ru/cli/infra.md +162 -0
  679. package/docs/ru/cli/init.md +24 -1
  680. package/docs/ru/dictionary/html.md +173 -5
  681. package/docs/ru/dictionary/markdown.md +263 -1
  682. package/docs/ru/intlayer_with_analog.md +23 -1
  683. package/docs/ru/intlayer_with_angular_19.md +24 -1
  684. package/docs/ru/intlayer_with_angular_21.md +24 -1
  685. package/docs/ru/intlayer_with_astro.md +35 -25
  686. package/docs/ru/intlayer_with_astro_lit.md +47 -27
  687. package/docs/ru/intlayer_with_astro_preact.md +48 -27
  688. package/docs/ru/intlayer_with_astro_react.md +48 -27
  689. package/docs/ru/intlayer_with_astro_solid.md +48 -27
  690. package/docs/ru/intlayer_with_astro_svelte.md +47 -27
  691. package/docs/ru/intlayer_with_astro_vue.md +47 -27
  692. package/docs/ru/intlayer_with_react_router_v7.md +12 -1
  693. package/docs/ru/intlayer_with_remix_3.md +22 -1
  694. package/docs/ru/intlayer_with_solid_start.md +14 -7
  695. package/docs/ru/intlayer_with_svelte_kit.md +12 -1
  696. package/docs/ru/intlayer_with_tanstack+solid.md +13 -2
  697. package/docs/ru/intlayer_with_tanstack.md +13 -6
  698. package/docs/ru/intlayer_with_vite+lit.md +75 -3
  699. package/docs/ru/intlayer_with_vite+preact.md +16 -3
  700. package/docs/ru/intlayer_with_vite+react.md +16 -3
  701. package/docs/ru/intlayer_with_vite+solid.md +16 -3
  702. package/docs/ru/intlayer_with_vite+svelte.md +16 -3
  703. package/docs/ru/intlayer_with_vite+vanilla.md +16 -3
  704. package/docs/ru/intlayer_with_vite+vue.md +16 -3
  705. package/docs/ru/introduction.md +0 -1
  706. package/docs/ru/readme.md +0 -1
  707. package/docs/ru/releases/v8.md +1 -5
  708. package/docs/ru/self_hosting.md +403 -228
  709. package/docs/tr/benchmark/nextjs.md +13 -13
  710. package/docs/tr/benchmark/solid.md +5 -5
  711. package/docs/tr/benchmark/svelte.md +4 -4
  712. package/docs/tr/benchmark/tanstack.md +14 -13
  713. package/docs/tr/benchmark/vue.md +5 -5
  714. package/docs/tr/chrome_extension.md +130 -0
  715. package/docs/tr/cli/index.md +6 -1
  716. package/docs/tr/cli/infra.md +162 -0
  717. package/docs/tr/cli/init.md +24 -1
  718. package/docs/tr/dictionary/html.md +173 -5
  719. package/docs/tr/dictionary/markdown.md +263 -1
  720. package/docs/tr/intlayer_with_analog.md +23 -1
  721. package/docs/tr/intlayer_with_angular_19.md +24 -1
  722. package/docs/tr/intlayer_with_angular_21.md +24 -1
  723. package/docs/tr/intlayer_with_astro.md +35 -25
  724. package/docs/tr/intlayer_with_astro_lit.md +48 -28
  725. package/docs/tr/intlayer_with_astro_preact.md +49 -28
  726. package/docs/tr/intlayer_with_astro_react.md +49 -28
  727. package/docs/tr/intlayer_with_astro_solid.md +49 -28
  728. package/docs/tr/intlayer_with_astro_svelte.md +48 -28
  729. package/docs/tr/intlayer_with_astro_vue.md +48 -28
  730. package/docs/tr/intlayer_with_react_router_v7.md +12 -1
  731. package/docs/tr/intlayer_with_remix_3.md +22 -1
  732. package/docs/tr/intlayer_with_solid_start.md +14 -7
  733. package/docs/tr/intlayer_with_svelte_kit.md +12 -1
  734. package/docs/tr/intlayer_with_tanstack+solid.md +13 -2
  735. package/docs/tr/intlayer_with_tanstack.md +13 -6
  736. package/docs/tr/intlayer_with_vite+lit.md +75 -3
  737. package/docs/tr/intlayer_with_vite+preact.md +16 -3
  738. package/docs/tr/intlayer_with_vite+react.md +16 -3
  739. package/docs/tr/intlayer_with_vite+solid.md +16 -3
  740. package/docs/tr/intlayer_with_vite+svelte.md +16 -3
  741. package/docs/tr/intlayer_with_vite+vanilla.md +16 -3
  742. package/docs/tr/intlayer_with_vite+vue.md +16 -3
  743. package/docs/tr/introduction.md +0 -1
  744. package/docs/tr/readme.md +0 -1
  745. package/docs/tr/releases/v8.md +1 -5
  746. package/docs/tr/self_hosting.md +410 -234
  747. package/docs/uk/benchmark/nextjs.md +13 -13
  748. package/docs/uk/benchmark/solid.md +5 -5
  749. package/docs/uk/benchmark/svelte.md +4 -4
  750. package/docs/uk/benchmark/tanstack.md +14 -13
  751. package/docs/uk/benchmark/vue.md +5 -5
  752. package/docs/uk/chrome_extension.md +130 -0
  753. package/docs/uk/cli/index.md +6 -1
  754. package/docs/uk/cli/infra.md +162 -0
  755. package/docs/uk/cli/init.md +24 -1
  756. package/docs/uk/dictionary/html.md +173 -5
  757. package/docs/uk/dictionary/markdown.md +263 -1
  758. package/docs/uk/intlayer_with_analog.md +23 -1
  759. package/docs/uk/intlayer_with_angular_19.md +24 -1
  760. package/docs/uk/intlayer_with_angular_21.md +24 -1
  761. package/docs/uk/intlayer_with_astro.md +35 -25
  762. package/docs/uk/intlayer_with_astro_lit.md +47 -27
  763. package/docs/uk/intlayer_with_astro_preact.md +48 -27
  764. package/docs/uk/intlayer_with_astro_react.md +48 -27
  765. package/docs/uk/intlayer_with_astro_solid.md +48 -27
  766. package/docs/uk/intlayer_with_astro_svelte.md +47 -27
  767. package/docs/uk/intlayer_with_astro_vue.md +47 -27
  768. package/docs/uk/intlayer_with_react_router_v7.md +12 -1
  769. package/docs/uk/intlayer_with_remix_3.md +22 -1
  770. package/docs/uk/intlayer_with_solid_start.md +14 -7
  771. package/docs/uk/intlayer_with_svelte_kit.md +12 -1
  772. package/docs/uk/intlayer_with_tanstack+solid.md +13 -2
  773. package/docs/uk/intlayer_with_tanstack.md +13 -6
  774. package/docs/uk/intlayer_with_vite+lit.md +75 -3
  775. package/docs/uk/intlayer_with_vite+preact.md +16 -3
  776. package/docs/uk/intlayer_with_vite+react.md +16 -3
  777. package/docs/uk/intlayer_with_vite+solid.md +16 -3
  778. package/docs/uk/intlayer_with_vite+svelte.md +16 -3
  779. package/docs/uk/intlayer_with_vite+vanilla.md +16 -3
  780. package/docs/uk/intlayer_with_vite+vue.md +16 -3
  781. package/docs/uk/introduction.md +0 -1
  782. package/docs/uk/readme.md +0 -1
  783. package/docs/uk/releases/v8.md +1 -5
  784. package/docs/uk/self_hosting.md +413 -238
  785. package/docs/ur/intlayer_with_vite+lit.md +75 -3
  786. package/docs/ur/intlayer_with_vite+vanilla.md +16 -3
  787. package/docs/ur/introduction.md +0 -1
  788. package/docs/vi/benchmark/nextjs.md +13 -13
  789. package/docs/vi/benchmark/solid.md +5 -5
  790. package/docs/vi/benchmark/svelte.md +4 -4
  791. package/docs/vi/benchmark/tanstack.md +14 -13
  792. package/docs/vi/benchmark/vue.md +5 -5
  793. package/docs/vi/chrome_extension.md +130 -0
  794. package/docs/vi/cli/index.md +6 -1
  795. package/docs/vi/cli/infra.md +162 -0
  796. package/docs/vi/cli/init.md +24 -1
  797. package/docs/vi/dictionary/html.md +173 -5
  798. package/docs/vi/dictionary/markdown.md +263 -1
  799. package/docs/vi/intlayer_with_analog.md +23 -1
  800. package/docs/vi/intlayer_with_angular_19.md +24 -1
  801. package/docs/vi/intlayer_with_angular_21.md +24 -1
  802. package/docs/vi/intlayer_with_astro.md +35 -25
  803. package/docs/vi/intlayer_with_astro_lit.md +47 -27
  804. package/docs/vi/intlayer_with_astro_preact.md +48 -27
  805. package/docs/vi/intlayer_with_astro_react.md +48 -27
  806. package/docs/vi/intlayer_with_astro_solid.md +48 -27
  807. package/docs/vi/intlayer_with_astro_svelte.md +47 -27
  808. package/docs/vi/intlayer_with_astro_vue.md +47 -27
  809. package/docs/vi/intlayer_with_react_router_v7.md +12 -1
  810. package/docs/vi/intlayer_with_remix_3.md +22 -1
  811. package/docs/vi/intlayer_with_solid_start.md +14 -7
  812. package/docs/vi/intlayer_with_svelte_kit.md +12 -1
  813. package/docs/vi/intlayer_with_tanstack+solid.md +13 -2
  814. package/docs/vi/intlayer_with_tanstack.md +13 -6
  815. package/docs/vi/intlayer_with_vite+lit.md +75 -3
  816. package/docs/vi/intlayer_with_vite+preact.md +16 -3
  817. package/docs/vi/intlayer_with_vite+react.md +16 -3
  818. package/docs/vi/intlayer_with_vite+solid.md +16 -3
  819. package/docs/vi/intlayer_with_vite+svelte.md +16 -3
  820. package/docs/vi/intlayer_with_vite+vanilla.md +16 -3
  821. package/docs/vi/intlayer_with_vite+vue.md +16 -3
  822. package/docs/vi/introduction.md +0 -1
  823. package/docs/vi/readme.md +0 -1
  824. package/docs/vi/releases/v8.md +1 -5
  825. package/docs/vi/self_hosting.md +408 -234
  826. package/docs/zh/benchmark/nextjs.md +13 -13
  827. package/docs/zh/benchmark/solid.md +5 -5
  828. package/docs/zh/benchmark/svelte.md +4 -4
  829. package/docs/zh/benchmark/tanstack.md +14 -13
  830. package/docs/zh/benchmark/vue.md +5 -5
  831. package/docs/zh/chrome_extension.md +130 -0
  832. package/docs/zh/cli/index.md +6 -1
  833. package/docs/zh/cli/infra.md +162 -0
  834. package/docs/zh/cli/init.md +24 -1
  835. package/docs/zh/dictionary/html.md +172 -5
  836. package/docs/zh/dictionary/markdown.md +262 -1
  837. package/docs/zh/intlayer_with_analog.md +23 -1
  838. package/docs/zh/intlayer_with_angular_19.md +24 -1
  839. package/docs/zh/intlayer_with_angular_21.md +24 -1
  840. package/docs/zh/intlayer_with_astro.md +29 -21
  841. package/docs/zh/intlayer_with_astro_lit.md +47 -27
  842. package/docs/zh/intlayer_with_astro_preact.md +48 -27
  843. package/docs/zh/intlayer_with_astro_react.md +48 -27
  844. package/docs/zh/intlayer_with_astro_solid.md +48 -27
  845. package/docs/zh/intlayer_with_astro_svelte.md +47 -27
  846. package/docs/zh/intlayer_with_astro_vue.md +47 -27
  847. package/docs/zh/intlayer_with_react_router_v7.md +12 -1
  848. package/docs/zh/intlayer_with_remix_3.md +22 -1
  849. package/docs/zh/intlayer_with_solid_start.md +14 -7
  850. package/docs/zh/intlayer_with_svelte_kit.md +12 -1
  851. package/docs/zh/intlayer_with_tanstack+solid.md +13 -2
  852. package/docs/zh/intlayer_with_tanstack.md +13 -6
  853. package/docs/zh/intlayer_with_vite+lit.md +75 -3
  854. package/docs/zh/intlayer_with_vite+preact.md +16 -3
  855. package/docs/zh/intlayer_with_vite+react.md +16 -3
  856. package/docs/zh/intlayer_with_vite+solid.md +16 -3
  857. package/docs/zh/intlayer_with_vite+svelte.md +16 -3
  858. package/docs/zh/intlayer_with_vite+vanilla.md +16 -3
  859. package/docs/zh/intlayer_with_vite+vue.md +16 -3
  860. package/docs/zh/introduction.md +0 -1
  861. package/docs/zh/readme.md +0 -1
  862. package/docs/zh/releases/v8.md +1 -5
  863. package/docs/zh/self_hosting.md +410 -237
  864. package/docs/zh-TW/introduction.md +0 -1
  865. package/legal/ar/privacy_notice.md +9 -3
  866. package/legal/de/privacy_notice.md +9 -3
  867. package/legal/en/privacy_notice.md +10 -3
  868. package/legal/en-GB/privacy_notice.md +9 -3
  869. package/legal/es/privacy_notice.md +9 -3
  870. package/legal/fr/privacy_notice.md +9 -3
  871. package/legal/hi/privacy_notice.md +9 -3
  872. package/legal/id/privacy_notice.md +9 -3
  873. package/legal/it/privacy_notice.md +9 -3
  874. package/legal/ja/privacy_notice.md +9 -3
  875. package/legal/ko/privacy_notice.md +9 -3
  876. package/legal/pl/privacy_notice.md +9 -3
  877. package/legal/pt/privacy_notice.md +9 -3
  878. package/legal/ru/privacy_notice.md +9 -3
  879. package/legal/tr/privacy_notice.md +9 -3
  880. package/legal/uk/privacy_notice.md +9 -3
  881. package/legal/vi/privacy_notice.md +9 -3
  882. package/legal/zh/privacy_notice.md +9 -3
  883. package/package.json +6 -6
  884. package/src/generated/docs.entry.ts +40 -40
  885. package/docs/ar/intlayer_with_astro_vanilla.md +0 -709
  886. package/docs/ar/roadmap.md +0 -321
  887. package/docs/de/intlayer_with_astro_vanilla.md +0 -705
  888. package/docs/de/roadmap.md +0 -322
  889. package/docs/en/intlayer_with_astro_vanilla.md +0 -706
  890. package/docs/en/roadmap.md +0 -325
  891. package/docs/en-GB/intlayer_with_astro_vanilla.md +0 -709
  892. package/docs/en-GB/roadmap.md +0 -322
  893. package/docs/es/intlayer_with_astro_vanilla.md +0 -701
  894. package/docs/es/roadmap.md +0 -322
  895. package/docs/fr/intlayer_with_astro_vanilla.md +0 -701
  896. package/docs/fr/roadmap.md +0 -322
  897. package/docs/hi/intlayer_with_astro_vanilla.md +0 -720
  898. package/docs/hi/roadmap.md +0 -322
  899. package/docs/id/intlayer_with_astro_vanilla.md +0 -705
  900. package/docs/id/roadmap.md +0 -325
  901. package/docs/it/intlayer_with_astro_vanilla.md +0 -705
  902. package/docs/it/roadmap.md +0 -322
  903. package/docs/ja/intlayer_with_astro_vanilla.md +0 -708
  904. package/docs/ja/roadmap.md +0 -322
  905. package/docs/ko/intlayer_with_astro_vanilla.md +0 -720
  906. package/docs/ko/roadmap.md +0 -322
  907. package/docs/pl/intlayer_with_astro_vanilla.md +0 -705
  908. package/docs/pl/roadmap.md +0 -325
  909. package/docs/pt/intlayer_with_astro_vanilla.md +0 -705
  910. package/docs/pt/roadmap.md +0 -322
  911. package/docs/ru/intlayer_with_astro_vanilla.md +0 -716
  912. package/docs/ru/roadmap.md +0 -322
  913. package/docs/tr/intlayer_with_astro_vanilla.md +0 -705
  914. package/docs/tr/roadmap.md +0 -325
  915. package/docs/uk/intlayer_with_astro_vanilla.md +0 -705
  916. package/docs/uk/roadmap.md +0 -325
  917. package/docs/vi/intlayer_with_astro_vanilla.md +0 -705
  918. package/docs/vi/roadmap.md +0 -325
  919. package/docs/zh/intlayer_with_astro_vanilla.md +0 -704
  920. package/docs/zh/roadmap.md +0 -322
@@ -1,12 +1,13 @@
1
1
  ---
2
2
  createdAt: 2026-06-30
3
- updatedAt: 2026-06-30
4
- title: 自托管 Intlayer
5
- description: 通过一条命令在您自己的基础设施上运行完整的 Intlayer 实例。无需 Intlayer Cloud 账户。
3
+ updatedAt: 2026-09-21
4
+ title: 自行托管 Intlayer
5
+ description: "在您自己的基础设施上运行 Intlayer:作为桌面应用、单个多合一 Docker 容器或可扩展的 Docker Compose 堆栈。无需 Intlayer Cloud 账户。"
6
6
  keywords:
7
- - 自托管
7
+ - 自行托管
8
8
  - Docker
9
9
  - Docker Compose
10
+ - 桌面应用
10
11
  - Intlayer
11
12
  - CMS
12
13
  - 安装
@@ -17,218 +18,457 @@ slugs:
17
18
  author: aymericzip
18
19
  ---
19
20
 
20
- # 自托管 Intlayer
21
+ # 自行托管 Intlayer
21
22
 
22
- Intlayer 可以在您自己的基础设施上运行。无需 Intlayer Cloud 账户。单个一体化 Docker 镜像捆绑了仪表板、API 和它所需的本地数据存储(Redis 和 MinIO),由 [s6-overlay](https://github.com/just-containers/s6-overlay) 监管。
23
+ Intlayer 可以完全运行在您自己的基础设施上,无需 Intlayer Cloud 账户。由同一个安装程序(`install.sh`、Windows 上为 `install.ps1` 或 `npx intlayer init infra`)驱动三种设置:
23
24
 
24
- Intlayer 可以完全在您自己的基础设施上运行——无需 Intlayer Cloud 账户。只需一条命令即可启动一个生产就绪的堆栈:
25
+ | Setup | What it is | Pick it for |
26
+ | ------------------ | ----------------------------------------------------------- | ------------------------------ |
27
+ | **桌面应用** | 适用于 macOS、Linux 和 Windows 的原生控制面板 | 本地客户端,无需托管任何内容 |
28
+ | **多合一 Docker** | 控制面板、API、MongoDB、Redis 和 MinIO 集成在**单个容器**中 | 试验和小规模单机安装 |
29
+ | **Docker Compose** | **每个服务一个容器**,每个数据存储都可替换为托管云服务 | 生产环境、横向扩展、托管数据库 |
30
+
31
+ ## Table of Contents
32
+
33
+ <TOC/>
34
+
35
+ ## 已发布的镜像和安装包
36
+
37
+ | Artifact | Docker Hub | GHCR mirror | Contents |
38
+ | -------------------- | ------------------------------------------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------- |
39
+ | All-in-one container | [`intlayer/cms-all`](https://hub.docker.com/r/intlayer/cms-all) | `ghcr.io/aymericzip/intlayer/cms-all` | app + backend + MongoDB 8 + Redis + MinIO + Chromium |
40
+ | Dashboard (frontend) | [`intlayer/cms-frontend`](https://hub.docker.com/r/intlayer/cms-frontend) | `ghcr.io/aymericzip/intlayer/cms-frontend` | TanStack Start dashboard on Bun |
41
+ | API (backend) | [`intlayer/cms-backend`](https://hub.docker.com/r/intlayer/cms-backend) | `ghcr.io/aymericzip/intlayer/cms-backend` | Fastify REST API on Bun + Chromium |
42
+ | Desktop app | [GitHub releases](https://github.com/aymericzip/intlayer/releases/latest) | n/a | `.dmg` (macOS), `.deb` / `.rpm` / `.AppImage` (Linux), `.exe` / `.msi` (Windows) |
43
+
44
+ 这三个镜像均基于同一个 [`docker/selfhost/Dockerfile`](https://github.com/aymericzip/intlayer/tree/main/docker/selfhost) 构建,并在每次发布时更新。Compose 堆栈还会拉取官方的 `mongo:8`、`redis:8-alpine` 和 `quay.io/minio/minio` 镜像。
45
+
46
+ ## 安装与设置
47
+
48
+ 安装程序会询问您需要的安装模式,检查前提条件(提供安装 Docker 的选项),写入包含已生成密钥的环境变量文件,并拉取所需镜像。它不会自动启动任何容器:Docker 模式首先需要配置邮件服务,因此它最后会输出待执行的启动命令。重新运行它是完全安全的:现有的环境配置文件绝不会被覆盖,这也使其成为便捷的升级路径。
49
+
50
+ <Tabs group="mode">
51
+ <Tab label="桌面应用" value="desktop">
52
+
53
+ 基于 Tauri 构建的原生应用程序形式的 Intlayer 控制面板。它直接连接至 Intlayer Cloud (`https://app.intlayer.org`),因此无需在本地托管后端服务。当您想要一个本地客户端而非浏览器标签页时,这是理想的选择。
54
+
55
+ ### 安装
56
+
57
+ 安装程序会自动下载适用于您的操作系统和 CPU 的安装包,然后打开它(macOS)、进行安装(Linux 上的 `dpkg` / `rpm`)或启动安装向导(Windows)。您也可以从[发布页面](https://github.com/aymericzip/intlayer/releases/latest)手动下载。
58
+
59
+ <Tabs group="os">
60
+ <Tab label="macOS / Linux" value="unix">
25
61
 
26
62
  ```sh
27
- curl -fsSL https://intlayer.org/install.sh | sh
63
+ curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode desktop
28
64
  ```
29
65
 
30
- 安装程序会下载 `docker-compose.yml` 和 `.env` 文件,自动生成所需的密钥,并使用 `docker compose up -d` 启动所有容器。
66
+ </Tab>
67
+ <Tab label="Windows" value="windows">
31
68
 
32
- 唯一的外部依赖是 **MongoDB**:后端连接到你提供的 MongoDB **Atlas** 集群。其他一切都在容器内运行。
69
+ In PowerShell:
33
70
 
34
- ## 目录
71
+ ```powershell
72
+ $env:INTLAYER_MODE = "desktop"; irm https://intlayer.org/install.ps1 | iex
73
+ ```
35
74
 
36
- <TOC/>
75
+ </Tab>
76
+ <Tab label="Intlayer CLI" value="cli">
77
+
78
+ ```bash
79
+ npx intlayer init infra --mode desktop
80
+ ```
81
+
82
+ </Tab>
83
+ </Tabs>
84
+
85
+ ### 环境要求
37
86
 
38
- ## 架构
87
+ - **Node.js**:该应用内置了控制面板的前端服务器,并使用系统本地的 `node` 二进制文件启动它。如果应用无法启动,请从 [nodejs.org](https://nodejs.org) 安装。
88
+
89
+ > 官方发布的桌面版默认连接 Intlayer Cloud 后端。若要将其指向自行托管的后端,需要使用配置为您自身 API 地址的 `VITE_BACKEND_URL` 重新编译该应用,详情请参阅[限制条件](#limitations)。
90
+
91
+ </Tab>
92
+ <Tab label="多合一 Docker" value="docker">
93
+
94
+ 所有组件都运行在单个 `intlayer/cms-all` 容器中,由 [s6-overlay](https://github.com/just-containers/s6-overlay) 统一监控管理,所有数据持久化保存在同一个 Docker 卷中。
39
95
 
40
96
  ```
41
97
  ┌─────────────────────────────┐
42
98
  browser ──────▶ │ app (TanStack Start) :3000│ ──┐
43
- └─────────────────────────────┘ │ VITE_BACKEND_URL
99
+ (localhost) └─────────────────────────────┘ │ VITE_BACKEND_URL (baked at build)
44
100
  ┌─────────────────────────────┐ │
45
101
  │ backend (Fastify/Bun) :3100│ ◀─┘
46
102
  └──────────────┬──────────────┘
47
- ┌──────────┬─────────┼──────────┬───────────┐
48
- ▼ ▼ ▼ ▼ ▼
49
- mongo:27017 redis:6379 minio:9000 mailpit:1025 Chromium
50
- (1-node RS) (S3 API) (SMTP) (in-image)
51
- minio:9001 mailpit:8025
52
- (console) (web UI)
103
+ ┌──────────┬─────────┼──────────────┐
104
+ ▼ ▼ ▼ ▼
105
+ mongo:27017 redis:6379 minio:9000 Chromium
106
+ /data/mongo /data/redis /data/minio (in-image)
107
+ (1-node RS) minio:9001
53
108
  ```
54
109
 
55
- Chromium(用于 Puppeteer 屏幕截图生成)捆绑在后端镜像中——无需单独的容器。
110
+ | 服务 | 主机端口 | 用途 |
111
+ | ----------- | ---------------------------- | ---------------------------------- |
112
+ | **app** | `3000` | 控制面板(CMS 界面) |
113
+ | **backend** | `3100` | REST API(`/health` 健康检查接口) |
114
+ | **mongo** | 仅内部访问 | MongoDB 8 单节点副本集 `rs0` |
115
+ | **redis** | 仅内部访问 | 任务队列(BullMQ)与缓存 |
116
+ | **minio** | `9000` (S3), `9001` (控制台) | 兼容 S3 的对象存储,用于头像和截图 |
56
117
 
57
- ## 先决条件
118
+ 启动顺序由 s6 依赖项严格保证(`mongod` → 副本集初始化,`minio` → 存储桶创建,然后是 `backend`,最后是 `app`),且长期运行的服务在退出时会自动重启,因此初次启动时能够自动恢复。
58
119
 
59
- - **Docker** ≥ 24 和 **Docker Compose** ≥ v2。如果其中任何一个缺失,安装程序将打印安装链接并退出。
60
- - 主机上端口 `3000`、`3100`、`8025`、`9000` 和 `9001` 可用。
61
- - Linux 或 macOS 主机(或 Windows 上的 WSL2)。
120
+ ### 前提条件
62
121
 
63
- 其他所有内容 — Bun、Redis、MinIO、Chromium — 都包含在镜像中。
122
+ - **Docker** ≥ 24:安装程序可自动协助安装(在 Linux 上通过 [get.docker.com](https://get.docker.com),在 macOS 上通过 Homebrew)。在 Windows 上,请先安装 [Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/)(启用 WSL 2 后端)。
123
+ - 主机上的 `3000`、`3100`、`9000` 和 `9001` 端口处于可用未占用状态。MinIO 的 `9000` 端口必须对浏览器开放,因为上传的静态资源将直接从 `S3_PUBLIC_URL` 加载。
124
+ - 邮件发送服务:[Resend](https://resend.com) API 密钥或 SMTP 中继服务。
64
125
 
65
- ## 快速开始
126
+ ### 1. 执行安装
66
127
 
67
- ### 1. 运行安装程序
128
+ 在当前目录写入包含自动生成的 `BETTER_AUTH_SECRET` 和 `S3_SECRET_ACCESS_KEY` 的 `./intlayer.env`,并拉取 `intlayer/cms-all:latest` 镜像。
129
+
130
+ <Tabs group="os">
131
+ <Tab label="macOS / Linux" value="unix">
68
132
 
69
133
  ```sh
70
- curl -fsSL https://intlayer.org/install.sh | sh
134
+ curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode docker
71
135
  ```
72
136
 
73
- 它验证 Docker 是否已安装且正在运行,将 `./intlayer.env` 写入已生成的 `BETTER_AUTH_SECRET` 和 `S3_SECRET_ACCESS_KEY`,并拉取镜像。它不启动容器 — 后端无法在没有数据库凭证的情况下启动。
137
+ </Tab>
138
+ <Tab label="Windows" value="windows">
139
+
140
+ In PowerShell:
141
+
142
+ ```powershell
143
+ $env:INTLAYER_MODE = "docker"; irm https://intlayer.org/install.ps1 | iex
144
+ ```
145
+
146
+ </Tab>
147
+ <Tab label="Intlayer CLI" value="cli">
148
+
149
+ CLI 会调用安装程序并打印其他标签页中所示的 `docker run …` 命令。配置好邮件发送服务后,将其粘贴到终端中运行即可。
74
150
 
75
- 重新运行安装程序是安全的:现有的 `intlayer.env` 永远不会被覆盖,因此它也可以作为升级路径。
151
+ </Tab>
152
+ </Tabs>
76
153
 
77
- ### 2. 填入你的凭证
154
+ ### 2. 配置邮件服务
78
155
 
79
- 打开 `intlayer.env` 并完成标记为 `TODO` 的值:
156
+ 打开 `intlayer.env` 并配置 Resend **或** SMTP(详情参见[全局邮件服务](#global-mailer)):
80
157
 
81
158
  ```sh fileName="intlayer.env"
82
- DB_ID=<atlas-user>
83
- DB_MDP=<atlas-password>
84
- DB_CLUSTER=<cluster>.xxxxx.mongodb.net
159
+ # Option A: Resend
85
160
  RESEND_API_KEY=<your-resend-key>
86
- ```
87
-
88
- 该文件还包含了可选功能的注释块 — [SMTP mailer](#global-mailer)、`OPENAI_API_KEY` 和 OAuth 提供商。取消注释你需要的内容。
89
161
 
90
- > 该文件由 `docker run --env-file` 读取,它不会去除引号,并将 `=` 之后的所有内容视为值。写入裸值,并将注释放在单独的行上。
162
+ # Option B: SMTP (takes over from Resend as soon as MAIL_SMTP_HOST is set)
163
+ MAIL_SMTP_HOST=smtp.example.com
164
+ MAIL_SMTP_PORT=587
165
+ MAIL_SMTP_USER=<user>
166
+ MAIL_SMTP_PASSWORD=<password>
167
+ MAIL_FROM=Intlayer <no-reply@example.com>
168
+ ```
91
169
 
92
170
  ### 3. 启动容器
93
171
 
94
- 这是安装程序完成时打印的命令:
172
+ 这是安装程序输出的启动命令:
173
+
174
+ <Tabs group="os">
175
+ <Tab label="macOS / Linux" value="unix">
95
176
 
96
177
  ```sh
97
178
  docker run -d --name intlayer \
98
179
  --restart unless-stopped \
99
- -p 3000:3000 \
100
- -p 3100:3100 \
101
- -p 9000:9000 \
102
- -p 9001:9001 \
180
+ -p 3000:3000 -p 3100:3100 -p 9000:9000 -p 9001:9001 \
103
181
  -v intlayer-data:/data \
104
182
  --env-file ./intlayer.env \
105
- ghcr.io/aymericzip/intlayer-selfhost:latest
183
+ intlayer/cms-all:latest
184
+ ```
185
+
186
+ </Tab>
187
+ <Tab label="Windows" value="windows">
188
+
189
+ ```powershell
190
+ docker run -d --name intlayer `
191
+ --restart unless-stopped `
192
+ -p 3000:3000 -p 3100:3100 -p 9000:9000 -p 9001:9001 `
193
+ -v intlayer-data:/data `
194
+ --env-file ./intlayer.env `
195
+ intlayer/cms-all:latest
196
+ ```
197
+
198
+ </Tab>
199
+ <Tab label="Intlayer CLI" value="cli">
200
+
201
+ CLI 会调用安装程序并打印其他标签页中所示的 `docker run …` 命令。配置好邮件发送服务后,将其粘贴到终端中运行即可。
202
+
203
+ </Tab>
204
+ </Tabs>
205
+
206
+ 打开 **http://localhost:3000** 并按照[首次运行设置](#first-run-setup)进行操作。初次启动需要初始化数据库副本集和存储桶,请稍候约一分钟。
207
+
208
+ ### 备份与升级
209
+
210
+ 所有持久化数据均保存在 `intlayer-data` 数据卷中(`/data/mongo`、`/data/redis`、`/data/minio`)。
211
+
212
+ ```sh
213
+ # Backup (stop the container first so MongoDB's files are consistent)
214
+ docker stop intlayer
215
+ docker run --rm -v intlayer-data:/data -v "$(pwd)":/backup busybox tar czf /backup/intlayer-data.tar.gz /data
216
+ docker start intlayer
217
+
218
+ # Restore
219
+ docker run --rm -v intlayer-data:/data -v "$(pwd)":/backup busybox tar xzf /backup/intlayer-data.tar.gz -C /
220
+ ```
221
+
222
+ 如需升级,只需重新运行安装程序(它会拉取最新镜像并保留原有的 `intlayer.env`),然后执行 `docker rm -f intlayer` 并再次运行启动命令。若要使用外部托管的 MongoDB 而非内置数据库,请在 `intlayer.env` 中设置 `MONGODB_URI`。
223
+
224
+ </Tab>
225
+ <Tab label="Docker Compose" value="compose">
226
+
227
+ 在独立的 Compose 私有网络中每个服务运行一个容器。控制面板和 API 分别使用公开发布的 `intlayer/cms-frontend` 和 `intlayer/cms-backend` 镜像;数据存储采用官方的 `mongo`、`redis` 和 `minio` 镜像。
228
+
229
+ ```
230
+ ┌───────────────────┐
231
+ browser ──────▶ │ app :3000 │ ── SSR ──▶ http://backend:3100
232
+ (localhost) └───────────────────┘
233
+ ┌───────────────────┐
234
+ browser ──────▶ │ backend :3100 │
235
+ (localhost) └─────────┬─────────┘
236
+ ┌───────────────┼───────────────┐
237
+ ▼ ▼ ▼
238
+ mongo:27017 redis:6379 minio:9000 ◀── browser (assets)
239
+ (1-node RS) minio:9001
240
+ ```
241
+
242
+ | 服务 | 镜像 | 职责 |
243
+ | ------------ | ----------------------- | -------------------------------------------------------------------------- |
244
+ | `app` | `intlayer/cms-frontend` | 运行在 `:3000` 的控制面板;等待后端健康检查就绪 |
245
+ | `backend` | `intlayer/cms-backend` | 包含 Chromium 运行在 `:3100` 的 API;等待 Mongo、Redis 和 MinIO 存储桶就绪 |
246
+ | `mongo` | `mongo:8` | 单节点副本集 `rs0`,通过自身的健康检查脚本自动初始化 |
247
+ | `redis` | `redis:8-alpine` | 队列与缓存,采用 append-only 持久化策略 |
248
+ | `minio` | `quay.io/minio/minio` | 运行在 `:9000` 的 S3 存储与运行在 `:9001` 的控制台 |
249
+ | `minio-init` | `quay.io/minio/mc` | 单次运行任务:自动创建存储桶并配置匿名只读下载策略 |
250
+
251
+ 数据持久保存在 `intlayer_mongo-data`、`intlayer_redis-data` 和 `intlayer_minio-data` 卷中。服务之间的连接设置(`MONGODB_URI`、`REDIS_URL`、`S3_ENDPOINT` 以及服务端渲染所用的内部后端 URL)已在 compose 文件中固定,其优先级高于 `.env` 文件(`.env` 仅用于传递敏感密钥和可选集成配置)。
252
+
253
+ ### 前提条件
254
+
255
+ - **Docker** ≥ 24 并安装 Compose 插件:在 Linux 和 macOS 上安装程序可协助自动安装。在 Windows 上,请先安装 [Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/)(WSL 2 后端)。
256
+ - 主机上的 `3000`、`3100`、`9000` 和 `9001` 端口可用。
257
+ - 邮件发送服务:[Resend](https://resend.com) API 密钥或 SMTP 中继服务。
258
+
259
+ ### 1. 执行安装
260
+
261
+ 在 `./intlayer/` 目录中写入 `docker-compose.yml` 和包含自动生成密钥的 `.env`,并拉取所需的镜像。
262
+
263
+ <Tabs group="os">
264
+ <Tab label="macOS / Linux" value="unix">
265
+
266
+ ```sh
267
+ curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode compose
268
+ ```
269
+
270
+ Or by hand:
271
+
272
+ ```sh
273
+ mkdir intlayer && cd intlayer
274
+ curl -fsSLO https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/docker-compose.yml
275
+ curl -fsSL https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/.env.template -o .env
276
+ # fill in BETTER_AUTH_SECRET and S3_SECRET_ACCESS_KEY (openssl rand -hex 32)
277
+ ```
278
+
279
+ </Tab>
280
+ <Tab label="Windows" value="windows">
281
+
282
+ In PowerShell:
283
+
284
+ ```powershell
285
+ $env:INTLAYER_MODE = "compose"; irm https://intlayer.org/install.ps1 | iex
286
+ ```
287
+
288
+ Or by hand:
289
+
290
+ ```powershell
291
+ mkdir intlayer; cd intlayer
292
+ irm https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/docker-compose.yml -OutFile docker-compose.yml
293
+ irm https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/.env.template -OutFile .env
294
+ # fill in BETTER_AUTH_SECRET and S3_SECRET_ACCESS_KEY
295
+ ```
296
+
297
+ </Tab>
298
+ <Tab label="Intlayer CLI" value="cli">
299
+
300
+ ```bash
301
+ npx intlayer init infra --mode compose
106
302
  ```
107
303
 
108
- 然后打开 **http://localhost:3000**。首次启动会初始化数据存储,请等待一分钟。
304
+ </Tab>
305
+ </Tabs>
109
306
 
110
- > 仪表板在 `localhost` 上提供。请参阅[限制](#limitations) — 已发布的镜像不支持自定义域名。
307
+ ### 2. 配置邮件服务
111
308
 
112
- ### 安装程序设置
309
+ 在 `intlayer/.env` 中填入 Resend **或** SMTP 配置,配置方式与多合一容器完全相同(参见[全局邮件服务](#global-mailer))。
113
310
 
114
- 安装程序读取几个环境变量。由于它被管道传输到 `sh`,请将它们传递给 shell 而不是 `curl`:
311
+ ### 3. 启动堆栈
115
312
 
116
313
  ```sh
117
- curl -fsSL https://intlayer.org/install.sh | INTLAYER_ENV_FILE=./config/intlayer.env sh
314
+ cd intlayer && docker compose up -d
315
+ ```
316
+
317
+ 打开 **http://localhost:3000** 并按照[首次运行设置](#first-run-setup)进行操作。
318
+
319
+ ### 使用外部托管数据库
320
+
321
+ 从 compose 文件中删除要替换的服务(以及 `backend` 中对它的 `depends_on` 依赖项),然后覆盖对应的环境变量:
322
+
323
+ ```yaml fileName="docker-compose.yml"
324
+ services:
325
+ backend:
326
+ environment:
327
+ MONGODB_URI: mongodb+srv://user:password@cluster0.xxxxx.mongodb.net/intlayer
328
+ REDIS_URL: rediss://default:password@redis.example.com:6380
329
+ S3_ENDPOINT: https://s3.eu-west-1.amazonaws.com
330
+ S3_PUBLIC_URL: https://intlayer-assets.s3.eu-west-1.amazonaws.com
118
331
  ```
119
332
 
120
- | 变量 | 默认值 | 描述 |
121
- | ------------------------- | --------------------------------------------- | ----------------------- |
122
- | `INTLAYER_IMAGE` | `ghcr.io/aymericzip/intlayer-selfhost:latest` | 要拉取的镜像 |
123
- | `INTLAYER_ENV_FILE` | `./intlayer.env` | 环境文件的写入位置 |
124
- | `INTLAYER_CONTAINER_NAME` | `intlayer` | 容器名称 |
125
- | `INTLAYER_DATA_VOLUME` | `intlayer-data` | 挂载在 `/data` 的命名卷 |
126
- | `INTLAYER_APP_PORT` | `3000` | 仪表板的主机端口 |
127
- | `INTLAYER_API_PORT` | `3100` | API 的主机端口 |
128
- | `INTLAYER_S3_PORT` | `9000` | MinIO S3 API 的主机端口 |
129
- | `INTLAYER_CONSOLE_PORT` | `9001` | MinIO 控制台的主机端口 |
130
-
131
- > 四个端口变量仅改变 `docker run` 命令中打印的映射的**主机**端,已发布的镜像在构建时将 `http://localhost:3000`、`http://localhost:3100` 和 `http://localhost:9000` 编译到仪表板包中,因此重新映射它们会导致浏览器指向旧端口。除非您正在构建自己的镜像,否则请保持默认值 — 参见[限制](#limitations)。
132
-
133
- ## 快速开始
134
-
135
- 安装程序执行以下操作:
136
-
137
- 1. 检查 `docker` 和 `docker compose` 是否存在。
138
- 2. 将 `docker-compose.yml` 和 `.env.example` 下载到 `./intlayer/` 目录中。
139
- 3. 如果不存在 `.env` 文件,则复制示例文件并使用 `openssl rand` 为 `BETTER_AUTH_SECRET`、`S3_ACCESS_KEY_ID` 和 `S3_SECRET_ACCESS_KEY` 生成随机密钥。
140
- 4. 运行 `docker compose pull` + `docker compose up -d`。
141
- 5. 打印 URL:仪表盘 `:3000`、API `:3100`、电子邮件 UI `:8025`、MinIO 控制台 `:9001`。
142
-
143
- 堆栈启动后,打开 **http://localhost:3000** 并创建您的第一个账户。
144
-
145
- ## 服务
146
-
147
- | 服务 | 镜像 | 主机端口 | 用途 |
148
- | ----------- | --------------------------------- | ------------------------------ | ---------------------------------- |
149
- | **app** | 从 `apps/app/Dockerfile` 构建 | `3000` | TanStack Start 仪表盘 (CMS UI) |
150
- | **backend** | 从 `apps/backend/Dockerfile` 构建 | `3100` | Fastify REST API (`/health` 端点) |
151
- | **mongo** | `mongo:7` | 内部 | 单节点副本集 (`rs0`) |
152
- | **redis** | `redis:7-alpine` | 内部 | 任务队列 (BullMQ) 和缓存 (ioredis) |
153
- | **minio** | `minio/minio` | `9000` (S3), `9001` (控制台) | 用于头像和截图的 S3 兼容对象存储 |
154
- | **mailpit** | `axllent/mailpit` | `1025` (SMTP), `8025` (Web UI) | 本地事务性电子邮件接收器 |
155
-
156
- > MinIO 端口 `9000` 必须可从浏览器访问,因为上传的资产(头像、截图)直接从 `S3_PUBLIC_URL=http://localhost:9000/intlayer` 加载。
157
-
158
- ## 环境变量
159
-
160
- ### 必需
161
-
162
- | Variable | Example | Description |
163
- | ---------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------- |
164
- | `DB_ID` | `intlayer` | MongoDB Atlas 用户 |
165
- | `DB_MDP` | _(your password)_ | MongoDB Atlas 密码 |
166
- | `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | MongoDB Atlas 集群主机(在 `mongodb+srv://` URI 中使用) |
167
- | `BETTER_AUTH_SECRET` | _(generated)_ | 用于会话签名的 32 字节密钥 |
168
- | `S3_SECRET_ACCESS_KEY` | _(generated)_ | 捆绑 MinIO 的密钥 |
169
- | `RESEND_API_KEY` | _(your key)_ | 通过 Resend 发送事务性邮件。除非你配置全局 SMTP 邮件器(见[全局邮件器](#global-mailer)),否则首次运行设置时为必需项 |
170
-
171
- ### 必需(自动生成或提示)
172
-
173
- | 变量 | 示例 | 描述 |
174
- | ---------------------- | ----------------------------------------------- | -------------------------------- |
175
- | `NODE_ENV` | `production` | 运行时环境 |
176
- | `PORT` | `3100` | 后端监听端口 |
177
- | `BACKEND_URL` | `http://localhost:3100` | 后端 API 的公共 URL |
178
- | `APP_URL` | `http://localhost:3000` | 仪表盘的公共 URL |
179
- | `DOMAIN` | `localhost` | Cookie 域 |
180
- | `MONGODB_URI` | `mongodb://mongo:27017/intlayer?replicaSet=rs0` | 完整的 MongoDB 连接 URI |
181
- | `REDIS_URL` | `redis://redis:6379` | Redis 连接 URL |
182
- | `BETTER_AUTH_SECRET` | _(已生成)_ | 用于会话签名的 32 字节密钥 |
183
- | `MAIL_PROVIDER` | `smtp` | 邮件传输方式:`smtp` 或 `resend` |
184
- | `MAIL_SMTP_HOST` | `mailpit` | SMTP 主机名 (Mailpit 容器名称) |
185
- | `MAIL_SMTP_PORT` | `1025` | SMTP 端口 |
186
- | `MAIL_FROM` | `Intlayer <no-reply@localhost>` | 发件人地址 |
187
- | `S3_ENDPOINT` | `http://minio:9000` | S3 兼容端点 |
188
- | `S3_PUBLIC_URL` | `http://localhost:9000/intlayer` | 用于浏览器资产加载的公共 URL |
189
- | `S3_BUCKET_NAME` | `intlayer` | 存储桶名称 |
190
- | `S3_ACCESS_KEY_ID` | _(已生成)_ | MinIO 访问密钥 |
191
- | `S3_SECRET_ACCESS_KEY` | _(已生成)_ | MinIO 秘密密钥 |
192
- | `VITE_BACKEND_URL` | `http://localhost:3100` | 构建时嵌入到仪表盘中的后端 URL |
193
- | `VITE_DOMAIN` | `localhost` | 构建时嵌入到仪表盘中的域 |
194
-
195
- ### 可选(缺少时功能会优雅降级)
196
-
197
- | 变量 | 功能 |
198
- | -------------------------------------------------------- | ------------------------------------------------------ |
199
- | `OPENAI_API_KEY` | AI 辅助翻译和内容审计 |
200
- | `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET`, `STRIPE_*` | 账单和订阅管理 |
201
- | `RESEND_API_KEY` | 通过 Resend 发送事务性电子邮件(设置后会覆盖 Mailpit) |
202
- | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | GitHub OAuth 登录 |
203
- | `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Google OAuth 登录 |
204
- | `GITLAB_CLIENT_ID`, `GITLAB_CLIENT_SECRET` | GitLab OAuth 登录 |
205
- | `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET` | Microsoft OAuth 登录 |
206
- | `LINKEDIN_CLIENT_ID`, `LINKEDIN_CLIENT_SECRET` | LinkedIn OAuth 登录 |
207
- | `ATLASSIAN_CLIENT_ID`, `ATLASSIAN_CLIENT_SECRET` | Atlassian OAuth 登录 |
333
+ `S3_ACCESS_KEY_ID` / `S3_SECRET_ACCESS_KEY` / `S3_BUCKET_NAME` 适用于任何兼容 S3 协议的对象存储服务商。
334
+
335
+ ### 集群横向扩展
336
+
337
+ `app` 和 `backend` 服务均为无状态设计(stateless)。在负载均衡器后,移除固定的主机端口映射,并配置反向代理直接按容器服务名称访问后,执行 `docker compose up -d --scale backend=3` 即可实现横向扩展。后台异步任务通过 Redis (BullMQ) 协调,多个后端副本可以安全地共享同一个任务队列。
338
+
339
+ ### 从源码编译构建
340
+
341
+ 在代码仓库的根目录下,可以使用 override 文件将两个 Intlayer 服务的镜像拉取模式 `image:` 切换为源码构建 `build:`:
342
+
343
+ ```sh
344
+ cd docker/selfhost
345
+ docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
346
+ ```
347
+
348
+ 为自定义域名生成专属镜像也是通过这种方式完成的:将 `VITE_*` 配置作为构建参数传入(参见[限制条件](#limitations))。
349
+
350
+ ### 备份与升级
351
+
352
+ ```sh
353
+ # Backup one volume (repeat for intlayer_redis-data and intlayer_minio-data)
354
+ docker compose stop
355
+ docker run --rm -v intlayer_mongo-data:/data -v "$(pwd)":/backup busybox tar czf /backup/mongo-data.tar.gz /data
356
+ docker compose start
357
+
358
+ # Upgrade, volumes are kept
359
+ docker compose pull && docker compose up -d
360
+ ```
361
+
362
+ </Tab>
363
+ </Tabs>
364
+
365
+ ### 安装程序高级选项
366
+
367
+ 如果不带 `--mode`(或 `INTLAYER_MODE`)运行,安装程序会弹出交互菜单:`desktop`、`docker`(多合一)或 `compose`。它还支持读取一系列环境变量。由于安装脚本是通过管道输入给 shell 执行的,请在 shell 运行命令前设置这些变量,而不是传给 `curl`:
368
+
369
+ ```sh
370
+ curl -fsSL https://intlayer.org/install.sh | INTLAYER_COMPOSE_DIR=./cms sh -s -- --mode compose
371
+ ```
372
+
373
+ ```powershell
374
+ $env:INTLAYER_MODE = "compose"; $env:INTLAYER_COMPOSE_DIR = ".\cms"; irm https://intlayer.org/install.ps1 | iex
375
+ ```
376
+
377
+ | Variable | Default | Applies to | Description |
378
+ | ------------------------- | ------------------------- | ---------- | ---------------------------------------------------------- |
379
+ | `INTLAYER_MODE` | _(asked)_ | all | `desktop`, `docker` or `compose`, same as `--mode` |
380
+ | `INTLAYER_DOWNLOAD_DIR` | `~/Downloads` | desktop | Where the app installer is saved |
381
+ | `INTLAYER_IMAGE` | `intlayer/cms-all:latest` | docker | All-in-one image to pull |
382
+ | `INTLAYER_ENV_FILE` | `./intlayer.env` | docker | Where to write the environment file |
383
+ | `INTLAYER_CONTAINER_NAME` | `intlayer` | docker | Container name |
384
+ | `INTLAYER_DATA_VOLUME` | `intlayer-data` | docker | Named volume mounted at `/data` |
385
+ | `INTLAYER_APP_PORT` | `3000` | docker | Host port for the dashboard |
386
+ | `INTLAYER_API_PORT` | `3100` | docker | Host port for the API |
387
+ | `INTLAYER_S3_PORT` | `9000` | docker | Host port for the MinIO S3 API |
388
+ | `INTLAYER_CONSOLE_PORT` | `9001` | docker | Host port for the MinIO console |
389
+ | `INTLAYER_COMPOSE_DIR` | `./intlayer` | compose | Where `docker-compose.yml` and `.env` are written |
390
+ | `INTLAYER_SELFHOST_REF` | `main` | both | Git ref the compose file and env template are fetched from |
391
+
392
+ > 端口变量仅影响宿主机 **host** 端的端口映射。由于官方发布的镜像已将 `http://localhost:3000`、`http://localhost:3100` 和 `http://localhost:9000` 预编译到了前端静态代码中,因此除非您自行重新构建镜像,否则请保持这些默认端口不变,详情请参阅[限制条件](#limitations)。
393
+
394
+ ## 首次运行设置
395
+
396
+ 在一个全新的实例中(数据库尚为空),首次在浏览器中打开控制面板会自动重定向至 **`/init`** 初始化页面:
397
+
398
+ 1. 注册首个管理员账户。由于用户数据集合为空,系统会自动将该账户提升为**超级管理员(super admin)**。
399
+ 2. 系统会通过 Resend 或配置的 SMTP 中继向您的邮箱发送验证邮件。邮箱验证是**强制要求**的,这也是为什么在启动容器之前必须配置好邮件服务。
400
+ 3. 点击邮件中的验证链接,然后登录系统。
401
+
402
+ 一旦超级管理员创建完成,再次访问 `/init` 将自动重定向至标准登录页面。
403
+
404
+ ## 环境变量参考
405
+
406
+ 两种 Docker 模式均读取相同的环境变量配置文件(容器模式为 `intlayer.env`,Compose 模式为 `.env`),该文件模板派生自 [`docker/selfhost/.env.template`](https://github.com/aymericzip/intlayer/blob/main/docker/selfhost/.env.template)。
407
+
408
+ ### 必填变量
409
+
410
+ | Variable | Example | Description |
411
+ | ---------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
412
+ | `BETTER_AUTH_SECRET` | _(generated)_ | 32-byte secret for session signing |
413
+ | `S3_SECRET_ACCESS_KEY` | _(generated)_ | Secret for the bundled MinIO |
414
+ | `RESEND_API_KEY` | _(your key)_ | Transactional email via Resend. Required for first-run setup unless an SMTP relay is configured instead (see [Global mailer](#global-mailer)) |
415
+
416
+ ### 部署环境固定变量
417
+
418
+ These are set by the image (all-in-one) or by the compose file, and only need overriding for a non-standard topology.
419
+
420
+ | Variable | All-in-one | Docker Compose | Description |
421
+ | ------------------ | --------------------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------- |
422
+ | `PORT` | `3100` | `3100` | Backend listening port |
423
+ | `APP_URL` | `http://localhost:3000` | `http://localhost:3000` | Public URL of the dashboard |
424
+ | `BACKEND_URL` | `http://localhost:3100` | `http://localhost:3100` | Public URL of the backend API |
425
+ | `DOMAIN` | `localhost` | `localhost` | Cookie domain |
426
+ | `SELF_HOSTED` | `true` | `true` | Disables the cloud-only API endpoints (billing, subscriptions, marketplace) |
427
+ | `MONGODB_URI` | `mongodb://127.0.0.1:27017/intlayer?replicaSet=rs0` | `mongodb://mongo:27017/…` | MongoDB connection string, any `mongodb://` or `mongodb+srv://` cluster works |
428
+ | `REDIS_URL` | `redis://127.0.0.1:6379` | `redis://redis:6379` | Redis |
429
+ | `S3_ENDPOINT` | `http://127.0.0.1:9000` | `http://minio:9000` | MinIO (server-to-server) |
430
+ | `S3_PUBLIC_URL` | `http://localhost:9000/intlayer` | `http://localhost:9000/intlayer` | Public URL for browser asset loading |
431
+ | `S3_BUCKET_NAME` | `intlayer` | `intlayer` | Bucket name |
432
+ | `S3_ACCESS_KEY_ID` | `intlayer` | `intlayer` | MinIO access key |
433
+
434
+ 在 Compose 模式下,`app` 服务还会额外注入 `INTLAYER_BACKEND_INTERNAL_URL=http://backend:3100`:浏览器在宿主机上通过 `localhost:3100` 访问 API,但前端的服务端渲染(SSR)在容器内网运行,必须通过服务名通信。
435
+
436
+ ### 可选变量(未配置时相关功能优雅降级)
437
+
438
+ | Variable | Feature |
439
+ | ------------------------------------------------ | ----------------------------------------- |
440
+ | `OPENAI_API_KEY` | AI-assisted translation and content audit |
441
+ | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | GitHub OAuth login |
442
+ | `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Google OAuth login |
443
+ | `GITLAB_CLIENT_ID`, `GITLAB_CLIENT_SECRET` | GitLab OAuth login |
444
+ | `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET` | Microsoft OAuth login |
208
445
 
209
446
  ### 全局邮件服务
210
447
 
211
- 默认情况下,所有事务性电子邮件都通过使用 `RESEND_API_KEY` 的 Resend 发送。自托管部署可以改为通过配置了环境变量的全局邮件服务路由**所有**电子邮件 — 包括非组织电子邮件,例如密码重置和魔法链接。
448
+ 所有事务性邮件,包括非组织级别的系统邮件(如重置密码、免密登录链接等),均通过以下两种全局传输方式之一发送:
449
+
450
+ - **Resend**:使用 `RESEND_API_KEY`。
451
+ - **SMTP**:使用 `MAIL_SMTP_*` 变量。一旦检测到设置了 `MAIL_SMTP_HOST`,系统将优先启用 SMTP 并忽略 `RESEND_API_KEY`。
212
452
 
213
- 设置 `MAIL_PROVIDER` 以激活它。如果未设置,将使用默认的 Resend 邮件服务。
453
+ `MAIL_PROVIDER` 仅在两者皆已配置时用于强制指定发送通道(例如在配置了 SMTP 的情况下设置 `MAIL_PROVIDER=resend` 强制保留 Resend)。
214
454
 
215
- | 变量 | 示例 | 描述 |
216
- | -------------------- | ------------------------------ | -------------------------------------------- |
217
- | `MAIL_PROVIDER` | `smtp` | 全局传输:`smtp` 或 `resend`。留空使用默认值 |
218
- | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | 发件人标题。接受裸地址或 `Name <email>` 格式 |
219
- | `MAIL_SMTP_HOST` | `smtp.acme.com` | SMTP 主机(当 `MAIL_PROVIDER=smtp` 时必需) |
220
- | `MAIL_SMTP_PORT` | `587` | SMTP 端口(默认为 `587`) |
221
- | `MAIL_SMTP_SECURE` | `false` | 隐式 TLS。对于端口 `465` 设置为 `true` |
222
- | `MAIL_SMTP_USER` | _(你的用户名)_ | SMTP 用户名(可选;无身份验证中继可省略) |
223
- | `MAIL_SMTP_PASSWORD` | _(你的密码)_ | SMTP 密码 |
455
+ | Variable | Example | Description |
456
+ | -------------------- | ------------------------------ | ---------------------------------------------------------------------------- |
457
+ | `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | Sender header for either transport. Accepts a bare address or `Name <email>` |
458
+ | `MAIL_SMTP_HOST` | `smtp.acme.com` | SMTP host. Setting it selects the SMTP transport |
459
+ | `MAIL_SMTP_PORT` | `587` | SMTP port (defaults to `587`) |
460
+ | `MAIL_SMTP_SECURE` | `false` | Implicit TLS. Set `true` for port `465` |
461
+ | `MAIL_SMTP_USER` | _(your user)_ | SMTP username (optional; omit for unauthenticated relays) |
462
+ | `MAIL_SMTP_PASSWORD` | _(your password)_ | SMTP password |
463
+ | `MAIL_PROVIDER` | `resend` | Optional override: `smtp` or `resend`. Leave unset to auto-select |
224
464
 
225
- > 优先级:组织自己的邮件服务(从**组织**仪表板配置)优先于全局邮件服务,全局邮件服务优先于默认的 Resend 密钥。
465
+ > 优先级规则:组织在后台控制面板中独立配置的邮件服务(**组织**设置页面)拥有最高优先级,其次是此处配置的全局邮件服务,最后是默认的 Resend 密钥。
226
466
 
227
467
  ## 连接您的 Intlayer 项目
228
468
 
229
- 堆栈运行后,将您的项目指向自托管的后端和仪表盘,而不是 `intlayer.org`。
469
+ 当服务堆栈成功运行后,配置您的前端项目指向自建的后端 API 和控制面板,而非官方的 `intlayer.org` 云端服务。
230
470
 
231
- ### 项目配置
471
+ ### 项目配置文件
232
472
 
233
473
  ```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
234
474
  import type { IntlayerConfig } from "intlayer";
@@ -239,14 +479,14 @@ const config: IntlayerConfig = {
239
479
  clientSecret: process.env.INTLAYER_CLIENT_SECRET,
240
480
 
241
481
  /**
242
- * 自托管 CMS 仪表盘的 URL。
243
- * 默认值: https://app.intlayer.org
482
+ * URL of the self-hosted CMS dashboard.
483
+ * Default: https://app.intlayer.org
244
484
  */
245
485
  cmsURL: process.env.INTLAYER_CMS_URL, // e.g. http://localhost:3000
246
486
 
247
487
  /**
248
- * 自托管后端 API 的 URL。
249
- * 默认值: https://back.intlayer.org
488
+ * URL of the self-hosted backend API.
489
+ * Default: https://back.intlayer.org
250
490
  */
251
491
  backendURL: process.env.INTLAYER_BACKEND_URL, // e.g. http://localhost:3100
252
492
  },
@@ -255,7 +495,7 @@ const config: IntlayerConfig = {
255
495
  export default config;
256
496
  ```
257
497
 
258
- 在您项目的 `.env` 中设置环境变量:
498
+ Set the environment variables in your project's `.env`:
259
499
 
260
500
  ```sh
261
501
  INTLAYER_CMS_URL=http://localhost:3000
@@ -264,11 +504,11 @@ INTLAYER_CLIENT_ID=<your-client-id>
264
504
  INTLAYER_CLIENT_SECRET=<your-client-secret>
265
505
  ```
266
506
 
267
- 在您的自托管仪表盘中,通过 `http://localhost:3000/projects` 下的 **项目 → 访问密钥** 创建访问凭据。
507
+ 登录您的自建控制面板,在 **Projects → Access keys** 页面(`http://localhost:3000/projects`)创建项目的客户端凭证。
268
508
 
269
509
  ### `@intlayer/api` SDK
270
510
 
271
- 以编程方式使用 `@intlayer/api` SDK 时,明确传递 `backendURL`:
511
+ 在代码中通过 SDK 调用 `@intlayer/api` 时,请显式传入自建后端的 `backendURL`:
272
512
 
273
513
  ```typescript fileName="cms.ts" codeFormat="typescript"
274
514
  import { createIntlayerCMS } from "@intlayer/api";
@@ -285,84 +525,17 @@ const cms = createIntlayerCMS({
285
525
  const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
286
526
  ```
287
527
 
288
- ## 升级
289
-
290
- 这会拉取最新镜像并使用 `docker compose pull && docker compose up -d` 重启容器。现有卷(`mongo-data`、`redis-data`、`minio-data`)会保留——不会丢失数据。
291
-
292
- ```sh
293
- docker compose pull
294
- docker compose up -d
295
- ```
296
-
297
- ## 备份与恢复
298
-
299
- 所有持久化数据都存储在三个命名 Docker 卷中。
300
-
301
- ### 备份
302
-
303
- ```sh
304
- docker run --rm \
305
- -v intlayer_mongo-data:/data \
306
- -v "$(pwd)":/backup \
307
- busybox tar czf /backup/mongo-data.tar.gz /data
308
-
309
- docker run --rm \
310
- -v intlayer_redis-data:/data \
311
- -v "$(pwd)":/backup \
312
- busybox tar czf /backup/redis-data.tar.gz /data
313
-
314
- docker run --rm \
315
- -v intlayer_minio-data:/data \
316
- -v "$(pwd)":/backup \
317
- busybox tar czf /backup/minio-data.tar.gz /data
318
- ```
319
-
320
- ### 恢复
321
-
322
- ```sh
323
- docker run --rm \
324
- -v intlayer_mongo-data:/data \
325
- -v "$(pwd)":/backup \
326
- busybox tar xzf /backup/mongo-data.tar.gz -C /
327
-
328
- # 对 redis-data 和 minio-data 重复此操作
329
- ```
330
-
331
528
  ## 限制条件
332
529
 
333
- - **MongoDB 必须是外部的 (Atlas)。** 后端仅通过 `mongodb+srv://` 连接(由 `DB_ID` / `DB_MDP` / `DB_CLUSTER` 构建),因此不能使用普通的 `mongodb://host:27017` — 包括容器自己的捆绑 `mongod`。请提供一个 MongoDB Atlas 集群。
334
- - **不支持自定义域名。** 所有面向浏览器的 `VITE_*` URL 都在构建时内联到应用中,发布的镜像带有 `localhost` 值。必须在 `http://localhost:3000` 上访问仪表板;在公共域上提供服务需要使用目标 URL 重新构建镜像,这在开箱即用时不受支持。
335
- - **Email 需要工作的邮件程序。** 首次运行设置强制执行电子邮件验证,因此必须配置 `RESEND_API_KEY` 或 [全局 SMTP 邮件程序](#global-mailer)(`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`)。第一个管理员登录后,每个组织也可以从仪表板配置自己的 SMTP 或 Resend 邮件程序。
336
-
337
- ## 故障排除
338
-
339
- ### 后端首次启动时崩溃循环
340
-
341
- MongoDB 和 Redis 必须在后端启动前保持健康。compose 文件使用带有 `condition: service_healthy` 的 `depends_on`。如果您看到后端重复重启,请检查 `mongo` 和 `redis` 的健康检查是否通过:
342
-
343
- ```sh
344
- docker compose ps
345
- docker compose logs mongo
346
- docker compose logs redis
347
- ```
348
-
349
- 在日志的顶部附近查找 `MongoDB connection error`。
350
-
351
- ### 电子邮件未发送
352
-
353
- 默认情况下,所有出站电子邮件都会被 Mailpit 捕获。打开 `http://localhost:8025` 查看已发送的消息。要发送真实电子邮件,请在 `.env` 中设置 `MAIL_PROVIDER=resend` 和 `RESEND_API_KEY=<your-key>`,然后重启后端:
354
-
355
- ### MinIO 存储桶缺失
356
-
357
- 如果 `minio-init` 一次性服务未运行(或在 MinIO 准备好之前运行),请手动创建存储桶:
358
-
359
- ```sh
360
- docker compose run --rm minio-init
361
- ```
530
+ - **不支持自定义域名与端口重映射。** 所有面向浏览器的 `VITE_*` 接口地址均在镜像构建阶段静态固化到了前端代码中,且官方镜像(及桌面应用)默认硬编码了 `localhost` / Intlayer Cloud 地址。控制面板必须通过 `http://localhost:3000` 访问,API 为 `:3100`,MinIO 为 `:9000`。若需部署在公网自定义域名下,或将桌面应用连接至自建后端,必须在构建时通过构建参数(在 `docker/selfhost/Dockerfile` 或 `docker-compose.build.yml` 中传入 `--build-arg VITE_BACKEND_URL=… VITE_SITE_URL=… VITE_DOMAIN=…`)重新编译镜像,目前暂不支持开箱即用的动态配置。
531
+ - **必须配置可用的邮件发送服务。** 系统的首次初始化要求必须通过邮件链接完成身份验证,因此在启动前必须配置好 `RESEND_API_KEY` 或 [SMTP 中继](#global-mailer)(`MAIL_SMTP_*`)。在首个超级管理员成功登录后,各个子组织可以在控制面板中单独配置属于自己的 SMTP 或 Resend 凭证。
532
+ - **桌面版应用需要在宿主机上安装 Node.js** 运行时以启动其内嵌的本地前端服务。
362
533
 
363
- ## 有用链接
534
+ ## 相关参考链接
364
535
 
365
- - [Intlayer CMS 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md)
366
- - [配置参考](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)
367
- - [CMS SDK — `@intlayer/api`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md#programmatic-access-with-the-intlayerapi-sdk)
368
- - [Docker Image (aymercizip/intlayer-selfhost)](https://hub.docker.com/repository/docker/aymercizip/intlayer-selfhost/general)
536
+ - [Intlayer CMS 官方文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md)
537
+ - [项目配置参考指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)
538
+ - [CMS SDK: `@intlayer/api`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md#programmatic-access-with-the-intlayerapi-sdk)
539
+ - [桌面客户端最新发布版本](https://github.com/aymericzip/intlayer/releases/latest)
540
+ - Docker Hub 镜像:[`intlayer/cms-all`](https://hub.docker.com/r/intlayer/cms-all),[`intlayer/cms-frontend`](https://hub.docker.com/r/intlayer/cms-frontend),[`intlayer/cms-backend`](https://hub.docker.com/r/intlayer/cms-backend);GHCR 镜像源:`ghcr.io/aymericzip/intlayer/`
541
+ - [`docker/selfhost/`](https://github.com/aymericzip/intlayer/tree/main/docker/selfhost):Dockerfile、`docker-compose.yml` 及 `.env.template` 配置文件模板