@modern-js/main-doc 2.69.4 → 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.
- package/docs/en/{_meta.json → _nav.json} +5 -1
- package/docs/en/apis/app/commands.mdx +2 -3
- package/docs/en/apis/app/hooks/src/entry.mdx +1 -5
- package/docs/en/apis/app/hooks/src/entry.server.mdx +4 -5
- package/docs/en/apis/app/hooks/src/routes.mdx +2 -2
- package/docs/en/apis/app/runtime/_meta.json +0 -18
- package/docs/en/apis/app/runtime/bff/use-hono-context.mdx +2 -2
- package/docs/en/apis/app/runtime/router/router.mdx +1 -1
- package/docs/en/apis/app/runtime/utility/css-in-js.mdx +3 -2
- package/docs/en/community/blog/v2-release-note.mdx +0 -2
- package/docs/en/community/contributing-guide.mdx +10 -12
- package/docs/en/components/bff-upload.mdx +16 -12
- package/docs/en/components/build-output.mdx +45 -0
- package/docs/en/components/debug-app.mdx +1 -1
- package/docs/en/components/enable-bff-caution.mdx +2 -2
- package/docs/en/components/enable-bff.mdx +38 -8
- package/docs/en/components/enable-ssg.mdx +48 -0
- package/docs/en/components/entry-scan-logic.mdx +7 -0
- package/docs/en/components/init-app.mdx +40 -17
- package/docs/en/components/international/install-command.mdx +9 -0
- package/docs/en/components/international/introduce.mdx +2 -0
- package/docs/en/components/module-federation.mdx +4 -4
- package/docs/en/components/new-entry-tooltip.mdx +0 -0
- package/docs/en/components/nodeVersion.mdx +2 -6
- package/docs/en/components/prerequisites.mdx +1 -1
- package/docs/en/components/ua-polyfill.mdx +16 -12
- package/docs/en/components/upgrade-browserslist.mdx +0 -0
- package/docs/en/configure/_meta.json +7 -8
- package/docs/en/configure/app/bff/cross-project.mdx +24 -0
- package/docs/en/configure/app/dev/lazy-compilation.mdx +45 -0
- package/docs/en/configure/app/dev/server.mdx +103 -0
- package/docs/en/configure/app/dev/setup-middlewares.mdx +4 -22
- package/docs/en/configure/app/html/app-icon.mdx +1 -23
- package/docs/en/configure/app/output/inline-scripts.mdx +1 -1
- package/docs/en/configure/app/output/override-browserslist.mdx +6 -4
- package/docs/en/configure/app/output/source-map.mdx +6 -3
- package/docs/en/configure/app/output/ssg.mdx +12 -43
- package/docs/en/configure/app/output/ssgByEntries.mdx +93 -0
- package/docs/en/configure/app/performance/build-cache.mdx +0 -4
- package/docs/en/configure/app/resolve/alias-strategy.mdx +14 -0
- package/docs/en/configure/app/resolve/alias.mdx +13 -0
- package/docs/en/configure/app/resolve/condition-names.mdx +18 -0
- package/docs/en/configure/app/resolve/dedupe.mdx +13 -0
- package/docs/en/configure/app/resolve/extensions.mdx +18 -0
- package/docs/en/configure/app/runtime/0-intro.mdx +2 -51
- package/docs/en/configure/app/security/check-syntax.mdx +1 -1
- package/docs/en/configure/app/server/port.mdx +1 -21
- package/docs/en/configure/app/server/rsc.mdx +30 -0
- package/docs/en/configure/app/server/ssr.mdx +20 -9
- package/docs/en/configure/app/source/decorators.mdx +4 -2
- package/docs/en/configure/app/source/entries.mdx +0 -2
- package/docs/en/configure/app/source/main-entry-name.mdx +4 -4
- package/docs/en/configure/app/source/transform-import.mdx +1 -59
- package/docs/en/configure/app/tools/bundler-chain.mdx +5 -5
- package/docs/en/configure/app/tools/css-extract.mdx +1 -1
- package/docs/en/configure/app/tools/dev-server.mdx +14 -248
- package/docs/en/configure/app/tools/html-plugin.mdx +3 -3
- package/docs/en/configure/app/tools/lightningcss-loader.mdx +0 -1
- package/docs/en/configure/app/tools/swc.mdx +1 -43
- package/docs/en/configure/app/usage.mdx +7 -17
- package/docs/en/guides/_meta.json +1 -2
- package/docs/en/guides/advanced-features/_meta.json +6 -0
- package/docs/en/guides/advanced-features/bff/cross-project.mdx +1 -7
- package/docs/en/guides/advanced-features/bff/extend-server.mdx +18 -3
- package/docs/en/guides/advanced-features/bff/frameworks.mdx +1 -1
- package/docs/en/guides/advanced-features/bff/function.mdx +2 -6
- package/docs/en/guides/advanced-features/bff/sdk.mdx +3 -3
- package/docs/en/guides/advanced-features/build-performance.mdx +23 -26
- package/docs/en/guides/advanced-features/compatibility.mdx +53 -9
- package/docs/en/guides/advanced-features/international/_meta.json +11 -0
- package/docs/en/guides/advanced-features/international/advanced.mdx +193 -0
- package/docs/en/guides/advanced-features/international/api.mdx +400 -0
- package/docs/en/guides/advanced-features/international/basic.mdx +417 -0
- package/docs/en/guides/advanced-features/international/best-practices.mdx +135 -0
- package/docs/en/guides/advanced-features/international/configuration.mdx +437 -0
- package/docs/en/guides/advanced-features/international/locale-detection.mdx +276 -0
- package/docs/en/guides/advanced-features/international/quick-start.mdx +154 -0
- package/docs/en/guides/advanced-features/international/resource-loading.mdx +417 -0
- package/docs/en/guides/advanced-features/international/routing.mdx +212 -0
- package/docs/en/guides/advanced-features/international.mdx +37 -0
- package/docs/en/guides/advanced-features/low-level.mdx +21 -16
- package/docs/en/guides/advanced-features/page-performance/code-split.mdx +4 -4
- package/docs/en/guides/advanced-features/page-performance/inline-assets.mdx +4 -4
- package/docs/en/guides/advanced-features/page-performance/optimize-bundle.mdx +7 -21
- package/docs/en/guides/advanced-features/page-performance/react-compiler.mdx +1 -8
- package/docs/en/guides/advanced-features/rspack-start.mdx +2 -22
- package/docs/en/guides/advanced-features/server-monitor/logger.mdx +0 -4
- package/docs/en/guides/advanced-features/server-monitor/monitors.mdx +62 -34
- package/docs/en/guides/advanced-features/web-server.mdx +82 -299
- package/docs/en/guides/basic-features/_meta.json +6 -1
- package/docs/en/guides/basic-features/css/css-in-js.mdx +46 -11
- package/docs/en/guides/basic-features/css/css-modules.mdx +5 -17
- package/docs/en/guides/basic-features/css/css.mdx +3 -3
- package/docs/en/guides/basic-features/css/tailwindcss.mdx +5 -89
- package/docs/en/guides/basic-features/data/data-cache.mdx +5 -1
- package/docs/en/guides/basic-features/data/data-fetch.mdx +4 -4
- package/docs/en/guides/basic-features/data/data-write.mdx +2 -2
- package/docs/en/guides/basic-features/debug/mock.mdx +4 -1
- package/docs/en/guides/basic-features/debug/proxy.mdx +0 -8
- package/docs/en/guides/basic-features/debug/rsdoctor.mdx +5 -5
- package/docs/en/guides/basic-features/deploy.mdx +25 -18
- package/docs/en/guides/basic-features/env-vars.mdx +1 -1
- package/docs/en/guides/basic-features/html.mdx +1 -1
- package/docs/en/guides/basic-features/output-files.mdx +3 -3
- package/docs/en/guides/basic-features/render/_meta.json +1 -1
- package/docs/en/guides/basic-features/render/before-render.mdx +16 -23
- package/docs/en/guides/basic-features/render/overview.mdx +51 -0
- package/docs/en/guides/basic-features/render/rsc.mdx +394 -0
- package/docs/en/guides/basic-features/render/ssg.mdx +26 -62
- package/docs/en/guides/basic-features/render/ssr-cache.mdx +6 -6
- package/docs/en/guides/basic-features/render/ssr.mdx +31 -31
- package/docs/en/guides/basic-features/render/streaming-ssr.mdx +29 -9
- package/docs/en/guides/basic-features/routes/_meta.json +1 -0
- package/docs/en/guides/basic-features/routes/config-routes.mdx +427 -0
- package/docs/en/guides/basic-features/{routes.mdx → routes/routes.mdx} +7 -110
- package/docs/en/guides/basic-features/static-assets/json-files.mdx +21 -3
- package/docs/en/guides/basic-features/static-assets.mdx +2 -2
- package/docs/en/guides/concept/builder.mdx +24 -9
- package/docs/en/guides/concept/entries.mdx +139 -147
- package/docs/en/guides/get-started/glossary.mdx +0 -18
- package/docs/en/guides/get-started/introduction.mdx +1 -4
- package/docs/en/guides/get-started/quick-start.mdx +8 -73
- package/docs/en/guides/get-started/tech-stack.mdx +7 -25
- package/docs/en/guides/get-started/upgrade.mdx +30 -23
- package/docs/en/guides/topic-detail/_meta.json +0 -12
- package/docs/en/guides/topic-detail/module-federation/_meta.json +1 -1
- package/docs/en/guides/topic-detail/module-federation/application.mdx +16 -15
- package/docs/en/guides/topic-detail/module-federation/i18n.mdx +670 -0
- package/docs/en/guides/topic-detail/module-federation/introduce.mdx +5 -4
- package/docs/en/guides/topic-detail/module-federation/ssr.mdx +50 -2
- package/docs/en/guides/topic-detail/module-federation/usage.mdx +10 -30
- package/docs/en/guides/troubleshooting/builder.mdx +3 -82
- package/docs/en/guides/troubleshooting/cli.mdx +6 -30
- package/docs/en/guides/troubleshooting/dependencies.mdx +22 -22
- package/docs/en/plugin/cli-plugins/api.mdx +4 -5
- package/docs/en/plugin/cli-plugins/migration.mdx +33 -48
- package/docs/en/plugin/introduction.mdx +39 -27
- package/docs/en/plugin/official/_meta.json +0 -5
- package/docs/en/plugin/official/cli-plugins/_meta.json +1 -1
- package/docs/en/plugin/official/cli-plugins/plugin-styled-components.mdx +5 -0
- package/docs/en/plugin/official/cli-plugins.mdx +0 -2
- package/docs/en/plugin/plugin-system.mdx +68 -61
- package/docs/en/plugin/runtime-plugins/api.mdx +62 -59
- package/docs/en/plugin/runtime-plugins/migration.mdx +29 -20
- package/docs/en/tutorials/_meta.json +0 -10
- package/docs/en/tutorials/examples/csr-auth.mdx +1 -1
- package/docs/en/tutorials/foundations/introduction.mdx +9 -25
- package/docs/zh/{_meta.json → _nav.json} +10 -6
- package/docs/zh/apis/app/commands.mdx +2 -3
- package/docs/zh/apis/app/hooks/src/entry.mdx +1 -5
- package/docs/zh/apis/app/hooks/src/entry.server.mdx +4 -5
- package/docs/zh/apis/app/hooks/src/routes.mdx +2 -2
- package/docs/zh/apis/app/runtime/_meta.json +0 -18
- package/docs/zh/apis/app/runtime/bff/use-hono-context.mdx +2 -2
- package/docs/zh/apis/app/runtime/utility/css-in-js.mdx +3 -2
- package/docs/zh/community/blog/v2-release-note.mdx +0 -2
- package/docs/zh/community/contributing-guide.mdx +10 -12
- package/docs/zh/components/auto-upgrade.mdx +0 -0
- package/docs/zh/components/bff-upload.mdx +8 -5
- package/docs/zh/components/build-output.mdx +45 -0
- package/docs/zh/components/debug-app.mdx +1 -1
- package/docs/zh/components/enable-bff-caution.mdx +1 -1
- package/docs/zh/components/enable-bff.mdx +37 -8
- package/docs/zh/components/enable-ssg.mdx +47 -0
- package/docs/zh/components/entry-scan-logic.mdx +7 -0
- package/docs/zh/components/init-app.mdx +40 -18
- package/docs/zh/components/international/install-command.mdx +8 -0
- package/docs/zh/components/international/introduce.mdx +2 -0
- package/docs/zh/components/international/platform-support.mdx +0 -0
- package/docs/zh/components/module-federation.mdx +4 -4
- package/docs/zh/components/new-entry-tooltip.mdx +0 -0
- package/docs/zh/components/nodeVersion.mdx +3 -7
- package/docs/zh/components/prerequisites.mdx +1 -1
- package/docs/zh/components/self-route-example.mdx +3 -3
- package/docs/zh/components/ua-polyfill.mdx +11 -6
- package/docs/zh/components/upgrade-browserslist.mdx +0 -0
- package/docs/zh/configure/_meta.json +7 -8
- package/docs/zh/configure/app/bff/cross-project.mdx +24 -0
- package/docs/zh/configure/app/dev/lazy-compilation.mdx +44 -0
- package/docs/zh/configure/app/dev/server.mdx +104 -0
- package/docs/zh/configure/app/dev/setup-middlewares.mdx +4 -23
- package/docs/zh/configure/app/html/app-icon.mdx +1 -23
- package/docs/zh/configure/app/output/inline-scripts.mdx +1 -1
- package/docs/zh/configure/app/output/override-browserslist.mdx +3 -3
- package/docs/zh/configure/app/output/source-map.mdx +10 -3
- package/docs/zh/configure/app/output/ssg.mdx +13 -45
- package/docs/zh/configure/app/output/ssgByEntries.mdx +94 -0
- package/docs/zh/configure/app/performance/build-cache.mdx +0 -4
- package/docs/zh/configure/app/resolve/alias-strategy.mdx +14 -0
- package/docs/zh/configure/app/resolve/alias.mdx +13 -0
- package/docs/zh/configure/app/resolve/condition-names.mdx +18 -0
- package/docs/zh/configure/app/resolve/dedupe.mdx +14 -0
- package/docs/zh/configure/app/resolve/extensions.mdx +18 -0
- package/docs/zh/configure/app/runtime/0-intro.mdx +2 -53
- package/docs/zh/configure/app/security/check-syntax.mdx +1 -1
- package/docs/zh/configure/app/server/port.mdx +2 -21
- package/docs/zh/configure/app/server/rsc.mdx +30 -0
- package/docs/zh/configure/app/server/ssr.mdx +21 -11
- package/docs/zh/configure/app/source/decorators.mdx +4 -4
- package/docs/zh/configure/app/source/entries.mdx +0 -2
- package/docs/zh/configure/app/source/main-entry-name.mdx +4 -4
- package/docs/zh/configure/app/source/transform-import.mdx +1 -59
- package/docs/zh/configure/app/tools/bundler-chain.mdx +6 -6
- package/docs/zh/configure/app/tools/css-extract.mdx +1 -1
- package/docs/zh/configure/app/tools/dev-server.mdx +14 -248
- package/docs/zh/configure/app/tools/html-plugin.mdx +3 -2
- package/docs/zh/configure/app/tools/lightningcss-loader.mdx +0 -1
- package/docs/zh/configure/app/tools/swc.mdx +1 -43
- package/docs/zh/configure/app/usage.mdx +8 -18
- package/docs/zh/guides/_meta.json +5 -1
- package/docs/zh/guides/advanced-features/_meta.json +6 -1
- package/docs/zh/guides/advanced-features/bff/cross-project.mdx +8 -16
- package/docs/zh/guides/advanced-features/bff/extend-server.mdx +25 -8
- package/docs/zh/guides/advanced-features/bff/frameworks.mdx +1 -1
- package/docs/zh/guides/advanced-features/bff/function.mdx +7 -12
- package/docs/zh/guides/advanced-features/bff/sdk.mdx +4 -4
- package/docs/zh/guides/advanced-features/build-performance.mdx +23 -30
- package/docs/zh/guides/advanced-features/compatibility.mdx +44 -0
- package/docs/zh/guides/advanced-features/international/_meta.json +11 -0
- package/docs/zh/guides/advanced-features/international/advanced.mdx +193 -0
- package/docs/zh/guides/advanced-features/international/api.mdx +400 -0
- package/docs/zh/guides/advanced-features/international/basic.mdx +416 -0
- package/docs/zh/guides/advanced-features/international/best-practices.mdx +135 -0
- package/docs/zh/guides/advanced-features/international/configuration.mdx +441 -0
- package/docs/zh/guides/advanced-features/international/locale-detection.mdx +304 -0
- package/docs/zh/guides/advanced-features/international/quick-start.mdx +149 -0
- package/docs/zh/guides/advanced-features/international/resource-loading.mdx +417 -0
- package/docs/zh/guides/advanced-features/international/routing.mdx +212 -0
- package/docs/zh/guides/advanced-features/international.mdx +36 -0
- package/docs/zh/guides/advanced-features/low-level.mdx +21 -16
- package/docs/zh/guides/advanced-features/page-performance/code-split.mdx +3 -3
- package/docs/zh/guides/advanced-features/page-performance/inline-assets.mdx +4 -4
- package/docs/zh/guides/advanced-features/page-performance/optimize-bundle.mdx +7 -21
- package/docs/zh/guides/advanced-features/page-performance/react-compiler.mdx +1 -8
- package/docs/zh/guides/advanced-features/server-monitor/logger.mdx +0 -4
- package/docs/zh/guides/advanced-features/server-monitor/monitors.mdx +63 -35
- package/docs/zh/guides/advanced-features/web-server.mdx +79 -300
- package/docs/zh/guides/basic-features/_meta.json +6 -1
- package/docs/zh/guides/basic-features/css/css-in-js.mdx +40 -5
- package/docs/zh/guides/basic-features/css/css-modules.mdx +6 -17
- package/docs/zh/guides/basic-features/css/css.mdx +2 -2
- package/docs/zh/guides/basic-features/css/tailwindcss.mdx +6 -90
- package/docs/zh/guides/basic-features/data/data-cache.mdx +8 -5
- package/docs/zh/guides/basic-features/data/data-fetch.mdx +6 -5
- package/docs/zh/guides/basic-features/data/data-write.mdx +4 -4
- package/docs/zh/guides/basic-features/debug/mock.mdx +4 -1
- package/docs/zh/guides/basic-features/debug/proxy.mdx +0 -8
- package/docs/zh/guides/basic-features/debug/rsdoctor.mdx +6 -6
- package/docs/zh/guides/basic-features/deploy.mdx +24 -20
- package/docs/zh/guides/basic-features/env-vars.mdx +1 -1
- package/docs/zh/guides/basic-features/html.mdx +2 -2
- package/docs/zh/guides/basic-features/output-files.mdx +3 -3
- package/docs/zh/guides/basic-features/render/_meta.json +1 -1
- package/docs/zh/guides/basic-features/render/before-render.mdx +17 -24
- package/docs/zh/guides/basic-features/render/overview.mdx +52 -0
- package/docs/zh/guides/basic-features/render/rsc.mdx +413 -0
- package/docs/zh/guides/basic-features/render/ssg.mdx +27 -69
- package/docs/zh/guides/basic-features/render/ssr-cache.mdx +5 -5
- package/docs/zh/guides/basic-features/render/ssr.mdx +34 -31
- package/docs/zh/guides/basic-features/render/streaming-ssr.mdx +34 -14
- package/docs/zh/guides/basic-features/routes/_meta.json +1 -0
- package/docs/zh/guides/basic-features/routes/config-routes.mdx +426 -0
- package/docs/zh/guides/basic-features/{routes.mdx → routes/routes.mdx} +8 -114
- package/docs/zh/guides/basic-features/static-assets/json-files.mdx +21 -3
- package/docs/zh/guides/basic-features/static-assets.mdx +2 -2
- package/docs/zh/guides/basic-features/testing/cypress.mdx +5 -5
- package/docs/zh/guides/basic-features/testing/jest.mdx +12 -12
- package/docs/zh/guides/concept/builder.mdx +24 -9
- package/docs/zh/guides/concept/entries.mdx +95 -92
- package/docs/zh/guides/get-started/glossary.mdx +0 -18
- package/docs/zh/guides/get-started/introduction.mdx +1 -5
- package/docs/zh/guides/get-started/quick-start.mdx +5 -72
- package/docs/zh/guides/get-started/tech-stack.mdx +8 -26
- package/docs/zh/guides/get-started/upgrade.mdx +30 -23
- package/docs/zh/guides/topic-detail/_meta.json +0 -12
- package/docs/zh/guides/topic-detail/module-federation/_meta.json +1 -1
- package/docs/zh/guides/topic-detail/module-federation/application.mdx +18 -16
- package/docs/zh/guides/topic-detail/module-federation/i18n.mdx +623 -0
- package/docs/zh/guides/topic-detail/module-federation/introduce.mdx +4 -4
- package/docs/zh/guides/topic-detail/module-federation/ssr.mdx +51 -5
- package/docs/zh/guides/topic-detail/module-federation/usage.mdx +11 -32
- package/docs/zh/guides/troubleshooting/builder.mdx +3 -84
- package/docs/zh/guides/troubleshooting/cli.mdx +6 -30
- package/docs/zh/guides/troubleshooting/dependencies.mdx +23 -23
- package/docs/zh/guides/upgrade/_meta.json +1 -0
- package/docs/zh/guides/upgrade/config.mdx +809 -0
- package/docs/zh/guides/upgrade/entry.mdx +463 -0
- package/docs/zh/guides/upgrade/other.md +90 -0
- package/docs/zh/guides/upgrade/overview.mdx +36 -0
- package/docs/zh/guides/upgrade/tailwindcss.mdx +130 -0
- package/docs/zh/guides/upgrade/web-server.md +93 -0
- package/docs/zh/plugin/cli-plugins/api.mdx +4 -5
- package/docs/zh/plugin/cli-plugins/migration.mdx +30 -45
- package/docs/zh/plugin/introduction.mdx +36 -24
- package/docs/zh/plugin/official/_meta.json +0 -5
- package/docs/zh/plugin/official/cli-plugins/_meta.json +1 -1
- package/docs/zh/plugin/official/cli-plugins/plugin-styled-components.mdx +5 -0
- package/docs/zh/plugin/official/cli-plugins.mdx +0 -2
- package/docs/zh/plugin/plugin-system.mdx +45 -42
- package/docs/zh/plugin/runtime-plugins/api.mdx +58 -56
- package/docs/zh/plugin/runtime-plugins/migration.mdx +26 -17
- package/docs/zh/tutorials/_meta.json +0 -10
- package/docs/zh/tutorials/examples/csr-auth.mdx +1 -1
- package/docs/zh/tutorials/foundations/introduction.mdx +8 -25
- package/i18n.json +0 -16
- package/package.json +12 -12
- package/rspress.config.ts +5 -8
- package/src/components/ContentCard/index.module.scss +11 -7
- package/src/components/ContentCard/index.tsx +1 -1
- package/src/components/FeatureLayout/index.module.css +1 -1
- package/src/components/Footer/index.tsx +2 -14
- package/src/components/Footer/styles.module.scss +5 -5
- package/src/components/ListCard/index.tsx +1 -1
- package/src/components/RandomMemberList/index.tsx +1 -1
- package/src/components/RsbuildLink/index.tsx +1 -1
- package/src/components/Sandpack/index.tsx +1 -1
- package/src/custom.scss +15 -0
- package/src/i18n/enUS.ts +2 -4
- package/src/i18n/index.ts +1 -1
- package/src/i18n/zhCN.ts +2 -4
- package/src/index.ts +2 -1
- package/src/pages/index.module.scss +59 -41
- package/src/pages/index.tsx +9 -24
- package/docs/en/apis/app/hooks/server/index_.mdx +0 -10
- package/docs/en/apis/app/hooks/src/index_.mdx +0 -38
- package/docs/en/apis/app/hooks/src/stories.mdx +0 -16
- package/docs/en/apis/app/runtime/app/define-config.mdx +0 -67
- package/docs/en/apis/app/runtime/core/bootstrap.mdx +0 -74
- package/docs/en/apis/app/runtime/core/create-app.mdx +0 -49
- package/docs/en/apis/app/runtime/core/use-loader.mdx +0 -89
- package/docs/en/apis/app/runtime/core/use-module-apps.mdx +0 -140
- package/docs/en/apis/app/runtime/core/use-runtime-context.mdx +0 -116
- package/docs/en/apis/app/runtime/model/Provider.mdx +0 -36
- package/docs/en/apis/app/runtime/model/auto-actions.mdx +0 -122
- package/docs/en/apis/app/runtime/model/connect.mdx +0 -146
- package/docs/en/apis/app/runtime/model/create-app.mdx +0 -75
- package/docs/en/apis/app/runtime/model/create-store.mdx +0 -61
- package/docs/en/apis/app/runtime/model/handle-effect.mdx +0 -107
- package/docs/en/apis/app/runtime/model/model_.mdx +0 -198
- package/docs/en/apis/app/runtime/model/use-local-model.mdx +0 -29
- package/docs/en/apis/app/runtime/model/use-model.mdx +0 -89
- package/docs/en/apis/app/runtime/model/use-static-model.mdx +0 -51
- package/docs/en/apis/app/runtime/model/use-store.mdx +0 -26
- package/docs/en/apis/app/runtime/ssr/pre-render.mdx +0 -96
- package/docs/en/apis/app/runtime/web-server/hook.mdx +0 -134
- package/docs/en/apis/app/runtime/web-server/middleware.mdx +0 -113
- package/docs/en/apis/app/runtime/web-server/unstable_middleware.mdx +0 -167
- package/docs/en/components/bff-proxy-path-rewrite.mdx +0 -16
- package/docs/en/components/bff-proxy-principle.mdx +0 -1
- package/docs/en/components/builder.mdx +0 -3
- package/docs/en/components/create-bff-api-app.mdx +0 -25
- package/docs/en/components/custom-router-micro-frontend.mdx +0 -40
- package/docs/en/components/enable-micro-frontend.mdx +0 -30
- package/docs/en/components/enableSwc.mdx +0 -17
- package/docs/en/components/global-proxy-config.mdx +0 -85
- package/docs/en/components/global-proxy.mdx +0 -29
- package/docs/en/components/package-manager.mdx +0 -11
- package/docs/en/components/reduck-notify.mdx +0 -27
- package/docs/en/components/reduck-tip.mdx +0 -8
- package/docs/en/configure/app/auto-load-plugin.mdx +0 -66
- package/docs/en/configure/app/deploy/microFrontend.mdx +0 -53
- package/docs/en/configure/app/dev/port.mdx +0 -25
- package/docs/en/configure/app/dev/proxy.mdx +0 -9
- package/docs/en/configure/app/experiments/lazy-compilation.mdx +0 -106
- package/docs/en/configure/app/html/disable-html-folder.mdx +0 -46
- package/docs/en/configure/app/html/favicon-by-entries.mdx +0 -36
- package/docs/en/configure/app/html/inject-by-entries.mdx +0 -36
- package/docs/en/configure/app/html/meta-by-entries.mdx +0 -48
- package/docs/en/configure/app/html/tags-by-entries.mdx +0 -44
- package/docs/en/configure/app/html/template-by-entries.mdx +0 -33
- package/docs/en/configure/app/html/template-parameters-by-entries.mdx +0 -35
- package/docs/en/configure/app/html/title-by-entries.mdx +0 -37
- package/docs/en/configure/app/output/css-module-local-ident-name.mdx +0 -21
- package/docs/en/configure/app/output/disable-css-extract.mdx +0 -16
- package/docs/en/configure/app/output/disable-filename-hash.mdx +0 -16
- package/docs/en/configure/app/output/disable-minimize.mdx +0 -14
- package/docs/en/configure/app/output/disable-node-polyfill.mdx +0 -22
- package/docs/en/configure/app/output/disable-source-map.mdx +0 -31
- package/docs/en/configure/app/output/enable-asset-fallback.mdx +0 -36
- package/docs/en/configure/app/output/enable-inline-scripts.mdx +0 -22
- package/docs/en/configure/app/output/enable-inline-styles.mdx +0 -22
- package/docs/en/configure/app/output/enable-latest-decorators.mdx +0 -14
- package/docs/en/configure/app/performance/transform-lodash.mdx +0 -52
- package/docs/en/configure/app/runtime/master-app.mdx +0 -36
- package/docs/en/configure/app/runtime/state.mdx +0 -52
- package/docs/en/configure/app/source/disable-entry-dirs.mdx +0 -38
- package/docs/en/configure/app/source/enable-custom-entry.mdx +0 -68
- package/docs/en/configure/app/source/module-scopes.mdx +0 -72
- package/docs/en/configure/app/source/resolve-extension-prefix.mdx +0 -55
- package/docs/en/configure/app/source/resolve-main-fields.mdx +0 -46
- package/docs/en/configure/app/tools/esbuild.mdx +0 -44
- package/docs/en/configure/app/tools/pug.mdx +0 -54
- package/docs/en/configure/app/tools/styled-components.mdx +0 -55
- package/docs/en/configure/app/tools/tailwindcss.mdx +0 -98
- package/docs/en/configure/app/tools/terser.mdx +0 -58
- package/docs/en/configure/app/tools/ts-loader.mdx +0 -76
- package/docs/en/configure/app/tools/webpack-chain.mdx +0 -249
- package/docs/en/configure/app/tools/webpack.mdx +0 -305
- package/docs/en/guides/deprecated.md +0 -17
- package/docs/en/guides/topic-detail/micro-frontend/c01-introduction.mdx +0 -27
- package/docs/en/guides/topic-detail/micro-frontend/c02-development.mdx +0 -290
- package/docs/en/guides/topic-detail/micro-frontend/c03-main-app.mdx +0 -298
- package/docs/en/guides/topic-detail/micro-frontend/c04-communicate.mdx +0 -58
- package/docs/en/guides/topic-detail/micro-frontend/c05-mixed-stack.mdx +0 -26
- package/docs/en/guides/topic-detail/model/_meta.json +0 -14
- package/docs/en/guides/topic-detail/model/auto-actions.mdx +0 -85
- package/docs/en/guides/topic-detail/model/computed-state.mdx +0 -148
- package/docs/en/guides/topic-detail/model/define-model.mdx +0 -62
- package/docs/en/guides/topic-detail/model/faq.mdx +0 -35
- package/docs/en/guides/topic-detail/model/manage-effects.mdx +0 -247
- package/docs/en/guides/topic-detail/model/model-communicate.mdx +0 -217
- package/docs/en/guides/topic-detail/model/performance.mdx +0 -167
- package/docs/en/guides/topic-detail/model/quick-start.mdx +0 -117
- package/docs/en/guides/topic-detail/model/redux-integration.mdx +0 -20
- package/docs/en/guides/topic-detail/model/typescript-best-practice.mdx +0 -68
- package/docs/en/guides/topic-detail/model/use-model.mdx +0 -243
- package/docs/en/guides/topic-detail/model/use-out-of-modernjs.mdx +0 -46
- package/docs/en/plugin/official/cli-plugins/plugin-swc.mdx +0 -363
- package/docs/en/plugin/official/cli-plugins/plugin-tailwind.mdx +0 -5
- package/docs/en/plugin/official/rsbuild-plugins/_meta.json +0 -1
- package/docs/en/plugin/official/rsbuild-plugins/plugin-esbuild.mdx +0 -205
- package/docs/en/plugin/official/rsbuild-plugins.mdx +0 -3
- package/docs/en/tutorials/first-app/c01-start.mdx +0 -99
- package/docs/en/tutorials/first-app/c02-component.mdx +0 -60
- package/docs/en/tutorials/first-app/c03-css.mdx +0 -324
- package/docs/en/tutorials/first-app/c04-routes.mdx +0 -172
- package/docs/en/tutorials/first-app/c05-loader.mdx +0 -87
- package/docs/en/tutorials/first-app/c06-model.mdx +0 -278
- package/docs/en/tutorials/first-app/c07-container.mdx +0 -281
- package/docs/en/tutorials/first-app/c08-entries.mdx +0 -135
- package/docs/zh/apis/app/hooks/server/index_.mdx +0 -10
- package/docs/zh/apis/app/hooks/src/index_.mdx +0 -39
- package/docs/zh/apis/app/hooks/src/stories.mdx +0 -16
- package/docs/zh/apis/app/runtime/app/define-config.mdx +0 -67
- package/docs/zh/apis/app/runtime/core/bootstrap.mdx +0 -74
- package/docs/zh/apis/app/runtime/core/create-app.mdx +0 -35
- package/docs/zh/apis/app/runtime/core/use-loader.mdx +0 -89
- package/docs/zh/apis/app/runtime/core/use-module-apps.mdx +0 -179
- package/docs/zh/apis/app/runtime/core/use-runtime-context.mdx +0 -116
- package/docs/zh/apis/app/runtime/model/Provider.mdx +0 -36
- package/docs/zh/apis/app/runtime/model/auto-actions.mdx +0 -122
- package/docs/zh/apis/app/runtime/model/connect.mdx +0 -143
- package/docs/zh/apis/app/runtime/model/create-app.mdx +0 -75
- package/docs/zh/apis/app/runtime/model/create-store.mdx +0 -61
- package/docs/zh/apis/app/runtime/model/handle-effect.mdx +0 -108
- package/docs/zh/apis/app/runtime/model/model_.mdx +0 -201
- package/docs/zh/apis/app/runtime/model/use-local-model.mdx +0 -29
- package/docs/zh/apis/app/runtime/model/use-model.mdx +0 -89
- package/docs/zh/apis/app/runtime/model/use-static-model.mdx +0 -49
- package/docs/zh/apis/app/runtime/model/use-store.mdx +0 -26
- package/docs/zh/apis/app/runtime/ssr/pre-render.mdx +0 -96
- package/docs/zh/apis/app/runtime/web-server/hook.mdx +0 -136
- package/docs/zh/apis/app/runtime/web-server/middleware.mdx +0 -114
- package/docs/zh/apis/app/runtime/web-server/unstable_middleware.mdx +0 -165
- package/docs/zh/components/bff-proxy-path-rewrite.mdx +0 -16
- package/docs/zh/components/bff-proxy-principle.mdx +0 -1
- package/docs/zh/components/builder.mdx +0 -3
- package/docs/zh/components/create-bff-api-app.mdx +0 -25
- package/docs/zh/components/custom-router-micro-frontend.mdx +0 -40
- package/docs/zh/components/enable-micro-frontend.mdx +0 -30
- package/docs/zh/components/enableSwc.mdx +0 -17
- package/docs/zh/components/global-proxy-config.mdx +0 -85
- package/docs/zh/components/global-proxy.mdx +0 -29
- package/docs/zh/components/package-manager.mdx +0 -11
- package/docs/zh/components/reduck-notify.mdx +0 -27
- package/docs/zh/components/reduck-tip.mdx +0 -8
- package/docs/zh/configure/app/auto-load-plugin.mdx +0 -66
- package/docs/zh/configure/app/deploy/microFrontend.mdx +0 -55
- package/docs/zh/configure/app/dev/port.mdx +0 -25
- package/docs/zh/configure/app/dev/proxy.mdx +0 -9
- package/docs/zh/configure/app/experiments/lazy-compilation.mdx +0 -105
- package/docs/zh/configure/app/html/disable-html-folder.mdx +0 -45
- package/docs/zh/configure/app/html/favicon-by-entries.mdx +0 -37
- package/docs/zh/configure/app/html/inject-by-entries.mdx +0 -37
- package/docs/zh/configure/app/html/meta-by-entries.mdx +0 -48
- package/docs/zh/configure/app/html/tags-by-entries.mdx +0 -44
- package/docs/zh/configure/app/html/template-by-entries.mdx +0 -33
- package/docs/zh/configure/app/html/template-parameters-by-entries.mdx +0 -36
- package/docs/zh/configure/app/html/title-by-entries.mdx +0 -37
- package/docs/zh/configure/app/output/css-module-local-ident-name.mdx +0 -21
- package/docs/zh/configure/app/output/disable-css-extract.mdx +0 -16
- package/docs/zh/configure/app/output/disable-filename-hash.mdx +0 -16
- package/docs/zh/configure/app/output/disable-minimize.mdx +0 -14
- package/docs/zh/configure/app/output/disable-node-polyfill.mdx +0 -22
- package/docs/zh/configure/app/output/disable-source-map.mdx +0 -31
- package/docs/zh/configure/app/output/enable-asset-fallback.mdx +0 -36
- package/docs/zh/configure/app/output/enable-inline-scripts.mdx +0 -22
- package/docs/zh/configure/app/output/enable-inline-styles.mdx +0 -22
- package/docs/zh/configure/app/output/enable-latest-decorators.mdx +0 -14
- package/docs/zh/configure/app/performance/transform-lodash.mdx +0 -52
- package/docs/zh/configure/app/runtime/master-app.mdx +0 -38
- package/docs/zh/configure/app/runtime/state.mdx +0 -52
- package/docs/zh/configure/app/source/disable-entry-dirs.mdx +0 -38
- package/docs/zh/configure/app/source/enable-custom-entry.mdx +0 -67
- package/docs/zh/configure/app/source/module-scopes.mdx +0 -72
- package/docs/zh/configure/app/source/resolve-extension-prefix.mdx +0 -57
- package/docs/zh/configure/app/source/resolve-main-fields.mdx +0 -46
- package/docs/zh/configure/app/tools/esbuild.mdx +0 -44
- package/docs/zh/configure/app/tools/pug.mdx +0 -54
- package/docs/zh/configure/app/tools/styled-components.mdx +0 -54
- package/docs/zh/configure/app/tools/tailwindcss.mdx +0 -98
- package/docs/zh/configure/app/tools/terser.mdx +0 -58
- package/docs/zh/configure/app/tools/ts-loader.mdx +0 -76
- package/docs/zh/configure/app/tools/webpack-chain.mdx +0 -253
- package/docs/zh/configure/app/tools/webpack.mdx +0 -305
- package/docs/zh/guides/advanced-features/rspack-start.mdx +0 -154
- package/docs/zh/guides/deprecated.md +0 -19
- package/docs/zh/guides/topic-detail/micro-frontend/c01-introduction.mdx +0 -26
- package/docs/zh/guides/topic-detail/micro-frontend/c02-development.mdx +0 -332
- package/docs/zh/guides/topic-detail/micro-frontend/c03-main-app.mdx +0 -296
- package/docs/zh/guides/topic-detail/micro-frontend/c04-communicate.mdx +0 -58
- package/docs/zh/guides/topic-detail/micro-frontend/c05-mixed-stack.mdx +0 -27
- package/docs/zh/guides/topic-detail/model/_meta.json +0 -14
- package/docs/zh/guides/topic-detail/model/auto-actions.mdx +0 -88
- package/docs/zh/guides/topic-detail/model/computed-state.mdx +0 -147
- package/docs/zh/guides/topic-detail/model/define-model.mdx +0 -63
- package/docs/zh/guides/topic-detail/model/faq.mdx +0 -36
- package/docs/zh/guides/topic-detail/model/manage-effects.mdx +0 -256
- package/docs/zh/guides/topic-detail/model/model-communicate.mdx +0 -217
- package/docs/zh/guides/topic-detail/model/performance.mdx +0 -167
- package/docs/zh/guides/topic-detail/model/quick-start.mdx +0 -117
- package/docs/zh/guides/topic-detail/model/redux-integration.mdx +0 -20
- package/docs/zh/guides/topic-detail/model/typescript-best-practice.mdx +0 -67
- package/docs/zh/guides/topic-detail/model/use-model.mdx +0 -248
- package/docs/zh/guides/topic-detail/model/use-out-of-modernjs.mdx +0 -46
- package/docs/zh/plugin/official/cli-plugins/plugin-swc.mdx +0 -351
- package/docs/zh/plugin/official/cli-plugins/plugin-tailwind.mdx +0 -5
- package/docs/zh/plugin/official/rsbuild-plugins/_meta.json +0 -1
- package/docs/zh/plugin/official/rsbuild-plugins/plugin-esbuild.mdx +0 -201
- package/docs/zh/plugin/official/rsbuild-plugins.mdx +0 -3
- package/docs/zh/tutorials/first-app/c01-start.mdx +0 -99
- package/docs/zh/tutorials/first-app/c02-component.mdx +0 -60
- package/docs/zh/tutorials/first-app/c03-css.mdx +0 -323
- package/docs/zh/tutorials/first-app/c04-routes.mdx +0 -172
- package/docs/zh/tutorials/first-app/c05-loader.mdx +0 -89
- package/docs/zh/tutorials/first-app/c06-model.mdx +0 -274
- package/docs/zh/tutorials/first-app/c07-container.mdx +0 -281
- package/docs/zh/tutorials/first-app/c08-entries.mdx +0 -135
- /package/docs/en/components/{reduck-migration.mdx → auto-upgrade.mdx} +0 -0
- /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
|
+
|