@intlayer/docs 9.1.3 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/rag_powered_documentation_assistant.md +7 -0
- package/blog/de/rag_powered_documentation_assistant.md +6 -0
- package/blog/en-GB/rag_powered_documentation_assistant.md +6 -0
- package/blog/es/rag_powered_documentation_assistant.md +7 -0
- package/blog/fr/i18n_meaning.md +7 -1
- package/blog/fr/list_i18n_technologies/frameworks/angular.md +5 -1
- package/blog/fr/rag_powered_documentation_assistant.md +6 -0
- package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +119 -42
- package/blog/hi/rag_powered_documentation_assistant.md +7 -0
- package/blog/id/rag_powered_documentation_assistant.md +6 -0
- package/blog/it/rag_powered_documentation_assistant.md +6 -0
- package/blog/ja/rag_powered_documentation_assistant.md +7 -0
- package/blog/ko/list_i18n_technologies/frameworks/react.md +7 -7
- package/blog/ko/rag_powered_documentation_assistant.md +6 -0
- package/blog/pl/rag_powered_documentation_assistant.md +6 -0
- package/blog/pt/rag_powered_documentation_assistant.md +6 -0
- package/blog/ru/rag_powered_documentation_assistant.md +7 -0
- package/blog/tr/intlayer_with_react-intl.md +3 -1
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +175 -42
- package/blog/tr/rag_powered_documentation_assistant.md +6 -0
- package/blog/uk/rag_powered_documentation_assistant.md +6 -0
- package/blog/vi/rag_powered_documentation_assistant.md +6 -0
- package/blog/zh/intlayer_with_i18next.md +87 -28
- package/blog/zh/intlayer_with_next-i18next.md +86 -29
- package/blog/zh/intlayer_with_next-intl.md +88 -28
- package/blog/zh/intlayer_with_react-i18next.md +87 -28
- package/blog/zh/intlayer_with_react-intl.md +88 -27
- package/blog/zh/intlayer_with_vue-i18n.md +117 -8
- package/blog/zh/rag_powered_documentation_assistant.md +6 -0
- package/dist/cjs/generated/blog.entry.cjs +27 -27
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +234 -214
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +17 -17
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +2 -2
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +27 -27
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +234 -214
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +17 -17
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +2 -2
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/analytics.md +222 -0
- package/docs/ar/autoFill.md +28 -9
- package/docs/ar/configuration.md +25 -8
- package/docs/ar/dictionary/file.md +3 -1
- package/docs/ar/dictionary/nesting.md +47 -30
- package/docs/ar/formatters.md +148 -193
- package/docs/ar/intlayer_CMS.md +152 -0
- package/docs/ar/intlayer_with_angular_21.md +9 -9
- package/docs/ar/intlayer_with_nextjs_14.md +1 -28
- package/docs/ar/intlayer_with_nextjs_15.md +1 -33
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +40 -83
- package/docs/ar/intlayer_with_solid_start.md +1078 -0
- package/docs/ar/intlayer_with_vite+vue.md +1 -3
- package/docs/ar/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ar/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ar/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/ar/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/ar/packages/vite-intlayer/exports.md +15 -0
- package/docs/ar/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ar/packages/vite-intlayer/intlayerPrune.md +70 -3
- package/docs/ar/releases/v9.md +0 -37
- package/docs/ar/self_hosting.md +46 -49
- package/docs/bn/configuration.md +25 -8
- package/docs/bn/intlayer_with_angular_21.md +9 -9
- package/docs/cs/configuration.md +25 -8
- package/docs/cs/intlayer_with_angular_21.md +9 -9
- package/docs/de/analytics.md +222 -0
- package/docs/de/autoFill.md +28 -9
- package/docs/de/configuration.md +25 -8
- package/docs/de/dictionary/file.md +3 -1
- package/docs/de/dictionary/nesting.md +47 -31
- package/docs/de/formatters.md +208 -334
- package/docs/de/intlayer_CMS.md +66 -15
- package/docs/de/intlayer_with_angular_21.md +9 -9
- package/docs/de/intlayer_with_nestjs.md +11 -7
- package/docs/de/intlayer_with_nextjs_14.md +1 -28
- package/docs/de/intlayer_with_nextjs_15.md +1 -33
- package/docs/de/intlayer_with_solid_start.md +1078 -0
- package/docs/de/intlayer_with_vite+vue.md +1 -3
- package/docs/de/packages/intlayer/getLocalizedUrl.md +33 -25
- package/docs/de/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/de/packages/react-intlayer/useDictionary.md +2 -5
- package/docs/de/packages/vite-intlayer/exports.md +15 -0
- package/docs/de/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/de/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/de/releases/v9.md +0 -15
- package/docs/de/self_hosting.md +46 -50
- package/docs/en/cli/doc-review.md +13 -2
- package/docs/en/configuration.md +24 -15
- package/docs/en/intlayer_with_angular_21.md +9 -9
- package/docs/en/intlayer_with_solid_start.md +1091 -0
- package/docs/en/intlayer_with_vite+solid.md +12 -0
- package/docs/en-GB/analytics.md +222 -0
- package/docs/en-GB/autoFill.md +26 -7
- package/docs/en-GB/configuration.md +25 -8
- package/docs/en-GB/dictionary/file.md +2 -0
- package/docs/en-GB/dictionary/nesting.md +64 -205
- package/docs/en-GB/formatters.md +146 -181
- package/docs/en-GB/intlayer_CMS.md +152 -0
- package/docs/en-GB/intlayer_with_angular_21.md +9 -9
- package/docs/en-GB/intlayer_with_nestjs.md +6 -2
- package/docs/en-GB/intlayer_with_nextjs_14.md +0 -27
- package/docs/en-GB/intlayer_with_nextjs_15.md +1 -33
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +40 -82
- package/docs/en-GB/intlayer_with_solid_start.md +1078 -0
- package/docs/en-GB/intlayer_with_vite+vue.md +1 -3
- package/docs/en-GB/packages/intlayer/getLocalizedUrl.md +30 -22
- package/docs/en-GB/packages/intlayer/getMultilingualUrls.md +16 -48
- package/docs/en-GB/packages/vite-intlayer/exports.md +15 -0
- package/docs/en-GB/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/en-GB/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/en-GB/self_hosting.md +60 -49
- package/docs/es/analytics.md +222 -0
- package/docs/es/autoFill.md +28 -9
- package/docs/es/configuration.md +24 -7
- package/docs/es/dictionary/file.md +3 -1
- package/docs/es/dictionary/nesting.md +47 -30
- package/docs/es/formatters.md +114 -168
- package/docs/es/intlayer_CMS.md +35 -10
- package/docs/es/intlayer_with_angular_21.md +9 -9
- package/docs/es/intlayer_with_nextjs_14.md +1 -28
- package/docs/es/intlayer_with_nextjs_15.md +1 -33
- package/docs/es/intlayer_with_solid_start.md +1078 -0
- package/docs/es/packages/intlayer/getLocalizedUrl.md +31 -23
- package/docs/es/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/es/packages/vite-intlayer/exports.md +15 -0
- package/docs/es/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/es/packages/vite-intlayer/intlayerPrune.md +69 -2
- package/docs/es/releases/v9.md +0 -15
- package/docs/es/self_hosting.md +46 -49
- package/docs/fr/analytics.md +222 -0
- package/docs/fr/autoFill.md +27 -8
- package/docs/fr/configuration.md +25 -8
- package/docs/fr/dictionary/file.md +2 -0
- package/docs/fr/dictionary/nesting.md +37 -184
- package/docs/fr/formatters.md +95 -236
- package/docs/fr/intlayer_CMS.md +66 -15
- package/docs/fr/intlayer_with_angular_21.md +9 -9
- package/docs/fr/intlayer_with_nextjs_14.md +1 -28
- package/docs/fr/intlayer_with_nextjs_15.md +1 -33
- package/docs/fr/intlayer_with_solid_start.md +1078 -0
- package/docs/fr/packages/intlayer/getLocalizedUrl.md +37 -27
- package/docs/fr/packages/intlayer/getMultilingualUrls.md +18 -20
- package/docs/fr/packages/vite-intlayer/exports.md +15 -0
- package/docs/fr/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/fr/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/fr/releases/v9.md +0 -15
- package/docs/fr/self_hosting.md +46 -49
- package/docs/hi/analytics.md +222 -0
- package/docs/hi/autoFill.md +28 -9
- package/docs/hi/configuration.md +25 -8
- package/docs/hi/dictionary/file.md +3 -1
- package/docs/hi/dictionary/nesting.md +47 -30
- package/docs/hi/formatters.md +233 -334
- package/docs/hi/how_works_intlayer.md +3 -1
- package/docs/hi/intlayer_CMS.md +152 -0
- package/docs/hi/intlayer_with_angular_21.md +9 -9
- package/docs/hi/intlayer_with_nestjs.md +11 -7
- package/docs/hi/intlayer_with_nextjs_14.md +1 -28
- package/docs/hi/intlayer_with_nextjs_15.md +1 -33
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +40 -83
- package/docs/hi/intlayer_with_solid_start.md +1077 -0
- package/docs/hi/intlayer_with_vite+preact.md +56 -49
- package/docs/hi/intlayer_with_vite+react.md +48 -41
- package/docs/hi/intlayer_with_vite+solid.md +32 -41
- package/docs/hi/intlayer_with_vite+vue.md +49 -44
- package/docs/hi/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/hi/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/hi/packages/next-intlayer/t.md +33 -1
- package/docs/hi/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/hi/packages/vite-intlayer/exports.md +15 -0
- package/docs/hi/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/hi/packages/vite-intlayer/intlayerPrune.md +78 -5
- package/docs/hi/plugins/sync-json.md +9 -9
- package/docs/hi/releases/v9.md +0 -15
- package/docs/hi/self_hosting.md +38 -51
- package/docs/id/analytics.md +223 -0
- package/docs/id/configuration.md +25 -8
- package/docs/id/dictionary/nesting.md +37 -184
- package/docs/id/formatters.md +208 -305
- package/docs/id/intlayer_CMS.md +164 -0
- package/docs/id/intlayer_with_angular_21.md +9 -9
- package/docs/id/intlayer_with_nextjs_14.md +1 -26
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +70 -63
- package/docs/id/intlayer_with_solid_start.md +1078 -0
- package/docs/id/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/id/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/id/packages/vite-intlayer/exports.md +15 -0
- package/docs/id/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/id/packages/vite-intlayer/intlayerPrune.md +78 -5
- package/docs/id/releases/v9.md +12 -0
- package/docs/id/self_hosting.md +61 -50
- package/docs/it/analytics.md +222 -0
- package/docs/it/autoFill.md +27 -8
- package/docs/it/configuration.md +25 -8
- package/docs/it/dictionary/file.md +3 -1
- package/docs/it/dictionary/nesting.md +47 -30
- package/docs/it/formatters.md +114 -168
- package/docs/it/intlayer_CMS.md +66 -15
- package/docs/it/intlayer_with_angular_21.md +9 -9
- package/docs/it/intlayer_with_nestjs.md +11 -7
- package/docs/it/intlayer_with_nextjs_14.md +1 -28
- package/docs/it/intlayer_with_nextjs_15.md +1 -33
- package/docs/it/intlayer_with_solid_start.md +1078 -0
- package/docs/it/intlayer_with_vite+vue.md +1 -3
- package/docs/it/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/it/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/it/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/it/packages/vite-intlayer/exports.md +15 -0
- package/docs/it/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/it/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/it/releases/v9.md +0 -15
- package/docs/it/self_hosting.md +60 -49
- package/docs/ja/analytics.md +222 -0
- package/docs/ja/autoFill.md +28 -9
- package/docs/ja/configuration.md +25 -8
- package/docs/ja/dictionary/content_file.md +15 -7
- package/docs/ja/dictionary/file.md +3 -1
- package/docs/ja/dictionary/nesting.md +47 -30
- package/docs/ja/formatters.md +133 -187
- package/docs/ja/intlayer_visual_editor.md +3 -1
- package/docs/ja/intlayer_with_angular_21.md +6 -6
- package/docs/ja/intlayer_with_nestjs.md +2 -12
- package/docs/ja/intlayer_with_nextjs_14.md +1 -28
- package/docs/ja/intlayer_with_nextjs_15.md +1 -33
- package/docs/ja/intlayer_with_react_router_v7.md +456 -20
- package/docs/ja/intlayer_with_solid_start.md +1078 -0
- package/docs/ja/intlayer_with_vite+preact.md +73 -41
- package/docs/ja/intlayer_with_vite+vue.md +1 -3
- package/docs/ja/mcp_server.md +3 -9
- package/docs/ja/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ja/packages/intlayer/getMultilingualUrls.md +3 -17
- package/docs/ja/packages/vite-intlayer/exports.md +15 -0
- package/docs/ja/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ja/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/ja/releases/v9.md +12 -0
- package/docs/ja/self_hosting.md +46 -50
- package/docs/ko/analytics.md +222 -0
- package/docs/ko/autoFill.md +28 -9
- package/docs/ko/configuration.md +25 -8
- package/docs/ko/dictionary/file.md +3 -1
- package/docs/ko/dictionary/nesting.md +47 -30
- package/docs/ko/formatters.md +133 -187
- package/docs/ko/intlayer_with_angular_21.md +9 -9
- package/docs/ko/intlayer_with_lynx+react.md +133 -39
- package/docs/ko/intlayer_with_nextjs_14.md +1 -28
- package/docs/ko/intlayer_with_nextjs_15.md +1 -33
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +40 -188
- package/docs/ko/intlayer_with_solid_start.md +1078 -0
- package/docs/ko/intlayer_with_vite+preact.md +57 -23
- package/docs/ko/intlayer_with_vite+vue.md +1 -3
- package/docs/ko/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ko/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ko/packages/vite-intlayer/exports.md +15 -0
- package/docs/ko/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ko/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/ko/releases/v9.md +12 -0
- package/docs/ko/self_hosting.md +60 -49
- package/docs/nl/configuration.md +25 -8
- package/docs/nl/intlayer_with_angular_21.md +9 -9
- package/docs/pl/analytics.md +220 -0
- package/docs/pl/configuration.md +25 -8
- package/docs/pl/dictionary/nesting.md +47 -30
- package/docs/pl/formatters.md +208 -305
- package/docs/pl/intlayer_CMS.md +152 -0
- package/docs/pl/intlayer_with_angular_21.md +9 -9
- package/docs/pl/intlayer_with_nextjs_14.md +1 -26
- package/docs/pl/intlayer_with_solid_start.md +1078 -0
- package/docs/pl/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/pl/packages/react-intlayer/useDictionary.md +2 -19
- package/docs/pl/packages/vite-intlayer/exports.md +15 -0
- package/docs/pl/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/pl/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/pl/releases/v9.md +0 -15
- package/docs/pl/self_hosting.md +60 -49
- package/docs/pt/analytics.md +222 -0
- package/docs/pt/configuration.md +25 -8
- package/docs/pt/dictionary/file.md +3 -1
- package/docs/pt/dictionary/nesting.md +47 -30
- package/docs/pt/formatters.md +112 -168
- package/docs/pt/intlayer_CMS.md +66 -15
- package/docs/pt/intlayer_with_angular_21.md +9 -9
- package/docs/pt/intlayer_with_astro_lit.md +26 -1
- package/docs/pt/intlayer_with_nextjs_14.md +1 -28
- package/docs/pt/intlayer_with_nextjs_15.md +1 -33
- package/docs/pt/intlayer_with_solid_start.md +1078 -0
- package/docs/pt/intlayer_with_vite+vue.md +1 -3
- package/docs/pt/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/pt/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/pt/packages/vite-intlayer/exports.md +15 -0
- package/docs/pt/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/pt/packages/vite-intlayer/intlayerPrune.md +78 -6
- package/docs/pt/releases/v9.md +0 -15
- package/docs/pt/self_hosting.md +60 -49
- package/docs/ru/analytics.md +222 -0
- package/docs/ru/autoFill.md +27 -8
- package/docs/ru/configuration.md +25 -8
- package/docs/ru/dictionary/file.md +3 -1
- package/docs/ru/dictionary/nesting.md +64 -205
- package/docs/ru/formatters.md +108 -128
- package/docs/ru/intlayer_with_angular_21.md +9 -9
- package/docs/ru/intlayer_with_nextjs_14.md +1 -28
- package/docs/ru/intlayer_with_nextjs_15.md +1 -33
- package/docs/ru/intlayer_with_solid_start.md +1078 -0
- package/docs/ru/intlayer_with_vite+vue.md +1 -3
- package/docs/ru/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/ru/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ru/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/ru/packages/vite-intlayer/exports.md +15 -0
- package/docs/ru/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ru/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/ru/releases/v9.md +0 -15
- package/docs/ru/self_hosting.md +60 -49
- package/docs/tr/analytics.md +222 -0
- package/docs/tr/autoFill.md +28 -9
- package/docs/tr/configuration.md +25 -8
- package/docs/tr/dictionary/file.md +2 -0
- package/docs/tr/dictionary/nesting.md +47 -30
- package/docs/tr/formatters.md +144 -190
- package/docs/tr/intlayer_CMS.md +152 -0
- package/docs/tr/intlayer_with_angular_21.md +9 -9
- package/docs/tr/intlayer_with_nestjs.md +2 -12
- package/docs/tr/intlayer_with_nextjs_15.md +1 -33
- package/docs/tr/intlayer_with_solid_start.md +1078 -0
- package/docs/tr/intlayer_with_vite+vue.md +1 -3
- package/docs/tr/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/tr/packages/vite-intlayer/exports.md +15 -0
- package/docs/tr/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/tr/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/tr/self_hosting.md +47 -50
- package/docs/uk/analytics.md +222 -0
- package/docs/uk/configuration.md +25 -8
- package/docs/uk/dictionary/nesting.md +47 -30
- package/docs/uk/formatters.md +128 -185
- package/docs/uk/intlayer_CMS.md +152 -0
- package/docs/uk/intlayer_with_angular_21.md +9 -9
- package/docs/uk/intlayer_with_nextjs_14.md +1 -26
- package/docs/uk/intlayer_with_solid_start.md +1078 -0
- package/docs/uk/packages/react-intlayer/useDictionary.md +2 -19
- package/docs/uk/packages/vite-intlayer/exports.md +15 -0
- package/docs/uk/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/uk/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/uk/releases/v9.md +0 -15
- package/docs/uk/self_hosting.md +60 -50
- package/docs/ur/configuration.md +25 -8
- package/docs/ur/intlayer_with_angular_21.md +9 -9
- package/docs/vi/analytics.md +222 -0
- package/docs/vi/configuration.md +24 -8
- package/docs/vi/dictionary/nesting.md +37 -184
- package/docs/vi/formatters.md +208 -309
- package/docs/vi/intlayer_CMS.md +164 -0
- package/docs/vi/intlayer_with_angular_21.md +9 -9
- package/docs/vi/intlayer_with_nextjs_14.md +0 -25
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +70 -63
- package/docs/vi/intlayer_with_solid_start.md +1078 -0
- package/docs/vi/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/vi/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/vi/packages/vite-intlayer/exports.md +15 -0
- package/docs/vi/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/vi/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/vi/plugins/sync-json.md +6 -6
- package/docs/vi/releases/v9.md +12 -0
- package/docs/vi/self_hosting.md +61 -50
- package/docs/zh/CI_CD.md +4 -0
- package/docs/zh/analytics.md +222 -0
- package/docs/zh/autoFill.md +28 -9
- package/docs/zh/configuration.md +24 -8
- package/docs/zh/dictionary/file.md +2 -0
- package/docs/zh/dictionary/nesting.md +47 -30
- package/docs/zh/formatters.md +140 -188
- package/docs/zh/intlayer_CMS.md +164 -0
- package/docs/zh/intlayer_with_analog.md +193 -3
- package/docs/zh/intlayer_with_angular_19.md +272 -3
- package/docs/zh/intlayer_with_angular_21.md +7 -7
- package/docs/zh/intlayer_with_create_react_app.md +348 -26
- package/docs/zh/intlayer_with_lynx+react.md +263 -4
- package/docs/zh/intlayer_with_nextjs_14.md +1 -28
- package/docs/zh/intlayer_with_nextjs_15.md +1 -33
- package/docs/zh/intlayer_with_nextjs_no_locale_path.md +558 -1
- package/docs/zh/intlayer_with_nuxt.md +182 -7
- package/docs/zh/intlayer_with_react_router_v7.md +183 -25
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +306 -42
- package/docs/zh/intlayer_with_solid_start.md +1077 -0
- package/docs/zh/intlayer_with_storybook.md +260 -3
- package/docs/zh/intlayer_with_svelte_kit.md +428 -48
- package/docs/zh/intlayer_with_tanstack+solid.md +713 -13
- package/docs/zh/intlayer_with_tanstack.md +731 -20
- package/docs/zh/intlayer_with_vanilla.md +314 -4
- package/docs/zh/intlayer_with_vite+lit.md +465 -4
- package/docs/zh/intlayer_with_vite+preact.md +422 -116
- package/docs/zh/intlayer_with_vite+react.md +324 -45
- package/docs/zh/intlayer_with_vite+react_compiler.md +228 -13
- package/docs/zh/intlayer_with_vite+solid.md +462 -32
- package/docs/zh/intlayer_with_vite+vanilla.md +497 -4
- package/docs/zh/mcp_server.md +3 -9
- package/docs/zh/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/zh/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/zh/packages/vite-intlayer/exports.md +29 -0
- package/docs/zh/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/zh/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/zh/releases/v9.md +12 -0
- package/docs/zh/self_hosting.md +60 -50
- package/docs/zh-TW/intlayer_with_angular_21.md +7 -7
- package/package.json +6 -6
- package/src/generated/blog.entry.ts +27 -27
- package/src/generated/docs.entry.ts +234 -214
- package/src/generated/frequentQuestions.entry.ts +17 -17
- package/src/generated/legal.entry.ts +2 -2
|
@@ -39,11 +39,126 @@ export default defineConfig({
|
|
|
39
39
|
});
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
##
|
|
42
|
+
## 选项
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
```ts
|
|
45
|
+
import type { IntlayerPluginOptions } from "vite-intlayer";
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`IntlayerPluginOptions` 扩展了 `GetConfigurationOptions`(参见 `@intlayer/config`),并添加了以下额外字段:
|
|
49
|
+
|
|
50
|
+
| 选项 | 类型 | 默认值 | 描述 |
|
|
51
|
+
| --------------- | ------------------------------- | ----------- | --------------------------------------------------------------------------------------------------- |
|
|
52
|
+
| `compatCallers` | `CompatCallerConfig[]` | `[]` | compat-adapter 包的额外调用者模式(例如 `@intlayer/react-i18next`)。在构建时传递给字段使用分析器。 |
|
|
53
|
+
| `proxy` | `{ ignore?: (req) => boolean }` | `undefined` | 转发到捆绑的区域设置路由代理的选项。使用 `ignore` 排除特定路径(例如 API 路由)不进行区域设置路由。 |
|
|
54
|
+
|
|
55
|
+
所有其他选项(`override`、`configFile`、…)直接转发到 `getConfiguration()`。
|
|
56
|
+
|
|
57
|
+
### 示例
|
|
58
|
+
|
|
59
|
+
#### 忽略来自区域设置路由的 API 路由
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
// vite.config.ts
|
|
63
|
+
import { defineConfig } from "vite";
|
|
64
|
+
import { intlayer } from "vite-intlayer";
|
|
65
|
+
|
|
66
|
+
export default defineConfig({
|
|
67
|
+
plugins: [
|
|
68
|
+
intlayer({
|
|
69
|
+
proxy: {
|
|
70
|
+
ignore: (req) => req.url?.startsWith("/api"),
|
|
71
|
+
},
|
|
72
|
+
}),
|
|
73
|
+
],
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### 使用自定义配置文件路径
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
export default defineConfig({
|
|
81
|
+
plugins: [
|
|
82
|
+
intlayer({
|
|
83
|
+
configFile: "./config/intlayer.config.ts",
|
|
84
|
+
}),
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### 带有 compat-adapter 调用者
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
import { intlayer } from "vite-intlayer";
|
|
93
|
+
import { reactI18nextCallerConfig } from "@intlayer/react-i18next/plugin";
|
|
94
|
+
|
|
95
|
+
export default defineConfig({
|
|
96
|
+
plugins: [
|
|
97
|
+
intlayer({
|
|
98
|
+
compatCallers: [reactI18nextCallerConfig],
|
|
99
|
+
}),
|
|
100
|
+
],
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## 插件的作用
|
|
105
|
+
|
|
106
|
+
### 1. 字典准备
|
|
107
|
+
|
|
108
|
+
在构建开始前(以及开发中每小时一次),`intlayer` 调用 `prepareIntlayer` 来编译所有 `.content.ts` 文件到存储在 `.intlayer/` 中的优化 JSON 字典。
|
|
109
|
+
|
|
110
|
+
### 2. Module aliases
|
|
111
|
+
|
|
112
|
+
该插件添加了 Vite resolve aliases,使得 `import { myDict } from 'intlayer/dictionaries/my-dict'` 能够解析到磁盘上的已编译 JSON 文件。SSR 构建使用 `ssr.noExternal` 来确保所有 `@intlayer/*` packages 都与应用的 aliases 一起打包。
|
|
113
|
+
|
|
114
|
+
### 3. Dev-server watcher
|
|
115
|
+
|
|
116
|
+
在开发模式下,会启动一个 `chokidar` watcher。当 `.content.ts` 文件变化时,字典会被重新编译,Vite 的 HMR 会将更新传播到浏览器。
|
|
117
|
+
|
|
118
|
+
### 4. 捆绑的语言环境路由代理 (v9+)
|
|
119
|
+
|
|
120
|
+
自 Intlayer v9 起,`intlayerProxy` 中间件会自动在 `intlayer()` 内注册。它处理:
|
|
121
|
+
|
|
122
|
+
- 从 URL 前缀、cookies 和 `Accept-Language` 头进行语言环境检测。
|
|
123
|
+
- 当检测到的语言环境与当前 URL 不匹配时进行 301 重定向。
|
|
124
|
+
- 内部 URL 重写,以便框架看到正确的 `[locale]` 路由参数。
|
|
125
|
+
|
|
126
|
+
代理由 Intlayer 配置中的 `routing.enableProxy`(默认 `true`)控制。要完全禁用它:
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
// intlayer.config.ts
|
|
130
|
+
import { defineConfig } from "intlayer";
|
|
131
|
+
|
|
132
|
+
export default defineConfig({
|
|
133
|
+
routing: { enableProxy: false },
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
要在不进行单独 `intlayerProxy()` 调用的情况下自定义代理行为,请将 `proxy` 选项传递给主插件:
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api") } });
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
有关完整的路由行为参考,请参阅 [intlayerProxy 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/vite-intlayer/intlayerProxy.md)。
|
|
144
|
+
|
|
145
|
+
### 5. Bundled compiler (v9+)
|
|
146
|
+
|
|
147
|
+
当 `compiler.enabled` 为 `true` **且** `compiler.output` 在你的 Intlayer config 中设置时,`intlayer()` 会自动注册 `intlayerCompiler`。编译器提取直接写在组件文件中的内联内容声明,并在转换时将其写入字典。参见 [intlayerCompiler 文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/packages/vite-intlayer/intlayerCompiler.md)。
|
|
148
|
+
|
|
149
|
+
### 6. 构建优化
|
|
150
|
+
|
|
151
|
+
在生产构建期间,插件会添加:
|
|
152
|
+
|
|
153
|
+
- **intlayerOptimize** – Babel 转换,将 `useIntlayer('key')` 重写为 `useDictionary(hash)` 并注入直接的 JSON 导入。
|
|
154
|
+
- **intlayerPrune** – 从字典 JSON 中删除未使用的内容字段。
|
|
155
|
+
- **intlayerMinify** – 压缩字典 JSON,并可选地混淆字段名。
|
|
156
|
+
|
|
157
|
+
这些在开发模式下处于非活动状态。
|
|
158
|
+
|
|
159
|
+
## 已弃用的别名
|
|
45
160
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
161
|
+
| 已弃用的导出 | 替换项 |
|
|
162
|
+
| ---------------- | ---------- |
|
|
163
|
+
| `intlayerPlugin` | `intlayer` |
|
|
164
|
+
| `intLayerPlugin` | `intlayer` |
|
|
@@ -28,18 +28,91 @@ author: aymericzip
|
|
|
28
28
|
|
|
29
29
|
`intlayerPrune` Vite 插件用于对应用包中未使用的字典进行 tree-shaking 和裁剪。这样可以通过仅包含必要的多语言内容来减小最终包的体积。
|
|
30
30
|
|
|
31
|
-
##
|
|
31
|
+
## 使用
|
|
32
|
+
|
|
33
|
+
### 作为 `intlayer()` 的一部分(推荐)
|
|
34
|
+
|
|
35
|
+
通过您的 Intlayer 配置启用剪枝,主插件会处理一切:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
// intlayer.config.ts
|
|
39
|
+
import { defineConfig } from "intlayer";
|
|
40
|
+
|
|
41
|
+
export default defineConfig({
|
|
42
|
+
build: {
|
|
43
|
+
optimize: true, // 启用剪枝和最小化
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
// vite.config.ts
|
|
50
|
+
import { defineConfig } from "vite";
|
|
51
|
+
import { intlayer } from "vite-intlayer";
|
|
52
|
+
|
|
53
|
+
export default defineConfig({
|
|
54
|
+
plugins: [intlayer()],
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 独立使用
|
|
59
|
+
|
|
60
|
+
如果您是手动组合插件堆栈,`intlayerPrune` 和 `intlayerMinify` 共享一个 `PruneContext` 对象,该对象必须创建一次并传递给两者:
|
|
32
61
|
|
|
33
62
|
```ts
|
|
34
|
-
// vite.config.ts
|
|
63
|
+
// vite.config.ts
|
|
35
64
|
import { defineConfig } from "vite";
|
|
36
|
-
import {
|
|
65
|
+
import { intlayerPrune, intlayerMinify } from "vite-intlayer";
|
|
66
|
+
import { createPruneContext } from "@intlayer/babel";
|
|
67
|
+
import { getConfiguration } from "@intlayer/config/node";
|
|
68
|
+
|
|
69
|
+
const intlayerConfig = getConfiguration();
|
|
70
|
+
const pruneContext = createPruneContext();
|
|
37
71
|
|
|
38
72
|
export default defineConfig({
|
|
39
|
-
plugins: [
|
|
73
|
+
plugins: [
|
|
74
|
+
intlayerPrune(intlayerConfig, pruneContext),
|
|
75
|
+
intlayerMinify(intlayerConfig, pruneContext), // 可选,从同一上下文读取
|
|
76
|
+
],
|
|
40
77
|
});
|
|
41
78
|
```
|
|
42
79
|
|
|
43
|
-
##
|
|
80
|
+
## 它的工作原理
|
|
81
|
+
|
|
82
|
+
### 1. 使用情况分析 (buildStart)
|
|
83
|
+
|
|
84
|
+
在 `buildStart` 期间,`intlayerOptimize` 插件(也是 `intlayer()` 的一部分)扫描 `build.filesList` 中列出的每个组件源文件。对于每个 `useIntlayer('key')` 或 `getIntlayer('key')` 调用,它会准确记录访问了哪些字段,例如:
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
const { title, description } = useIntlayer("myDict");
|
|
88
|
+
// 记录: myDict → { title, description }
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
这在任何 `transform` 调用运行之前建立了 `pruneContext.fieldUsageMap`。
|
|
92
|
+
|
|
93
|
+
### 2. JSON 修剪 (transform, enforce: 'pre')
|
|
94
|
+
|
|
95
|
+
当 Vite 处理编译的字典 JSON 文件时,`intlayerPrune` 在 Vite 的内置 JSON → ESM 转换之前拦截它。它从 `pruneContext` 读取字段使用情况映射,并删除任何不在记录的使用集中的内容字段。
|
|
96
|
+
|
|
97
|
+
支持两种内容形状:
|
|
98
|
+
|
|
99
|
+
- **静态字典** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`。字段在 `translation` 内按语言环境修剪。
|
|
100
|
+
- **动态(按语言环境)字典** — 扁平化 `{ fieldA: ..., fieldB: ... }`。字段在顶级进行修剪。
|
|
101
|
+
|
|
102
|
+
### 3. Edge cases
|
|
103
|
+
|
|
104
|
+
如果字典的内容结构无法识别(例如,不寻常的嵌套形状),它会被添加到 `pruneContext.dictionariesWithEdgeCases` 中并**保持不变**。会记录一条警告。`intlayerMinify` 也会跳过这些字典。
|
|
105
|
+
|
|
106
|
+
### 4. Field-rename map
|
|
107
|
+
|
|
108
|
+
当剪枝成功时,`intlayerPrune` 也会写入 `pruneContext.dictionaryKeyToFieldRenameMap` — 一个从原始字段名到简短别名的映射。`intlayerMinify` 读取此映射以在输出 JSON 中重命名字段,而 `intlayerOptimize` 的 Babel 重命名传递相应地更新源文件中的属性访问。
|
|
109
|
+
|
|
110
|
+
## 激活条件
|
|
111
|
+
|
|
112
|
+
`intlayerPrune` **仅当**以下所有条件都为真时才会激活:
|
|
113
|
+
|
|
114
|
+
1. Vite 命令是 `build`。
|
|
115
|
+
2. `build.optimize` 是 `true`(或 `undefined`,在构建时默认为 `true`)。
|
|
116
|
+
3. 在您的 Intlayer 配置中 `build.purge` 是 `true`。
|
|
44
117
|
|
|
45
|
-
|
|
118
|
+
当 `editor.enabled` 是 `true` 时,它会自动**禁用**,因为编辑器需要完整的字典内容。
|
package/docs/zh/releases/v9.md
CHANGED
|
@@ -358,6 +358,18 @@ await dictionaryEndpoint(cms).pushDictionaries([myDictionary]);
|
|
|
358
358
|
|
|
359
359
|
---
|
|
360
360
|
|
|
361
|
+
## 自托管
|
|
362
|
+
|
|
363
|
+
Intlayer v9 提供一流的支持,使您可以通过单个命令运行自己的 Intlayer 实例。无需 Intlayer Cloud 账户。
|
|
364
|
+
|
|
365
|
+
```sh
|
|
366
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
安装程序下载 `docker-compose.yml` 和 `.env`,自动生成所需的密钥,并运行 `docker compose up -d`。一切内容 — dashboard、API、数据库、对象存储和事务性电子邮件 — 都在容器中本地运行。
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
361
373
|
## Migration notes from v8
|
|
362
374
|
|
|
363
375
|
If you are upgrading from v8, note that the v9 does not include breaking changes. But here are the key changes:
|
package/docs/zh/self_hosting.md
CHANGED
|
@@ -64,6 +64,32 @@ Chromium(用于 Puppeteer 屏幕截图生成)捆绑在后端镜像中——
|
|
|
64
64
|
|
|
65
65
|
## 快速开始
|
|
66
66
|
|
|
67
|
+
Pull 并运行已发布的镜像,提供您的 MongoDB Atlas 凭证和密钥:
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
docker run -d --name intlayer \
|
|
71
|
+
-p 3000:3000 \
|
|
72
|
+
-p 3100:3100 \
|
|
73
|
+
-p 9000:9000 \
|
|
74
|
+
-p 9001:9001 \
|
|
75
|
+
-v intlayer-data:/data \
|
|
76
|
+
-e DB_ID="<atlas-user>" \
|
|
77
|
+
-e DB_MDP="<atlas-password>" \
|
|
78
|
+
-e DB_CLUSTER="<cluster>.xxxxx.mongodb.net" \
|
|
79
|
+
-e BETTER_AUTH_SECRET="$(openssl rand -hex 32)" \
|
|
80
|
+
-e S3_SECRET_ACCESS_KEY="$(openssl rand -hex 16)" \
|
|
81
|
+
-e RESEND_API_KEY="<your-resend-key>" \
|
|
82
|
+
aymericzip/intlayer-selfhost
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
然后打开 **http://localhost:3000**。
|
|
86
|
+
|
|
87
|
+
> dashboard 在 `localhost` 上提供。请参阅 [限制](#limitations) — 已发布的镜像不支持自定义域名。
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 快速开始
|
|
92
|
+
|
|
67
93
|
```sh
|
|
68
94
|
curl -fsSL https://intlayer.org/install.sh | sh
|
|
69
95
|
```
|
|
@@ -99,7 +125,16 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
99
125
|
|
|
100
126
|
## 环境变量
|
|
101
127
|
|
|
102
|
-
|
|
128
|
+
### 必需
|
|
129
|
+
|
|
130
|
+
| Variable | Example | Description |
|
|
131
|
+
| ---------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
132
|
+
| `DB_ID` | `intlayer` | MongoDB Atlas 用户 |
|
|
133
|
+
| `DB_MDP` | _(your password)_ | MongoDB Atlas 密码 |
|
|
134
|
+
| `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | MongoDB Atlas 集群主机(在 `mongodb+srv://` URI 中使用) |
|
|
135
|
+
| `BETTER_AUTH_SECRET` | _(generated)_ | 用于会话签名的 32 字节密钥 |
|
|
136
|
+
| `S3_SECRET_ACCESS_KEY` | _(generated)_ | 捆绑 MinIO 的密钥 |
|
|
137
|
+
| `RESEND_API_KEY` | _(your key)_ | 通过 Resend 发送事务性邮件。除非你配置全局 SMTP 邮件器(见[全局邮件器](#global-mailer)),否则首次运行设置时为必需项 |
|
|
103
138
|
|
|
104
139
|
### 必需(自动生成或提示)
|
|
105
140
|
|
|
@@ -141,6 +176,26 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
141
176
|
|
|
142
177
|
---
|
|
143
178
|
|
|
179
|
+
### 全局邮件服务
|
|
180
|
+
|
|
181
|
+
默认情况下,所有事务性电子邮件都通过使用 `RESEND_API_KEY` 的 Resend 发送。自托管部署可以改为通过配置了环境变量的全局邮件服务路由**所有**电子邮件 — 包括非组织电子邮件,例如密码重置和魔法链接。
|
|
182
|
+
|
|
183
|
+
设置 `MAIL_PROVIDER` 以激活它。如果未设置,将使用默认的 Resend 邮件服务。
|
|
184
|
+
|
|
185
|
+
| 变量 | 示例 | 描述 |
|
|
186
|
+
| -------------------- | ------------------------------ | -------------------------------------------- |
|
|
187
|
+
| `MAIL_PROVIDER` | `smtp` | 全局传输:`smtp` 或 `resend`。留空使用默认值 |
|
|
188
|
+
| `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | 发件人标题。接受裸地址或 `Name <email>` 格式 |
|
|
189
|
+
| `MAIL_SMTP_HOST` | `smtp.acme.com` | SMTP 主机(当 `MAIL_PROVIDER=smtp` 时必需) |
|
|
190
|
+
| `MAIL_SMTP_PORT` | `587` | SMTP 端口(默认为 `587`) |
|
|
191
|
+
| `MAIL_SMTP_SECURE` | `false` | 隐式 TLS。对于端口 `465` 设置为 `true` |
|
|
192
|
+
| `MAIL_SMTP_USER` | _(你的用户名)_ | SMTP 用户名(可选;无身份验证中继可省略) |
|
|
193
|
+
| `MAIL_SMTP_PASSWORD` | _(你的密码)_ | SMTP 密码 |
|
|
194
|
+
|
|
195
|
+
> 优先级:组织自己的邮件服务(从**组织**仪表板配置)优先于全局邮件服务,全局邮件服务优先于默认的 Resend 密钥。
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
144
199
|
## 连接您的 Intlayer 项目
|
|
145
200
|
|
|
146
201
|
堆栈运行后,将您的项目指向自托管的后端和仪表盘,而不是 `intlayer.org`。
|
|
@@ -259,47 +314,11 @@ docker run --rm \
|
|
|
259
314
|
|
|
260
315
|
---
|
|
261
316
|
|
|
262
|
-
##
|
|
263
|
-
|
|
264
|
-
对于生产部署,请在应用和后端容器前放置一个反向代理,而不是直接暴露它们。
|
|
265
|
-
|
|
266
|
-
### Nginx 示例
|
|
267
|
-
|
|
268
|
-
```nginx
|
|
269
|
-
server {
|
|
270
|
-
listen 80;
|
|
271
|
-
server_name cms.example.com;
|
|
272
|
-
|
|
273
|
-
location / {
|
|
274
|
-
proxy_pass http://localhost:3000;
|
|
275
|
-
proxy_set_header Host $host;
|
|
276
|
-
proxy_set_header X-Real-IP $remote_addr;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
317
|
+
## 限制条件
|
|
279
318
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
location / {
|
|
285
|
-
proxy_pass http://localhost:3100;
|
|
286
|
-
proxy_set_header Host $host;
|
|
287
|
-
proxy_set_header X-Real-IP $remote_addr;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
更新以下 `.env` 变量以匹配您的公共域名:
|
|
293
|
-
|
|
294
|
-
```sh
|
|
295
|
-
BACKEND_URL=https://api.example.com
|
|
296
|
-
APP_URL=https://cms.example.com
|
|
297
|
-
DOMAIN=example.com
|
|
298
|
-
VITE_BACKEND_URL=https://api.example.com
|
|
299
|
-
VITE_DOMAIN=example.com
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
> `VITE_*` 变量在构建时被嵌入到仪表盘镜像中。如果在镜像构建后更改它们,您需要重建 `app` 镜像 (`docker compose build app`) 或使用运行时配置注入。
|
|
319
|
+
- **MongoDB 必须是外部的 (Atlas)。** 后端仅通过 `mongodb+srv://` 连接(由 `DB_ID` / `DB_MDP` / `DB_CLUSTER` 构建),因此不能使用普通的 `mongodb://host:27017` — 包括容器自己的捆绑 `mongod`。请提供一个 MongoDB Atlas 集群。
|
|
320
|
+
- **不支持自定义域名。** 所有面向浏览器的 `VITE_*` URL 都在构建时内联到应用中,发布的镜像带有 `localhost` 值。必须在 `http://localhost:3000` 上访问仪表板;在公共域上提供服务需要使用目标 URL 重新构建镜像,这在开箱即用时不受支持。
|
|
321
|
+
- **Email 需要工作的邮件程序。** 首次运行设置强制执行电子邮件验证,因此必须配置 `RESEND_API_KEY` 或 [全局 SMTP 邮件程序](#global-mailer)(`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`)。第一个管理员登录后,每个组织也可以从仪表板配置自己的 SMTP 或 Resend 邮件程序。
|
|
303
322
|
|
|
304
323
|
---
|
|
305
324
|
|
|
@@ -315,15 +334,6 @@ docker compose logs mongo
|
|
|
315
334
|
docker compose logs redis
|
|
316
335
|
```
|
|
317
336
|
|
|
318
|
-
### 仪表盘无法连接到 API
|
|
319
|
-
|
|
320
|
-
验证 `VITE_BACKEND_URL` 是否与后端可以从**浏览器**(而非 Docker 网络)访问的 URL 匹配。如果您更改了后端端口或添加了反向代理,请重建仪表盘镜像:
|
|
321
|
-
|
|
322
|
-
```sh
|
|
323
|
-
docker compose build app
|
|
324
|
-
docker compose up -d app
|
|
325
|
-
```
|
|
326
|
-
|
|
327
337
|
### 电子邮件未发送
|
|
328
338
|
|
|
329
339
|
默认情况下,所有出站电子邮件都会被 Mailpit 捕获。打开 `http://localhost:8025` 查看已发送的消息。要发送真实电子邮件,请在 `.env` 中设置 `MAIL_PROVIDER=resend` 和 `RESEND_API_KEY=<your-key>`,然后重启后端:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
3
|
updatedAt: 2026-05-31
|
|
4
|
-
title: "Angular
|
|
5
|
-
description: "告別 i18next。2026 年建構多語言 (i18n) Angular
|
|
4
|
+
title: "Angular 22 i18n - 翻譯您的應用程式的完整指南"
|
|
5
|
+
description: "告別 i18next。2026 年建構多語言 (i18n) Angular 22 應用程式的完整指南。使用 AI 代理翻譯並優化套件大小、SEO 和效能。"
|
|
6
6
|
keywords:
|
|
7
7
|
- 國際化
|
|
8
8
|
- 文件
|
|
@@ -13,8 +13,8 @@ slugs:
|
|
|
13
13
|
- doc
|
|
14
14
|
- environment
|
|
15
15
|
- angular
|
|
16
|
-
applicationTemplate: https://github.com/aymericzip/intlayer-angular-
|
|
17
|
-
applicationShowcase: https://intlayer-angular-
|
|
16
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-angular-22-template
|
|
17
|
+
applicationShowcase: https://intlayer-angular-22-template.vercel.app/
|
|
18
18
|
history:
|
|
19
19
|
- version: 8.9.0
|
|
20
20
|
date: 2026-05-04
|
|
@@ -56,7 +56,7 @@ author: aymericzip
|
|
|
56
56
|
<Tab label="程式碼" value="code">
|
|
57
57
|
|
|
58
58
|
<iframe
|
|
59
|
-
src="https://ide.intlayer.org/aymericzip/intlayer-angular-
|
|
59
|
+
src="https://ide.intlayer.org/aymericzip/intlayer-angular-22-template?file=intlayer.config.ts"
|
|
60
60
|
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
61
61
|
title="Demo CodeSandbox - 如何使用Intlayer進行應用程式國際化"
|
|
62
62
|
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
@@ -67,7 +67,7 @@ author: aymericzip
|
|
|
67
67
|
<Tab label="展示" value="demo">
|
|
68
68
|
|
|
69
69
|
<iframe
|
|
70
|
-
src="https://intlayer-angular-
|
|
70
|
+
src="https://intlayer-angular-22-template.vercel.app/"
|
|
71
71
|
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
72
72
|
title="Demo - intlayer-angular-template"
|
|
73
73
|
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
@@ -77,7 +77,7 @@ author: aymericzip
|
|
|
77
77
|
</Tab>
|
|
78
78
|
</Tabs>
|
|
79
79
|
|
|
80
|
-
在GitHub上查看 [應用程式模板](https://github.com/aymericzip/intlayer-angular-
|
|
80
|
+
在GitHub上查看 [應用程式模板](https://github.com/aymericzip/intlayer-angular-22-template)。
|
|
81
81
|
|
|
82
82
|
<Steps>
|
|
83
83
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/docs",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Intlayer documentation",
|
|
6
6
|
"keywords": [
|
|
@@ -73,13 +73,13 @@
|
|
|
73
73
|
"watch": "webpack --config ./webpack.config.ts --watch"
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@intlayer/config": "9.
|
|
77
|
-
"@intlayer/core": "9.
|
|
78
|
-
"@intlayer/types": "9.
|
|
76
|
+
"@intlayer/config": "9.2.0",
|
|
77
|
+
"@intlayer/core": "9.2.0",
|
|
78
|
+
"@intlayer/types": "9.2.0"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"@intlayer/api": "9.
|
|
82
|
-
"@intlayer/cli": "9.
|
|
81
|
+
"@intlayer/api": "9.2.0",
|
|
82
|
+
"@intlayer/cli": "9.2.0",
|
|
83
83
|
"@types/node": "26.1.2",
|
|
84
84
|
"@utils/ts-config": "1.0.4",
|
|
85
85
|
"@utils/ts-config-types": "1.0.4",
|