@modern-js/main-doc 2.69.5 → 3.0.0-alpha.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 (540) hide show
  1. package/docs/en/{_meta.json → _nav.json} +5 -1
  2. package/docs/en/apis/app/commands.mdx +2 -3
  3. package/docs/en/apis/app/hooks/src/entry.mdx +1 -5
  4. package/docs/en/apis/app/hooks/src/entry.server.mdx +4 -5
  5. package/docs/en/apis/app/hooks/src/routes.mdx +2 -2
  6. package/docs/en/apis/app/runtime/_meta.json +0 -18
  7. package/docs/en/apis/app/runtime/bff/use-hono-context.mdx +2 -2
  8. package/docs/en/apis/app/runtime/router/router.mdx +1 -1
  9. package/docs/en/apis/app/runtime/utility/css-in-js.mdx +3 -2
  10. package/docs/en/community/blog/v2-release-note.mdx +0 -2
  11. package/docs/en/community/contributing-guide.mdx +10 -12
  12. package/docs/en/components/bff-upload.mdx +16 -12
  13. package/docs/en/components/build-output.mdx +45 -0
  14. package/docs/en/components/debug-app.mdx +1 -1
  15. package/docs/en/components/enable-bff-caution.mdx +2 -2
  16. package/docs/en/components/enable-bff.mdx +38 -8
  17. package/docs/en/components/enable-ssg.mdx +48 -0
  18. package/docs/en/components/entry-scan-logic.mdx +7 -0
  19. package/docs/en/components/init-app.mdx +40 -17
  20. package/docs/en/components/international/install-command.mdx +9 -0
  21. package/docs/en/components/international/introduce.mdx +2 -0
  22. package/docs/en/components/module-federation.mdx +4 -4
  23. package/docs/en/components/new-entry-tooltip.mdx +0 -0
  24. package/docs/en/components/nodeVersion.mdx +2 -6
  25. package/docs/en/components/prerequisites.mdx +1 -1
  26. package/docs/en/components/ua-polyfill.mdx +16 -12
  27. package/docs/en/components/upgrade-browserslist.mdx +0 -0
  28. package/docs/en/configure/_meta.json +7 -8
  29. package/docs/en/configure/app/bff/cross-project.mdx +24 -0
  30. package/docs/en/configure/app/dev/lazy-compilation.mdx +45 -0
  31. package/docs/en/configure/app/dev/server.mdx +103 -0
  32. package/docs/en/configure/app/dev/setup-middlewares.mdx +4 -22
  33. package/docs/en/configure/app/html/app-icon.mdx +1 -23
  34. package/docs/en/configure/app/output/inline-scripts.mdx +1 -1
  35. package/docs/en/configure/app/output/override-browserslist.mdx +6 -4
  36. package/docs/en/configure/app/output/source-map.mdx +6 -3
  37. package/docs/en/configure/app/output/ssg.mdx +12 -43
  38. package/docs/en/configure/app/output/ssgByEntries.mdx +93 -0
  39. package/docs/en/configure/app/performance/build-cache.mdx +0 -4
  40. package/docs/en/configure/app/resolve/alias-strategy.mdx +14 -0
  41. package/docs/en/configure/app/resolve/alias.mdx +13 -0
  42. package/docs/en/configure/app/resolve/condition-names.mdx +18 -0
  43. package/docs/en/configure/app/resolve/dedupe.mdx +13 -0
  44. package/docs/en/configure/app/resolve/extensions.mdx +18 -0
  45. package/docs/en/configure/app/runtime/0-intro.mdx +2 -51
  46. package/docs/en/configure/app/security/check-syntax.mdx +1 -1
  47. package/docs/en/configure/app/server/port.mdx +1 -21
  48. package/docs/en/configure/app/server/rsc.mdx +30 -0
  49. package/docs/en/configure/app/server/ssr.mdx +20 -9
  50. package/docs/en/configure/app/source/decorators.mdx +4 -2
  51. package/docs/en/configure/app/source/entries.mdx +0 -2
  52. package/docs/en/configure/app/source/main-entry-name.mdx +4 -4
  53. package/docs/en/configure/app/source/transform-import.mdx +1 -59
  54. package/docs/en/configure/app/tools/bundler-chain.mdx +5 -5
  55. package/docs/en/configure/app/tools/css-extract.mdx +1 -1
  56. package/docs/en/configure/app/tools/dev-server.mdx +14 -248
  57. package/docs/en/configure/app/tools/html-plugin.mdx +3 -3
  58. package/docs/en/configure/app/tools/lightningcss-loader.mdx +0 -1
  59. package/docs/en/configure/app/tools/swc.mdx +1 -43
  60. package/docs/en/configure/app/usage.mdx +7 -17
  61. package/docs/en/guides/_meta.json +1 -2
  62. package/docs/en/guides/advanced-features/_meta.json +6 -0
  63. package/docs/en/guides/advanced-features/bff/cross-project.mdx +1 -7
  64. package/docs/en/guides/advanced-features/bff/extend-server.mdx +18 -3
  65. package/docs/en/guides/advanced-features/bff/frameworks.mdx +1 -1
  66. package/docs/en/guides/advanced-features/bff/function.mdx +2 -6
  67. package/docs/en/guides/advanced-features/bff/sdk.mdx +3 -3
  68. package/docs/en/guides/advanced-features/build-performance.mdx +23 -26
  69. package/docs/en/guides/advanced-features/compatibility.mdx +53 -9
  70. package/docs/en/guides/advanced-features/international/_meta.json +11 -0
  71. package/docs/en/guides/advanced-features/international/advanced.mdx +193 -0
  72. package/docs/en/guides/advanced-features/international/api.mdx +400 -0
  73. package/docs/en/guides/advanced-features/international/basic.mdx +417 -0
  74. package/docs/en/guides/advanced-features/international/best-practices.mdx +135 -0
  75. package/docs/en/guides/advanced-features/international/configuration.mdx +437 -0
  76. package/docs/en/guides/advanced-features/international/locale-detection.mdx +276 -0
  77. package/docs/en/guides/advanced-features/international/quick-start.mdx +154 -0
  78. package/docs/en/guides/advanced-features/international/resource-loading.mdx +417 -0
  79. package/docs/en/guides/advanced-features/international/routing.mdx +212 -0
  80. package/docs/en/guides/advanced-features/international.mdx +37 -0
  81. package/docs/en/guides/advanced-features/low-level.mdx +21 -16
  82. package/docs/en/guides/advanced-features/page-performance/code-split.mdx +4 -4
  83. package/docs/en/guides/advanced-features/page-performance/inline-assets.mdx +4 -4
  84. package/docs/en/guides/advanced-features/page-performance/optimize-bundle.mdx +7 -21
  85. package/docs/en/guides/advanced-features/page-performance/react-compiler.mdx +1 -8
  86. package/docs/en/guides/advanced-features/rspack-start.mdx +2 -22
  87. package/docs/en/guides/advanced-features/server-monitor/logger.mdx +0 -4
  88. package/docs/en/guides/advanced-features/server-monitor/monitors.mdx +62 -34
  89. package/docs/en/guides/advanced-features/web-server.mdx +82 -299
  90. package/docs/en/guides/basic-features/_meta.json +6 -1
  91. package/docs/en/guides/basic-features/css/css-in-js.mdx +46 -11
  92. package/docs/en/guides/basic-features/css/css-modules.mdx +5 -17
  93. package/docs/en/guides/basic-features/css/css.mdx +3 -3
  94. package/docs/en/guides/basic-features/css/tailwindcss.mdx +5 -89
  95. package/docs/en/guides/basic-features/data/data-cache.mdx +5 -1
  96. package/docs/en/guides/basic-features/data/data-fetch.mdx +4 -4
  97. package/docs/en/guides/basic-features/data/data-write.mdx +2 -2
  98. package/docs/en/guides/basic-features/debug/mock.mdx +4 -1
  99. package/docs/en/guides/basic-features/debug/proxy.mdx +0 -8
  100. package/docs/en/guides/basic-features/debug/rsdoctor.mdx +5 -5
  101. package/docs/en/guides/basic-features/deploy.mdx +25 -18
  102. package/docs/en/guides/basic-features/env-vars.mdx +1 -1
  103. package/docs/en/guides/basic-features/html.mdx +1 -1
  104. package/docs/en/guides/basic-features/output-files.mdx +3 -3
  105. package/docs/en/guides/basic-features/render/_meta.json +1 -1
  106. package/docs/en/guides/basic-features/render/before-render.mdx +16 -23
  107. package/docs/en/guides/basic-features/render/overview.mdx +51 -0
  108. package/docs/en/guides/basic-features/render/rsc.mdx +394 -0
  109. package/docs/en/guides/basic-features/render/ssg.mdx +26 -62
  110. package/docs/en/guides/basic-features/render/ssr-cache.mdx +6 -6
  111. package/docs/en/guides/basic-features/render/ssr.mdx +31 -31
  112. package/docs/en/guides/basic-features/render/streaming-ssr.mdx +29 -9
  113. package/docs/en/guides/basic-features/routes/_meta.json +1 -0
  114. package/docs/en/guides/basic-features/routes/config-routes.mdx +427 -0
  115. package/docs/en/guides/basic-features/{routes.mdx → routes/routes.mdx} +7 -110
  116. package/docs/en/guides/basic-features/static-assets/json-files.mdx +21 -3
  117. package/docs/en/guides/basic-features/static-assets.mdx +2 -2
  118. package/docs/en/guides/concept/builder.mdx +24 -9
  119. package/docs/en/guides/concept/entries.mdx +139 -147
  120. package/docs/en/guides/get-started/glossary.mdx +0 -18
  121. package/docs/en/guides/get-started/introduction.mdx +1 -4
  122. package/docs/en/guides/get-started/quick-start.mdx +8 -73
  123. package/docs/en/guides/get-started/tech-stack.mdx +7 -25
  124. package/docs/en/guides/get-started/upgrade.mdx +30 -23
  125. package/docs/en/guides/topic-detail/_meta.json +0 -12
  126. package/docs/en/guides/topic-detail/module-federation/_meta.json +1 -1
  127. package/docs/en/guides/topic-detail/module-federation/application.mdx +16 -15
  128. package/docs/en/guides/topic-detail/module-federation/i18n.mdx +670 -0
  129. package/docs/en/guides/topic-detail/module-federation/introduce.mdx +5 -4
  130. package/docs/en/guides/topic-detail/module-federation/ssr.mdx +50 -2
  131. package/docs/en/guides/topic-detail/module-federation/usage.mdx +10 -30
  132. package/docs/en/guides/troubleshooting/builder.mdx +3 -82
  133. package/docs/en/guides/troubleshooting/cli.mdx +6 -30
  134. package/docs/en/guides/troubleshooting/dependencies.mdx +22 -22
  135. package/docs/en/plugin/cli-plugins/api.mdx +4 -5
  136. package/docs/en/plugin/cli-plugins/migration.mdx +33 -48
  137. package/docs/en/plugin/introduction.mdx +39 -27
  138. package/docs/en/plugin/official/_meta.json +0 -5
  139. package/docs/en/plugin/official/cli-plugins/_meta.json +1 -1
  140. package/docs/en/plugin/official/cli-plugins/plugin-styled-components.mdx +5 -0
  141. package/docs/en/plugin/official/cli-plugins.mdx +0 -2
  142. package/docs/en/plugin/plugin-system.mdx +68 -61
  143. package/docs/en/plugin/runtime-plugins/api.mdx +62 -59
  144. package/docs/en/plugin/runtime-plugins/migration.mdx +29 -20
  145. package/docs/en/tutorials/_meta.json +0 -10
  146. package/docs/en/tutorials/examples/csr-auth.mdx +1 -1
  147. package/docs/en/tutorials/foundations/introduction.mdx +9 -25
  148. package/docs/zh/{_meta.json → _nav.json} +10 -6
  149. package/docs/zh/apis/app/commands.mdx +2 -3
  150. package/docs/zh/apis/app/hooks/src/entry.mdx +1 -5
  151. package/docs/zh/apis/app/hooks/src/entry.server.mdx +4 -5
  152. package/docs/zh/apis/app/hooks/src/routes.mdx +2 -2
  153. package/docs/zh/apis/app/runtime/_meta.json +0 -18
  154. package/docs/zh/apis/app/runtime/bff/use-hono-context.mdx +2 -2
  155. package/docs/zh/apis/app/runtime/utility/css-in-js.mdx +3 -2
  156. package/docs/zh/community/blog/v2-release-note.mdx +0 -2
  157. package/docs/zh/community/contributing-guide.mdx +10 -12
  158. package/docs/zh/components/auto-upgrade.mdx +0 -0
  159. package/docs/zh/components/bff-upload.mdx +8 -5
  160. package/docs/zh/components/build-output.mdx +45 -0
  161. package/docs/zh/components/debug-app.mdx +1 -1
  162. package/docs/zh/components/enable-bff-caution.mdx +1 -1
  163. package/docs/zh/components/enable-bff.mdx +37 -8
  164. package/docs/zh/components/enable-ssg.mdx +47 -0
  165. package/docs/zh/components/entry-scan-logic.mdx +7 -0
  166. package/docs/zh/components/init-app.mdx +40 -18
  167. package/docs/zh/components/international/install-command.mdx +8 -0
  168. package/docs/zh/components/international/introduce.mdx +2 -0
  169. package/docs/zh/components/international/platform-support.mdx +0 -0
  170. package/docs/zh/components/module-federation.mdx +4 -4
  171. package/docs/zh/components/new-entry-tooltip.mdx +0 -0
  172. package/docs/zh/components/nodeVersion.mdx +3 -7
  173. package/docs/zh/components/prerequisites.mdx +1 -1
  174. package/docs/zh/components/self-route-example.mdx +3 -3
  175. package/docs/zh/components/ua-polyfill.mdx +11 -6
  176. package/docs/zh/components/upgrade-browserslist.mdx +0 -0
  177. package/docs/zh/configure/_meta.json +7 -8
  178. package/docs/zh/configure/app/bff/cross-project.mdx +24 -0
  179. package/docs/zh/configure/app/dev/lazy-compilation.mdx +44 -0
  180. package/docs/zh/configure/app/dev/server.mdx +104 -0
  181. package/docs/zh/configure/app/dev/setup-middlewares.mdx +4 -23
  182. package/docs/zh/configure/app/html/app-icon.mdx +1 -23
  183. package/docs/zh/configure/app/output/inline-scripts.mdx +1 -1
  184. package/docs/zh/configure/app/output/override-browserslist.mdx +3 -3
  185. package/docs/zh/configure/app/output/source-map.mdx +10 -3
  186. package/docs/zh/configure/app/output/ssg.mdx +13 -45
  187. package/docs/zh/configure/app/output/ssgByEntries.mdx +94 -0
  188. package/docs/zh/configure/app/performance/build-cache.mdx +0 -4
  189. package/docs/zh/configure/app/resolve/alias-strategy.mdx +14 -0
  190. package/docs/zh/configure/app/resolve/alias.mdx +13 -0
  191. package/docs/zh/configure/app/resolve/condition-names.mdx +18 -0
  192. package/docs/zh/configure/app/resolve/dedupe.mdx +14 -0
  193. package/docs/zh/configure/app/resolve/extensions.mdx +18 -0
  194. package/docs/zh/configure/app/runtime/0-intro.mdx +2 -53
  195. package/docs/zh/configure/app/security/check-syntax.mdx +1 -1
  196. package/docs/zh/configure/app/server/port.mdx +2 -21
  197. package/docs/zh/configure/app/server/rsc.mdx +30 -0
  198. package/docs/zh/configure/app/server/ssr.mdx +21 -11
  199. package/docs/zh/configure/app/source/decorators.mdx +4 -4
  200. package/docs/zh/configure/app/source/entries.mdx +0 -2
  201. package/docs/zh/configure/app/source/main-entry-name.mdx +4 -4
  202. package/docs/zh/configure/app/source/transform-import.mdx +1 -59
  203. package/docs/zh/configure/app/tools/bundler-chain.mdx +6 -6
  204. package/docs/zh/configure/app/tools/css-extract.mdx +1 -1
  205. package/docs/zh/configure/app/tools/dev-server.mdx +14 -248
  206. package/docs/zh/configure/app/tools/html-plugin.mdx +3 -2
  207. package/docs/zh/configure/app/tools/lightningcss-loader.mdx +0 -1
  208. package/docs/zh/configure/app/tools/swc.mdx +1 -43
  209. package/docs/zh/configure/app/usage.mdx +8 -18
  210. package/docs/zh/guides/_meta.json +5 -1
  211. package/docs/zh/guides/advanced-features/_meta.json +6 -1
  212. package/docs/zh/guides/advanced-features/bff/cross-project.mdx +8 -16
  213. package/docs/zh/guides/advanced-features/bff/extend-server.mdx +25 -8
  214. package/docs/zh/guides/advanced-features/bff/frameworks.mdx +1 -1
  215. package/docs/zh/guides/advanced-features/bff/function.mdx +7 -12
  216. package/docs/zh/guides/advanced-features/bff/sdk.mdx +4 -4
  217. package/docs/zh/guides/advanced-features/build-performance.mdx +23 -30
  218. package/docs/zh/guides/advanced-features/compatibility.mdx +44 -0
  219. package/docs/zh/guides/advanced-features/international/_meta.json +11 -0
  220. package/docs/zh/guides/advanced-features/international/advanced.mdx +193 -0
  221. package/docs/zh/guides/advanced-features/international/api.mdx +400 -0
  222. package/docs/zh/guides/advanced-features/international/basic.mdx +416 -0
  223. package/docs/zh/guides/advanced-features/international/best-practices.mdx +135 -0
  224. package/docs/zh/guides/advanced-features/international/configuration.mdx +441 -0
  225. package/docs/zh/guides/advanced-features/international/locale-detection.mdx +304 -0
  226. package/docs/zh/guides/advanced-features/international/quick-start.mdx +149 -0
  227. package/docs/zh/guides/advanced-features/international/resource-loading.mdx +417 -0
  228. package/docs/zh/guides/advanced-features/international/routing.mdx +212 -0
  229. package/docs/zh/guides/advanced-features/international.mdx +36 -0
  230. package/docs/zh/guides/advanced-features/low-level.mdx +21 -16
  231. package/docs/zh/guides/advanced-features/page-performance/code-split.mdx +3 -3
  232. package/docs/zh/guides/advanced-features/page-performance/inline-assets.mdx +4 -4
  233. package/docs/zh/guides/advanced-features/page-performance/optimize-bundle.mdx +7 -21
  234. package/docs/zh/guides/advanced-features/page-performance/react-compiler.mdx +1 -8
  235. package/docs/zh/guides/advanced-features/server-monitor/logger.mdx +0 -4
  236. package/docs/zh/guides/advanced-features/server-monitor/monitors.mdx +63 -35
  237. package/docs/zh/guides/advanced-features/web-server.mdx +79 -300
  238. package/docs/zh/guides/basic-features/_meta.json +6 -1
  239. package/docs/zh/guides/basic-features/css/css-in-js.mdx +40 -5
  240. package/docs/zh/guides/basic-features/css/css-modules.mdx +6 -17
  241. package/docs/zh/guides/basic-features/css/css.mdx +2 -2
  242. package/docs/zh/guides/basic-features/css/tailwindcss.mdx +6 -90
  243. package/docs/zh/guides/basic-features/data/data-cache.mdx +8 -5
  244. package/docs/zh/guides/basic-features/data/data-fetch.mdx +6 -5
  245. package/docs/zh/guides/basic-features/data/data-write.mdx +4 -4
  246. package/docs/zh/guides/basic-features/debug/mock.mdx +4 -1
  247. package/docs/zh/guides/basic-features/debug/proxy.mdx +0 -8
  248. package/docs/zh/guides/basic-features/debug/rsdoctor.mdx +6 -6
  249. package/docs/zh/guides/basic-features/deploy.mdx +24 -20
  250. package/docs/zh/guides/basic-features/env-vars.mdx +1 -1
  251. package/docs/zh/guides/basic-features/html.mdx +2 -2
  252. package/docs/zh/guides/basic-features/output-files.mdx +3 -3
  253. package/docs/zh/guides/basic-features/render/_meta.json +1 -1
  254. package/docs/zh/guides/basic-features/render/before-render.mdx +17 -24
  255. package/docs/zh/guides/basic-features/render/overview.mdx +52 -0
  256. package/docs/zh/guides/basic-features/render/rsc.mdx +413 -0
  257. package/docs/zh/guides/basic-features/render/ssg.mdx +27 -69
  258. package/docs/zh/guides/basic-features/render/ssr-cache.mdx +5 -5
  259. package/docs/zh/guides/basic-features/render/ssr.mdx +34 -31
  260. package/docs/zh/guides/basic-features/render/streaming-ssr.mdx +34 -14
  261. package/docs/zh/guides/basic-features/routes/_meta.json +1 -0
  262. package/docs/zh/guides/basic-features/routes/config-routes.mdx +426 -0
  263. package/docs/zh/guides/basic-features/{routes.mdx → routes/routes.mdx} +8 -114
  264. package/docs/zh/guides/basic-features/static-assets/json-files.mdx +21 -3
  265. package/docs/zh/guides/basic-features/static-assets.mdx +2 -2
  266. package/docs/zh/guides/basic-features/testing/cypress.mdx +5 -5
  267. package/docs/zh/guides/basic-features/testing/jest.mdx +12 -12
  268. package/docs/zh/guides/concept/builder.mdx +24 -9
  269. package/docs/zh/guides/concept/entries.mdx +95 -92
  270. package/docs/zh/guides/get-started/glossary.mdx +0 -18
  271. package/docs/zh/guides/get-started/introduction.mdx +1 -5
  272. package/docs/zh/guides/get-started/quick-start.mdx +5 -72
  273. package/docs/zh/guides/get-started/tech-stack.mdx +8 -26
  274. package/docs/zh/guides/get-started/upgrade.mdx +30 -23
  275. package/docs/zh/guides/topic-detail/_meta.json +0 -12
  276. package/docs/zh/guides/topic-detail/module-federation/_meta.json +1 -1
  277. package/docs/zh/guides/topic-detail/module-federation/application.mdx +18 -16
  278. package/docs/zh/guides/topic-detail/module-federation/i18n.mdx +623 -0
  279. package/docs/zh/guides/topic-detail/module-federation/introduce.mdx +4 -4
  280. package/docs/zh/guides/topic-detail/module-federation/ssr.mdx +51 -5
  281. package/docs/zh/guides/topic-detail/module-federation/usage.mdx +11 -32
  282. package/docs/zh/guides/troubleshooting/builder.mdx +3 -84
  283. package/docs/zh/guides/troubleshooting/cli.mdx +6 -30
  284. package/docs/zh/guides/troubleshooting/dependencies.mdx +23 -23
  285. package/docs/zh/guides/upgrade/_meta.json +1 -0
  286. package/docs/zh/guides/upgrade/config.mdx +809 -0
  287. package/docs/zh/guides/upgrade/entry.mdx +463 -0
  288. package/docs/zh/guides/upgrade/other.md +90 -0
  289. package/docs/zh/guides/upgrade/overview.mdx +36 -0
  290. package/docs/zh/guides/upgrade/tailwindcss.mdx +130 -0
  291. package/docs/zh/guides/upgrade/web-server.md +93 -0
  292. package/docs/zh/plugin/cli-plugins/api.mdx +4 -5
  293. package/docs/zh/plugin/cli-plugins/migration.mdx +30 -45
  294. package/docs/zh/plugin/introduction.mdx +36 -24
  295. package/docs/zh/plugin/official/_meta.json +0 -5
  296. package/docs/zh/plugin/official/cli-plugins/_meta.json +1 -1
  297. package/docs/zh/plugin/official/cli-plugins/plugin-styled-components.mdx +5 -0
  298. package/docs/zh/plugin/official/cli-plugins.mdx +0 -2
  299. package/docs/zh/plugin/plugin-system.mdx +45 -42
  300. package/docs/zh/plugin/runtime-plugins/api.mdx +58 -56
  301. package/docs/zh/plugin/runtime-plugins/migration.mdx +26 -17
  302. package/docs/zh/tutorials/_meta.json +0 -10
  303. package/docs/zh/tutorials/examples/csr-auth.mdx +1 -1
  304. package/docs/zh/tutorials/foundations/introduction.mdx +8 -25
  305. package/i18n.json +0 -16
  306. package/package.json +12 -12
  307. package/rspress.config.ts +5 -8
  308. package/src/components/ContentCard/index.module.scss +11 -7
  309. package/src/components/ContentCard/index.tsx +1 -1
  310. package/src/components/FeatureLayout/index.module.css +1 -1
  311. package/src/components/Footer/index.tsx +2 -14
  312. package/src/components/Footer/styles.module.scss +5 -5
  313. package/src/components/ListCard/index.tsx +1 -1
  314. package/src/components/RandomMemberList/index.tsx +1 -1
  315. package/src/components/RsbuildLink/index.tsx +1 -1
  316. package/src/components/Sandpack/index.tsx +1 -1
  317. package/src/custom.scss +15 -0
  318. package/src/i18n/enUS.ts +2 -4
  319. package/src/i18n/index.ts +1 -1
  320. package/src/i18n/zhCN.ts +2 -4
  321. package/src/index.ts +2 -1
  322. package/src/pages/index.module.scss +59 -41
  323. package/src/pages/index.tsx +9 -24
  324. package/docs/en/apis/app/hooks/server/index_.mdx +0 -10
  325. package/docs/en/apis/app/hooks/src/index_.mdx +0 -38
  326. package/docs/en/apis/app/hooks/src/stories.mdx +0 -16
  327. package/docs/en/apis/app/runtime/app/define-config.mdx +0 -67
  328. package/docs/en/apis/app/runtime/core/bootstrap.mdx +0 -74
  329. package/docs/en/apis/app/runtime/core/create-app.mdx +0 -49
  330. package/docs/en/apis/app/runtime/core/use-loader.mdx +0 -89
  331. package/docs/en/apis/app/runtime/core/use-module-apps.mdx +0 -140
  332. package/docs/en/apis/app/runtime/core/use-runtime-context.mdx +0 -116
  333. package/docs/en/apis/app/runtime/model/Provider.mdx +0 -36
  334. package/docs/en/apis/app/runtime/model/auto-actions.mdx +0 -122
  335. package/docs/en/apis/app/runtime/model/connect.mdx +0 -146
  336. package/docs/en/apis/app/runtime/model/create-app.mdx +0 -75
  337. package/docs/en/apis/app/runtime/model/create-store.mdx +0 -61
  338. package/docs/en/apis/app/runtime/model/handle-effect.mdx +0 -107
  339. package/docs/en/apis/app/runtime/model/model_.mdx +0 -198
  340. package/docs/en/apis/app/runtime/model/use-local-model.mdx +0 -29
  341. package/docs/en/apis/app/runtime/model/use-model.mdx +0 -89
  342. package/docs/en/apis/app/runtime/model/use-static-model.mdx +0 -51
  343. package/docs/en/apis/app/runtime/model/use-store.mdx +0 -26
  344. package/docs/en/apis/app/runtime/ssr/pre-render.mdx +0 -96
  345. package/docs/en/apis/app/runtime/web-server/hook.mdx +0 -134
  346. package/docs/en/apis/app/runtime/web-server/middleware.mdx +0 -113
  347. package/docs/en/apis/app/runtime/web-server/unstable_middleware.mdx +0 -167
  348. package/docs/en/components/bff-proxy-path-rewrite.mdx +0 -16
  349. package/docs/en/components/bff-proxy-principle.mdx +0 -1
  350. package/docs/en/components/builder.mdx +0 -3
  351. package/docs/en/components/create-bff-api-app.mdx +0 -25
  352. package/docs/en/components/custom-router-micro-frontend.mdx +0 -40
  353. package/docs/en/components/enable-micro-frontend.mdx +0 -30
  354. package/docs/en/components/enableSwc.mdx +0 -17
  355. package/docs/en/components/global-proxy-config.mdx +0 -85
  356. package/docs/en/components/global-proxy.mdx +0 -29
  357. package/docs/en/components/package-manager.mdx +0 -11
  358. package/docs/en/components/reduck-notify.mdx +0 -27
  359. package/docs/en/components/reduck-tip.mdx +0 -8
  360. package/docs/en/configure/app/auto-load-plugin.mdx +0 -66
  361. package/docs/en/configure/app/deploy/microFrontend.mdx +0 -53
  362. package/docs/en/configure/app/dev/port.mdx +0 -25
  363. package/docs/en/configure/app/dev/proxy.mdx +0 -9
  364. package/docs/en/configure/app/experiments/lazy-compilation.mdx +0 -106
  365. package/docs/en/configure/app/html/disable-html-folder.mdx +0 -46
  366. package/docs/en/configure/app/html/favicon-by-entries.mdx +0 -36
  367. package/docs/en/configure/app/html/inject-by-entries.mdx +0 -36
  368. package/docs/en/configure/app/html/meta-by-entries.mdx +0 -48
  369. package/docs/en/configure/app/html/tags-by-entries.mdx +0 -44
  370. package/docs/en/configure/app/html/template-by-entries.mdx +0 -33
  371. package/docs/en/configure/app/html/template-parameters-by-entries.mdx +0 -35
  372. package/docs/en/configure/app/html/title-by-entries.mdx +0 -37
  373. package/docs/en/configure/app/output/css-module-local-ident-name.mdx +0 -21
  374. package/docs/en/configure/app/output/disable-css-extract.mdx +0 -16
  375. package/docs/en/configure/app/output/disable-filename-hash.mdx +0 -16
  376. package/docs/en/configure/app/output/disable-minimize.mdx +0 -14
  377. package/docs/en/configure/app/output/disable-node-polyfill.mdx +0 -22
  378. package/docs/en/configure/app/output/disable-source-map.mdx +0 -31
  379. package/docs/en/configure/app/output/enable-asset-fallback.mdx +0 -36
  380. package/docs/en/configure/app/output/enable-inline-scripts.mdx +0 -22
  381. package/docs/en/configure/app/output/enable-inline-styles.mdx +0 -22
  382. package/docs/en/configure/app/output/enable-latest-decorators.mdx +0 -14
  383. package/docs/en/configure/app/performance/transform-lodash.mdx +0 -52
  384. package/docs/en/configure/app/runtime/master-app.mdx +0 -36
  385. package/docs/en/configure/app/runtime/state.mdx +0 -52
  386. package/docs/en/configure/app/source/disable-entry-dirs.mdx +0 -38
  387. package/docs/en/configure/app/source/enable-custom-entry.mdx +0 -68
  388. package/docs/en/configure/app/source/module-scopes.mdx +0 -72
  389. package/docs/en/configure/app/source/resolve-extension-prefix.mdx +0 -55
  390. package/docs/en/configure/app/source/resolve-main-fields.mdx +0 -46
  391. package/docs/en/configure/app/tools/esbuild.mdx +0 -44
  392. package/docs/en/configure/app/tools/pug.mdx +0 -54
  393. package/docs/en/configure/app/tools/styled-components.mdx +0 -55
  394. package/docs/en/configure/app/tools/tailwindcss.mdx +0 -98
  395. package/docs/en/configure/app/tools/terser.mdx +0 -58
  396. package/docs/en/configure/app/tools/ts-loader.mdx +0 -76
  397. package/docs/en/configure/app/tools/webpack-chain.mdx +0 -249
  398. package/docs/en/configure/app/tools/webpack.mdx +0 -305
  399. package/docs/en/guides/deprecated.md +0 -17
  400. package/docs/en/guides/topic-detail/micro-frontend/c01-introduction.mdx +0 -27
  401. package/docs/en/guides/topic-detail/micro-frontend/c02-development.mdx +0 -290
  402. package/docs/en/guides/topic-detail/micro-frontend/c03-main-app.mdx +0 -298
  403. package/docs/en/guides/topic-detail/micro-frontend/c04-communicate.mdx +0 -58
  404. package/docs/en/guides/topic-detail/micro-frontend/c05-mixed-stack.mdx +0 -26
  405. package/docs/en/guides/topic-detail/model/_meta.json +0 -14
  406. package/docs/en/guides/topic-detail/model/auto-actions.mdx +0 -85
  407. package/docs/en/guides/topic-detail/model/computed-state.mdx +0 -148
  408. package/docs/en/guides/topic-detail/model/define-model.mdx +0 -62
  409. package/docs/en/guides/topic-detail/model/faq.mdx +0 -35
  410. package/docs/en/guides/topic-detail/model/manage-effects.mdx +0 -247
  411. package/docs/en/guides/topic-detail/model/model-communicate.mdx +0 -217
  412. package/docs/en/guides/topic-detail/model/performance.mdx +0 -167
  413. package/docs/en/guides/topic-detail/model/quick-start.mdx +0 -117
  414. package/docs/en/guides/topic-detail/model/redux-integration.mdx +0 -20
  415. package/docs/en/guides/topic-detail/model/typescript-best-practice.mdx +0 -68
  416. package/docs/en/guides/topic-detail/model/use-model.mdx +0 -243
  417. package/docs/en/guides/topic-detail/model/use-out-of-modernjs.mdx +0 -46
  418. package/docs/en/plugin/official/cli-plugins/plugin-swc.mdx +0 -363
  419. package/docs/en/plugin/official/cli-plugins/plugin-tailwind.mdx +0 -5
  420. package/docs/en/plugin/official/rsbuild-plugins/_meta.json +0 -1
  421. package/docs/en/plugin/official/rsbuild-plugins/plugin-esbuild.mdx +0 -205
  422. package/docs/en/plugin/official/rsbuild-plugins.mdx +0 -3
  423. package/docs/en/tutorials/first-app/c01-start.mdx +0 -99
  424. package/docs/en/tutorials/first-app/c02-component.mdx +0 -60
  425. package/docs/en/tutorials/first-app/c03-css.mdx +0 -324
  426. package/docs/en/tutorials/first-app/c04-routes.mdx +0 -172
  427. package/docs/en/tutorials/first-app/c05-loader.mdx +0 -87
  428. package/docs/en/tutorials/first-app/c06-model.mdx +0 -278
  429. package/docs/en/tutorials/first-app/c07-container.mdx +0 -281
  430. package/docs/en/tutorials/first-app/c08-entries.mdx +0 -135
  431. package/docs/zh/apis/app/hooks/server/index_.mdx +0 -10
  432. package/docs/zh/apis/app/hooks/src/index_.mdx +0 -39
  433. package/docs/zh/apis/app/hooks/src/stories.mdx +0 -16
  434. package/docs/zh/apis/app/runtime/app/define-config.mdx +0 -67
  435. package/docs/zh/apis/app/runtime/core/bootstrap.mdx +0 -74
  436. package/docs/zh/apis/app/runtime/core/create-app.mdx +0 -35
  437. package/docs/zh/apis/app/runtime/core/use-loader.mdx +0 -89
  438. package/docs/zh/apis/app/runtime/core/use-module-apps.mdx +0 -179
  439. package/docs/zh/apis/app/runtime/core/use-runtime-context.mdx +0 -116
  440. package/docs/zh/apis/app/runtime/model/Provider.mdx +0 -36
  441. package/docs/zh/apis/app/runtime/model/auto-actions.mdx +0 -122
  442. package/docs/zh/apis/app/runtime/model/connect.mdx +0 -143
  443. package/docs/zh/apis/app/runtime/model/create-app.mdx +0 -75
  444. package/docs/zh/apis/app/runtime/model/create-store.mdx +0 -61
  445. package/docs/zh/apis/app/runtime/model/handle-effect.mdx +0 -108
  446. package/docs/zh/apis/app/runtime/model/model_.mdx +0 -201
  447. package/docs/zh/apis/app/runtime/model/use-local-model.mdx +0 -29
  448. package/docs/zh/apis/app/runtime/model/use-model.mdx +0 -89
  449. package/docs/zh/apis/app/runtime/model/use-static-model.mdx +0 -49
  450. package/docs/zh/apis/app/runtime/model/use-store.mdx +0 -26
  451. package/docs/zh/apis/app/runtime/ssr/pre-render.mdx +0 -96
  452. package/docs/zh/apis/app/runtime/web-server/hook.mdx +0 -136
  453. package/docs/zh/apis/app/runtime/web-server/middleware.mdx +0 -114
  454. package/docs/zh/apis/app/runtime/web-server/unstable_middleware.mdx +0 -165
  455. package/docs/zh/components/bff-proxy-path-rewrite.mdx +0 -16
  456. package/docs/zh/components/bff-proxy-principle.mdx +0 -1
  457. package/docs/zh/components/builder.mdx +0 -3
  458. package/docs/zh/components/create-bff-api-app.mdx +0 -25
  459. package/docs/zh/components/custom-router-micro-frontend.mdx +0 -40
  460. package/docs/zh/components/enable-micro-frontend.mdx +0 -30
  461. package/docs/zh/components/enableSwc.mdx +0 -17
  462. package/docs/zh/components/global-proxy-config.mdx +0 -85
  463. package/docs/zh/components/global-proxy.mdx +0 -29
  464. package/docs/zh/components/package-manager.mdx +0 -11
  465. package/docs/zh/components/reduck-notify.mdx +0 -27
  466. package/docs/zh/components/reduck-tip.mdx +0 -8
  467. package/docs/zh/configure/app/auto-load-plugin.mdx +0 -66
  468. package/docs/zh/configure/app/deploy/microFrontend.mdx +0 -55
  469. package/docs/zh/configure/app/dev/port.mdx +0 -25
  470. package/docs/zh/configure/app/dev/proxy.mdx +0 -9
  471. package/docs/zh/configure/app/experiments/lazy-compilation.mdx +0 -105
  472. package/docs/zh/configure/app/html/disable-html-folder.mdx +0 -45
  473. package/docs/zh/configure/app/html/favicon-by-entries.mdx +0 -37
  474. package/docs/zh/configure/app/html/inject-by-entries.mdx +0 -37
  475. package/docs/zh/configure/app/html/meta-by-entries.mdx +0 -48
  476. package/docs/zh/configure/app/html/tags-by-entries.mdx +0 -44
  477. package/docs/zh/configure/app/html/template-by-entries.mdx +0 -33
  478. package/docs/zh/configure/app/html/template-parameters-by-entries.mdx +0 -36
  479. package/docs/zh/configure/app/html/title-by-entries.mdx +0 -37
  480. package/docs/zh/configure/app/output/css-module-local-ident-name.mdx +0 -21
  481. package/docs/zh/configure/app/output/disable-css-extract.mdx +0 -16
  482. package/docs/zh/configure/app/output/disable-filename-hash.mdx +0 -16
  483. package/docs/zh/configure/app/output/disable-minimize.mdx +0 -14
  484. package/docs/zh/configure/app/output/disable-node-polyfill.mdx +0 -22
  485. package/docs/zh/configure/app/output/disable-source-map.mdx +0 -31
  486. package/docs/zh/configure/app/output/enable-asset-fallback.mdx +0 -36
  487. package/docs/zh/configure/app/output/enable-inline-scripts.mdx +0 -22
  488. package/docs/zh/configure/app/output/enable-inline-styles.mdx +0 -22
  489. package/docs/zh/configure/app/output/enable-latest-decorators.mdx +0 -14
  490. package/docs/zh/configure/app/performance/transform-lodash.mdx +0 -52
  491. package/docs/zh/configure/app/runtime/master-app.mdx +0 -38
  492. package/docs/zh/configure/app/runtime/state.mdx +0 -52
  493. package/docs/zh/configure/app/source/disable-entry-dirs.mdx +0 -38
  494. package/docs/zh/configure/app/source/enable-custom-entry.mdx +0 -67
  495. package/docs/zh/configure/app/source/module-scopes.mdx +0 -72
  496. package/docs/zh/configure/app/source/resolve-extension-prefix.mdx +0 -57
  497. package/docs/zh/configure/app/source/resolve-main-fields.mdx +0 -46
  498. package/docs/zh/configure/app/tools/esbuild.mdx +0 -44
  499. package/docs/zh/configure/app/tools/pug.mdx +0 -54
  500. package/docs/zh/configure/app/tools/styled-components.mdx +0 -54
  501. package/docs/zh/configure/app/tools/tailwindcss.mdx +0 -98
  502. package/docs/zh/configure/app/tools/terser.mdx +0 -58
  503. package/docs/zh/configure/app/tools/ts-loader.mdx +0 -76
  504. package/docs/zh/configure/app/tools/webpack-chain.mdx +0 -253
  505. package/docs/zh/configure/app/tools/webpack.mdx +0 -305
  506. package/docs/zh/guides/advanced-features/rspack-start.mdx +0 -154
  507. package/docs/zh/guides/deprecated.md +0 -19
  508. package/docs/zh/guides/topic-detail/micro-frontend/c01-introduction.mdx +0 -26
  509. package/docs/zh/guides/topic-detail/micro-frontend/c02-development.mdx +0 -332
  510. package/docs/zh/guides/topic-detail/micro-frontend/c03-main-app.mdx +0 -296
  511. package/docs/zh/guides/topic-detail/micro-frontend/c04-communicate.mdx +0 -58
  512. package/docs/zh/guides/topic-detail/micro-frontend/c05-mixed-stack.mdx +0 -27
  513. package/docs/zh/guides/topic-detail/model/_meta.json +0 -14
  514. package/docs/zh/guides/topic-detail/model/auto-actions.mdx +0 -88
  515. package/docs/zh/guides/topic-detail/model/computed-state.mdx +0 -147
  516. package/docs/zh/guides/topic-detail/model/define-model.mdx +0 -63
  517. package/docs/zh/guides/topic-detail/model/faq.mdx +0 -36
  518. package/docs/zh/guides/topic-detail/model/manage-effects.mdx +0 -256
  519. package/docs/zh/guides/topic-detail/model/model-communicate.mdx +0 -217
  520. package/docs/zh/guides/topic-detail/model/performance.mdx +0 -167
  521. package/docs/zh/guides/topic-detail/model/quick-start.mdx +0 -117
  522. package/docs/zh/guides/topic-detail/model/redux-integration.mdx +0 -20
  523. package/docs/zh/guides/topic-detail/model/typescript-best-practice.mdx +0 -67
  524. package/docs/zh/guides/topic-detail/model/use-model.mdx +0 -248
  525. package/docs/zh/guides/topic-detail/model/use-out-of-modernjs.mdx +0 -46
  526. package/docs/zh/plugin/official/cli-plugins/plugin-swc.mdx +0 -351
  527. package/docs/zh/plugin/official/cli-plugins/plugin-tailwind.mdx +0 -5
  528. package/docs/zh/plugin/official/rsbuild-plugins/_meta.json +0 -1
  529. package/docs/zh/plugin/official/rsbuild-plugins/plugin-esbuild.mdx +0 -201
  530. package/docs/zh/plugin/official/rsbuild-plugins.mdx +0 -3
  531. package/docs/zh/tutorials/first-app/c01-start.mdx +0 -99
  532. package/docs/zh/tutorials/first-app/c02-component.mdx +0 -60
  533. package/docs/zh/tutorials/first-app/c03-css.mdx +0 -323
  534. package/docs/zh/tutorials/first-app/c04-routes.mdx +0 -172
  535. package/docs/zh/tutorials/first-app/c05-loader.mdx +0 -89
  536. package/docs/zh/tutorials/first-app/c06-model.mdx +0 -274
  537. package/docs/zh/tutorials/first-app/c07-container.mdx +0 -281
  538. package/docs/zh/tutorials/first-app/c08-entries.mdx +0 -135
  539. /package/docs/en/components/{reduck-migration.mdx → auto-upgrade.mdx} +0 -0
  540. /package/docs/{zh/components/reduck-migration.mdx → en/components/international/platform-support.mdx} +0 -0
@@ -0,0 +1,437 @@
1
+ ---
2
+ title: Configuration
3
+ ---
4
+
5
+ # Configuration
6
+
7
+ Plugin configuration is divided into two parts: CLI configuration (`modern.config.ts`) and runtime configuration (`modern.runtime.ts`). Both need to be used together - CLI configuration is for basic plugin settings, while runtime configuration is for i18next initialization options.
8
+
9
+ :::warning
10
+ Function-type configurations (such as SDK loader functions) can only be set in runtime configuration (`modern.runtime.ts`), not in CLI configuration. This is because CLI configuration is executed at build time and cannot serialize functions.
11
+ :::
12
+
13
+ ## CLI Configuration (modern.config.ts)
14
+
15
+ Configure plugin options in `modern.config.ts`:
16
+
17
+ ```ts
18
+ import { i18nPlugin } from '@modern-js/plugin-i18n';
19
+
20
+ export default defineConfig({
21
+ plugins: [
22
+ i18nPlugin({
23
+ localeDetection: {
24
+ // Language detection configuration
25
+ },
26
+ backend: {
27
+ // Backend resource loading configuration
28
+ },
29
+ }),
30
+ ],
31
+ });
32
+ ```
33
+
34
+ ### localeDetection Configuration
35
+
36
+ `localeDetection` is used to configure language detection related options:
37
+
38
+ :::warning
39
+ If `localePathRedirect` is enabled, the `detection` configuration must be placed in CLI configuration (`modern.config.ts`), because the server-side plugin needs to read this configuration to get language information and perform path redirection.
40
+ :::
41
+
42
+ ```ts
43
+ interface BaseLocaleDetectionOptions {
44
+ /** Whether to enable path redirection, adds language prefix to URL when enabled */
45
+ localePathRedirect?: boolean;
46
+
47
+ /** Whether to enable i18next language detector */
48
+ i18nextDetector?: boolean;
49
+
50
+ /** Supported language list */
51
+ languages?: string[];
52
+
53
+ /** Default fallback language */
54
+ fallbackLanguage?: string;
55
+
56
+ /** Custom detection configuration */
57
+ detection?: LanguageDetectorOptions;
58
+
59
+ /** Routes to ignore automatic redirection (array of path patterns or function)
60
+ *
61
+ * Can be a string array (path patterns) or a function to determine if redirection should be ignored.
62
+ * Supports exact match and prefix match (e.g., '/api' will match '/api' and '/api/users').
63
+ *
64
+ * @example
65
+ * // String array
66
+ * ignoreRedirectRoutes: ['/api', '/admin']
67
+ *
68
+ * // Function
69
+ * ignoreRedirectRoutes: (pathname) => pathname.startsWith('/api')
70
+ */
71
+ ignoreRedirectRoutes?: string[] | ((pathname: string) => boolean);
72
+ }
73
+
74
+ interface LocaleDetectionOptions extends BaseLocaleDetectionOptions {
75
+ /** Configure language detection by entry (multi-entry scenarios) */
76
+ localeDetectionByEntry?: Record<string, BaseLocaleDetectionOptions>;
77
+ }
78
+ ```
79
+
80
+ **Example**:
81
+
82
+ ```ts
83
+ i18nPlugin({
84
+ localeDetection: {
85
+ localePathRedirect: true,
86
+ i18nextDetector: true,
87
+ languages: ['zh', 'en', 'ja'],
88
+ fallbackLanguage: 'en',
89
+ detection: {
90
+ order: ['path', 'cookie', 'header'],
91
+ lookupCookie: 'i18next',
92
+ caches: ['cookie'],
93
+ },
94
+ },
95
+ });
96
+ ```
97
+
98
+ ### backend Configuration
99
+
100
+ `backend` is used to configure resource loading methods:
101
+
102
+ :::info
103
+ **Auto-detection**: The plugin automatically detects and enables backend in the following scenarios:
104
+
105
+ 1. **If you configure `loadPath` or `addPath`**: The backend will be automatically enabled (`enabled: true`) without checking for locales directory, since you've already specified the resource path.
106
+
107
+ 2. **If you don't configure backend**: The plugin will automatically detect if a `locales` directory exists in:
108
+ - Project root: `{projectRoot}/locales`
109
+ - Config public directory: `{projectRoot}/config/public/locales`
110
+ - Public directory configured via `server.publicDir`: `{projectRoot}/{publicDir}/locales`
111
+
112
+ If the directory exists and contains JSON files, the backend will be automatically enabled.
113
+
114
+ 3. **If you explicitly set `enabled: false`**: No auto-detection will be performed, and the backend will remain disabled.
115
+
116
+ This automatic detection helps reduce unnecessary backend registration when locales directory doesn't exist, improving performance.
117
+ :::
118
+
119
+ ```ts
120
+ interface BaseBackendOptions {
121
+ /** Whether to enable backend resource loading */
122
+ enabled?: boolean;
123
+
124
+ /** Resource file loading path (HTTP backend) */
125
+ loadPath?: string;
126
+
127
+ /** Missing translation save path (optional) */
128
+ addPath?: string;
129
+
130
+ /** Cache hit mode for chained backend (only effective when both `loadPath` and `sdk` are provided)
131
+ *
132
+ * - `'none'` (default, only when chained backend is not configured): If the first backend returns resources, stop and don't try the next backend
133
+ * - `'refresh'`: Try to refresh the cache by loading from the next backend and update the cache
134
+ * - `'refreshAndUpdateStore'` (default for chained backend): Try to refresh the cache by loading from the next backend,
135
+ * update the cache and also update the i18next resource store. This allows FS/HTTP resources to be displayed first,
136
+ * then SDK resources will update them asynchronously.
137
+ *
138
+ * @default 'refreshAndUpdateStore' when both loadPath and sdk are provided
139
+ */
140
+ cacheHitMode?: 'none' | 'refresh' | 'refreshAndUpdateStore';
141
+
142
+ /** SDK loader function (custom backend)
143
+ *
144
+ * Note: In CLI configuration, can only be set to `true` or a string identifier to enable SDK mode.
145
+ * The actual SDK function must be provided through `initOptions.backend.sdk` in runtime configuration (`modern.runtime.ts`).
146
+ *
147
+ * When both `loadPath` (or FS backend) and `sdk` are provided, the plugin will automatically use `i18next-chained-backend`
148
+ * to chain multiple backends. The loading order will be:
149
+ * 1. HTTP/FS backend (primary) - loads from `loadPath` or file system first for quick initial display
150
+ * 2. SDK backend (update) - loads from the SDK function to update/refresh translations
151
+ *
152
+ * With `cacheHitMode: 'refreshAndUpdateStore'` (default), FS/HTTP resources will be displayed immediately,
153
+ * then SDK resources will be loaded asynchronously to update the translations.
154
+ */
155
+ sdk?: I18nSdkLoader | boolean | string;
156
+ }
157
+
158
+ interface BackendOptions extends BaseBackendOptions {
159
+ /** Configure backend by entry (multi-entry scenarios) */
160
+ backendOptionsByEntry?: Record<string, BaseBackendOptions>;
161
+ }
162
+ ```
163
+
164
+ **Examples**:
165
+
166
+ **1. HTTP/FS backend only**:
167
+
168
+ You can explicitly enable backend:
169
+
170
+ ```ts
171
+ i18nPlugin({
172
+ backend: {
173
+ enabled: true,
174
+ loadPath: '/locales/{{lng}}/{{ns}}.json',
175
+ },
176
+ });
177
+ ```
178
+
179
+ Or simply configure `loadPath` or `addPath`, and backend will be automatically enabled:
180
+
181
+ ```ts
182
+ i18nPlugin({
183
+ backend: {
184
+ // enabled will be automatically set to true
185
+ loadPath: '/locales/{{lng}}/{{ns}}.json',
186
+ },
187
+ });
188
+ ```
189
+
190
+ **Auto-detection without configuration**:
191
+
192
+ If you don't configure backend at all, the plugin will automatically detect locales directory:
193
+
194
+ ```ts
195
+ i18nPlugin({
196
+ // No backend config - plugin will auto-detect locales directory
197
+ localeDetection: {
198
+ languages: ['zh', 'en'],
199
+ fallbackLanguage: 'en',
200
+ },
201
+ });
202
+ ```
203
+
204
+ If `locales` directory exists with JSON files, backend will be automatically enabled with default `loadPath: '/locales/{{lng}}/{{ns}}.json'`.
205
+
206
+ **2. Chained backend (recommended)**: Use both HTTP/FS backend and SDK backend
207
+
208
+ When `backend.enabled = true` and `sdk` is configured, if `loadPath` is not explicitly configured, the default `loadPath` will be used automatically and chained backend will be enabled:
209
+
210
+ ```ts
211
+ i18nPlugin({
212
+ backend: {
213
+ enabled: true,
214
+ // When loadPath is not configured, default '/locales/{{lng}}/{{ns}}.json' will be used
215
+ sdk: true, // SDK backend
216
+ // cacheHitMode: 'refreshAndUpdateStore', // Default value, can be omitted
217
+ },
218
+ });
219
+ ```
220
+
221
+ You can also explicitly configure `loadPath`:
222
+
223
+ ```ts
224
+ i18nPlugin({
225
+ backend: {
226
+ enabled: true,
227
+ loadPath: '/locales/{{lng}}/{{ns}}.json', // HTTP/FS backend
228
+ sdk: true, // SDK backend
229
+ },
230
+ });
231
+ ```
232
+
233
+ Provide the SDK function in `modern.runtime.ts`:
234
+
235
+ ```ts
236
+ export default defineRuntimeConfig({
237
+ i18n: {
238
+ initOptions: {
239
+ backend: {
240
+ sdk: async options => {
241
+ // SDK implementation
242
+ if (options.lng && options.ns) {
243
+ return await mySdk.getResource(options.lng, options.ns);
244
+ }
245
+ },
246
+ },
247
+ },
248
+ },
249
+ });
250
+ ```
251
+
252
+ When using chained backend, the system will:
253
+
254
+ 1. First load resources from `/locales/{{lng}}/{{ns}}.json` and display immediately (quick initial display of basic translations)
255
+ 2. Then asynchronously load resources from SDK and update the i18next store (update/supplement translations)
256
+
257
+ This ensures users see page content quickly while the latest translation resources are loaded in the background.
258
+
259
+ **3. SDK backend only**:
260
+
261
+ If you need to disable HTTP/FS backend and use only SDK backend, you can explicitly set `loadPath: ''`:
262
+
263
+ ```ts
264
+ i18nPlugin({
265
+ backend: {
266
+ enabled: true,
267
+ loadPath: '', // Explicitly disable HTTP/FS backend
268
+ sdk: true, // Use SDK backend only
269
+ },
270
+ });
271
+ ```
272
+
273
+ :::warning
274
+ When using SDK backend only, you must provide the actual SDK function in `modern.runtime.ts`, otherwise it will fallback to HTTP/FS backend.
275
+ :::
276
+
277
+ ### Multi-Entry Configuration
278
+
279
+ If the project has multiple entries, you can configure each entry separately:
280
+
281
+ ```ts
282
+ i18nPlugin({
283
+ localeDetection: {
284
+ localePathRedirect: true,
285
+ languages: ['zh', 'en'],
286
+ fallbackLanguage: 'en',
287
+ // Override configuration for specific entry
288
+ localeDetectionByEntry: {
289
+ admin: {
290
+ localePathRedirect: false, // admin entry does not use path redirection
291
+ },
292
+ },
293
+ },
294
+ backend: {
295
+ enabled: true,
296
+ // Override configuration for specific entry
297
+ backendOptionsByEntry: {
298
+ admin: {
299
+ loadPath: '/admin/locales/{{lng}}/{{ns}}.json',
300
+ },
301
+ },
302
+ },
303
+ });
304
+ ```
305
+
306
+ ## Runtime Configuration (modern.runtime.ts)
307
+
308
+ You can configure runtime options in `src/modern.runtime.ts`:
309
+
310
+ ```ts
311
+ import { defineRuntimeConfig } from '@modern-js/runtime';
312
+ import i18next from 'i18next';
313
+
314
+ // It's recommended to create a new i18next instance to avoid using the global default instance
315
+ const i18nInstance = i18next.createInstance();
316
+
317
+ export default defineRuntimeConfig({
318
+ i18n: {
319
+ // Use custom i18next instance (optional)
320
+ i18nInstance: i18nInstance,
321
+
322
+ // i18next initialization options
323
+ initOptions: {
324
+ fallbackLng: 'en',
325
+ supportedLngs: ['zh', 'en'],
326
+ // Other i18next configuration options
327
+ },
328
+ },
329
+ });
330
+ ```
331
+
332
+ ### i18nInstance Configuration
333
+
334
+ If you need to use a custom i18next instance, you can provide it in runtime configuration:
335
+
336
+ ```ts
337
+ import { defineRuntimeConfig } from '@modern-js/runtime';
338
+ import i18next from 'i18next';
339
+
340
+ // Create custom instance
341
+ const customI18n = i18next.createInstance({
342
+ // Custom configuration
343
+ });
344
+
345
+ export default defineRuntimeConfig({
346
+ i18n: {
347
+ i18nInstance: customI18n,
348
+ },
349
+ });
350
+ ```
351
+
352
+ ### initOptions Configuration
353
+
354
+ `initOptions` will be passed to i18next's `init` method and supports all i18next configuration options:
355
+
356
+ :::info
357
+ If `localePathRedirect` is enabled, the `detection` configuration should be set in CLI configuration, not in `initOptions`. This is because the server-side plugin needs to read the `detection` option from CLI configuration to perform language detection and path redirection.
358
+ :::
359
+
360
+ ```ts
361
+ export default defineRuntimeConfig({
362
+ i18n: {
363
+ initOptions: {
364
+ // Language related
365
+ lng: 'en',
366
+ fallbackLng: 'en',
367
+ supportedLngs: ['zh', 'en'],
368
+
369
+ // Namespace related
370
+ ns: ['translation', 'common'],
371
+ defaultNS: 'translation',
372
+
373
+ // React related
374
+ react: {
375
+ useSuspense: false,
376
+ },
377
+
378
+ // Other i18next options
379
+ interpolation: {
380
+ escapeValue: false,
381
+ },
382
+ },
383
+ },
384
+ });
385
+ ```
386
+
387
+ ### SDK Backend Configuration
388
+
389
+ If using SDK backend, you need to provide the actual SDK function in runtime configuration:
390
+
391
+ :::info
392
+ Function-type configurations can only be set in runtime configuration. In CLI configuration, `sdk` can only be set to `true` or a string identifier to enable SDK mode. The actual function implementation must be provided in `modern.runtime.ts`.
393
+ :::
394
+
395
+ **Enable SDK mode in `modern.config.ts`**:
396
+
397
+ ```ts
398
+ i18nPlugin({
399
+ backend: {
400
+ enabled: true,
401
+ sdk: true, // Enable SDK mode
402
+ },
403
+ });
404
+ ```
405
+
406
+ **Provide SDK function in `modern.runtime.ts`**:
407
+
408
+ ```ts
409
+ import { defineRuntimeConfig } from '@modern-js/runtime';
410
+ import type { I18nSdkLoader } from '@modern-js/plugin-i18n/runtime';
411
+
412
+ const mySdkLoader: I18nSdkLoader = async options => {
413
+ if (options.all) {
414
+ // Load all resources
415
+ return await fetchAllResources();
416
+ }
417
+
418
+ if (options.lng && options.ns) {
419
+ // Load single resource
420
+ const response = await fetch(`/api/i18n/${options.lng}/${options.ns}`);
421
+ return response.json();
422
+ }
423
+
424
+ // Handle other cases
425
+ return {};
426
+ };
427
+
428
+ export default defineRuntimeConfig({
429
+ i18n: {
430
+ initOptions: {
431
+ backend: {
432
+ sdk: mySdkLoader,
433
+ },
434
+ },
435
+ },
436
+ });
437
+ ```
@@ -0,0 +1,276 @@
1
+ ---
2
+ title: Locale Detection
3
+ ---
4
+
5
+ # Locale Detection
6
+
7
+ The plugin supports multiple language detection methods, which can be combined to meet different business requirements.
8
+
9
+ ## Detection Methods
10
+
11
+ ### 1. URL Path Detection (localePathRedirect)
12
+
13
+ When `localePathRedirect` is set to `true`, the plugin will detect the language from the URL path.
14
+
15
+ **Examples**:
16
+
17
+ - `/zh/about` → Detected language: `zh`
18
+ - `/en/about` → Detected language: `en`
19
+ - `/about` → If there's no language prefix, will redirect to the default language path
20
+
21
+ **Configuration**:
22
+
23
+ ```ts
24
+ i18nPlugin({
25
+ localeDetection: {
26
+ localePathRedirect: true,
27
+ languages: ['zh', 'en'],
28
+ fallbackLanguage: 'en',
29
+ },
30
+ });
31
+ ```
32
+
33
+ **Route Configuration** (Convention-based Routing):
34
+
35
+ When using convention-based routing, you need to create a `[lang]` directory under the `routes/` directory to represent the language parameter:
36
+
37
+ ```bash
38
+ routes/
39
+ ├── [lang]/
40
+ │ ├── layout.tsx # Layout component
41
+ │ ├── page.tsx # Home page
42
+ │ └── about/
43
+ │ └── page.tsx # About page
44
+ ```
45
+
46
+ **routes/[lang]/layout.tsx**:
47
+
48
+ ```tsx
49
+ import { Outlet } from '@modern-js/runtime/router';
50
+
51
+ export default function Layout() {
52
+ return <Outlet />;
53
+ }
54
+ ```
55
+
56
+ **routes/[lang]/page.tsx**:
57
+
58
+ ```tsx
59
+ export default function Home() {
60
+ return <div>Home</div>;
61
+ }
62
+ ```
63
+
64
+ **routes/[lang]/about/page.tsx**:
65
+
66
+ ```tsx
67
+ export default function About() {
68
+ return <div>About</div>;
69
+ }
70
+ ```
71
+
72
+ :::info
73
+ If using custom routing (`modern.routes.ts`), you need to add `:lang` dynamic parameter in the route configuration. Convention-based routing will automatically generate corresponding routes based on the file structure.
74
+ :::
75
+
76
+ ### 2. i18next Language Detector
77
+
78
+ When `i18nextDetector` is set to `true`, the i18next language detector will be enabled, supporting language detection from the following locations:
79
+
80
+ - **Cookie**: Read language settings from cookies
81
+ - **LocalStorage**: Read from browser LocalStorage
82
+ - **Query Parameters**: Read from URL query parameters (e.g., `?lng=en`)
83
+ - **Request Headers**: Read from HTTP request headers (e.g., `Accept-Language`)
84
+ - **HTML Tag**: Read from the `lang` attribute of HTML tags
85
+ - **Subdomain**: Read from subdomain (e.g., `en.example.com`)
86
+
87
+ **Configuration**:
88
+
89
+ ```ts
90
+ i18nPlugin({
91
+ localeDetection: {
92
+ i18nextDetector: true,
93
+ detection: {
94
+ order: ['cookie', 'querystring', 'header'],
95
+ lookupCookie: 'i18next',
96
+ lookupQuerystring: 'lng',
97
+ lookupHeader: 'accept-language',
98
+ caches: ['cookie'],
99
+ },
100
+ },
101
+ });
102
+ ```
103
+
104
+ ### 3. Custom Detection Configuration
105
+
106
+ You can customize detection behavior through the `detection` option:
107
+
108
+ ```ts
109
+ i18nPlugin({
110
+ localeDetection: {
111
+ i18nextDetector: true,
112
+ detection: {
113
+ // Detection order
114
+ order: ['path', 'cookie', 'querystring', 'header'],
115
+
116
+ // Cookie related
117
+ lookupCookie: 'i18next',
118
+ cookieExpirationDate: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000), // Expires in 1 year
119
+ cookieDomain: '.example.com',
120
+
121
+ // Query parameter related
122
+ lookupQuerystring: 'lng',
123
+
124
+ // Request header related
125
+ lookupHeader: 'accept-language',
126
+
127
+ // Cache configuration
128
+ caches: ['cookie', 'localStorage'],
129
+ },
130
+ },
131
+ });
132
+ ```
133
+
134
+ ## Detection Priority
135
+
136
+ The plugin's language detection follows the following priority order (from highest to lowest):
137
+
138
+ 1. **SSR Data** (highest priority): Read language from `window._SSR_DATA` set during server-side rendering, applicable to both SSR and CSR projects
139
+ 2. **Path Detection**: If `localePathRedirect` is `true`, detect language prefix from URL path
140
+ 3. **i18next Detector**: Execute detection according to the order configured in `detection.order` (Cookie, LocalStorage, query parameters, request headers, etc.)
141
+ 4. **User Configured Language**: Use the language configured in `initOptions.lng`
142
+ 5. **Fallback Language**: Use `fallbackLanguage` as the final fallback
143
+
144
+ :::info
145
+ SSR data detection has the highest priority to ensure the client uses the language detected during server-side rendering, avoiding language flickering issues caused by client-side re-detection.
146
+ :::
147
+
148
+ **Example**:
149
+
150
+ ```ts
151
+ // Configured detection order (only affects priority within i18next detector)
152
+ detection: {
153
+ order: ['path', 'cookie', 'querystring', 'header'],
154
+ }
155
+
156
+ // Actual detection flow:
157
+ // 1. First check SSR data (window._SSR_DATA)
158
+ // 2. Then check URL path (if localePathRedirect is enabled)
159
+ // 3. Then check i18next detector according to order:
160
+ // - Cookie
161
+ // - Query parameters
162
+ // - Request headers
163
+ // 4. Then use initOptions.lng (if configured)
164
+ // 5. Finally use fallbackLanguage
165
+ ```
166
+
167
+ ## Detection Options
168
+
169
+ ### order (Detection Order)
170
+
171
+ Specifies the order of language detection, optional values:
172
+
173
+ - `path`: Detect from URL path
174
+ - `querystring`: Detect from query parameters
175
+ - `cookie`: Detect from cookies
176
+ - `localStorage`: Detect from LocalStorage
177
+ - `sessionStorage`: Detect from SessionStorage
178
+ - `navigator`: Detect from browser language settings
179
+ - `htmlTag`: Detect from HTML tags
180
+ - `header`: Detect from HTTP request headers
181
+ - `subdomain`: Detect from subdomain
182
+
183
+ :::warning
184
+ `path` detection requires `localePathRedirect` to be `true`. `localStorage`, `sessionStorage`, `navigator`, and `htmlTag` are only available in browser environments.
185
+ :::
186
+
187
+ ### caches (Cache Method)
188
+
189
+ Specifies where the detected language should be cached, optional values:
190
+
191
+ - `false`: No caching
192
+ - `['cookie']`: Cache to Cookie
193
+ - `['localStorage']`: Cache to LocalStorage (browser only)
194
+ - `['cookie', 'localStorage']`: Cache to both Cookie and LocalStorage
195
+
196
+ ### lookupQuerystring, lookupCookie, lookupLocalStorage, lookupSession, lookupHeader
197
+
198
+ Specifies the key name used when reading language from query parameters, cookies, LocalStorage, SessionStorage, or request headers:
199
+
200
+ - `lookupQuerystring`: Default `'lng'`, e.g., `?lng=en`
201
+ - `lookupCookie`: Default `'i18next'`
202
+ - `lookupLocalStorage`: Default `'i18nextLng'` (browser only)
203
+ - `lookupSession`: SessionStorage key name (browser only)
204
+ - `lookupHeader`: Default `'accept-language'`
205
+
206
+ ### lookupFromPathIndex
207
+
208
+ Specifies which position in the URL path to start detecting language (when `'path'` is included in `order`):
209
+
210
+ - `lookupFromPathIndex`: Path segment index, defaults to `0` (first path segment)
211
+
212
+ **Example**:
213
+
214
+ ```ts
215
+ // URL: /api/v1/en/users
216
+ // If lookupFromPathIndex = 2, detection starts from the third path segment ('en')
217
+ detection: {
218
+ order: ['path'],
219
+ lookupFromPathIndex: 2,
220
+ }
221
+ ```
222
+
223
+ ### cookieMinutes, cookieExpirationDate
224
+
225
+ Controls Cookie expiration time:
226
+
227
+ - `cookieMinutes`: Cookie expiration time (minutes), default `525600` (1 year)
228
+ - `cookieExpirationDate`: Cookie expiration date (Date object), takes precedence over `cookieMinutes`
229
+
230
+ **Example**:
231
+
232
+ ```ts
233
+ detection: {
234
+ cookieMinutes: 60 * 24 * 7, // Expires in 7 days
235
+ // or
236
+ cookieExpirationDate: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000), // Expires in 7 days
237
+ }
238
+ ```
239
+
240
+ ### ignoreRedirectRoutes
241
+
242
+ Specifies which routes should ignore automatic language redirection. This is very useful for API routes, static resources, and other paths that don't need language prefixes.
243
+
244
+ **Configuration**:
245
+
246
+ ```ts
247
+ i18nPlugin({
248
+ localeDetection: {
249
+ localePathRedirect: true,
250
+ languages: ['zh', 'en'],
251
+ fallbackLanguage: 'en',
252
+ // String array: supports exact match and prefix match
253
+ ignoreRedirectRoutes: ['/api', '/admin', '/static'],
254
+ // Or use function for more flexible judgment
255
+ ignoreRedirectRoutes: pathname => {
256
+ return pathname.startsWith('/api') || pathname.startsWith('/admin');
257
+ },
258
+ },
259
+ });
260
+ ```
261
+
262
+ **Matching Rules**:
263
+
264
+ - String array: Supports exact match (`'/api'`) and prefix match (`'/api'` will match `/api` and `/api/users`)
265
+ - Function: Receives pathname (with language prefix removed), returns `true` to indicate ignoring redirection
266
+
267
+ **Example**:
268
+
269
+ ```ts
270
+ // Ignore all API routes and static resources
271
+ ignoreRedirectRoutes: ['/api', '/static', '/assets'];
272
+
273
+ // Use function to ignore all paths starting with /api
274
+ ignoreRedirectRoutes: pathname => pathname.startsWith('/api');
275
+ ```
276
+