@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
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-07-08
|
|
3
|
+
updatedAt: 2026-07-08
|
|
4
|
+
title: Intlayer Analytics | 跟踪内容曝光并运行 A/B 测试
|
|
5
|
+
description: 探索 @intlayer/analytics 如何跟踪页面/区域设置浏览量和内容曝光,以及如何使用它对您的 Intlayer 内容运行 A/B 测试。
|
|
6
|
+
keywords:
|
|
7
|
+
- 分析 (Analytics)
|
|
8
|
+
- A/B 测试
|
|
9
|
+
- 受众 (Audience)
|
|
10
|
+
- 国际化 (Internationalization)
|
|
11
|
+
- 文档
|
|
12
|
+
- Intlayer
|
|
13
|
+
- Next.js
|
|
14
|
+
- JavaScript
|
|
15
|
+
- React
|
|
16
|
+
slugs:
|
|
17
|
+
- doc
|
|
18
|
+
- concept
|
|
19
|
+
- analytics
|
|
20
|
+
history:
|
|
21
|
+
- version: 9.0.0
|
|
22
|
+
date: 2026-07-08
|
|
23
|
+
changes: "Init doc — @intlayer/analytics 包,Provider/Node级别跟踪,A/B 测试,仪表板"
|
|
24
|
+
author: aymericzip
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Intlayer Analytics 文档
|
|
28
|
+
|
|
29
|
+
`@intlayer/analytics` 是一个可选的配套包,它可以告诉您**哪些内容实际显示给了您的访问者** —— 哪个页面、哪个区域设置(locale)以及哪个特定的翻译内容片段 —— 从而让您能够了解您的受众并**对内容运行 A/B 测试**。
|
|
30
|
+
|
|
31
|
+
## 目录
|
|
32
|
+
|
|
33
|
+
<TOC/>
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 跟踪内容
|
|
38
|
+
|
|
39
|
+
`@intlayer/analytics` 会批处理三种类型的匿名事件:
|
|
40
|
+
|
|
41
|
+
| 事件 (Event) | 捕获位置 | 它的作用 |
|
|
42
|
+
| ------------------ | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
43
|
+
| `page_view` | Provider 级别 (`IntlayerProvider`) | 会话在首次加载、路由更改或切换区域设置时查看了哪个页面和区域设置。 |
|
|
44
|
+
| `content_exposure` | Node 级别 (`useIntlayer` / 解释器插件) | 实际解析并显示了哪个字典键 (dictionary key) / 键路径 —— 并且,如果它是实验的一部分,具体是哪个**变体 (variant)**。 |
|
|
45
|
+
| `conversion` | 任何调用 `useConversion()` 的地方 | 将达成的目标(注册、点击、购买等)归因于该会话所暴露的 A/B 变体。 |
|
|
46
|
+
|
|
47
|
+
事件收集在内存中,并作为**大约每 20 秒一次的单一批量请求**发送 —— 而不是在每次击键或渲染时发送 —— 因此分析功能永远不会影响首次渲染时间,也不会在每次交互时增加网络请求。
|
|
48
|
+
|
|
49
|
+
## 它如何为内容的 A/B 测试提供支持
|
|
50
|
+
|
|
51
|
+
Intlayer 已经允许您声明内容 [变体 (Variants)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dynamic_dictionaries/index.md)(例如,一个具有 `control` 和 `black_friday` 变体的 `hero-banner` 字典)。`@intlayer/analytics` 完成了整个循环:
|
|
52
|
+
|
|
53
|
+
1. `getVariant(experimentKey, variants)` 确定性地将每个匿名会话分配给一个变体 —— 它是会话 ID 和实验键 (experiment key) 的纯函数,因此分配在**整个会话期间保持稳定**,并且在首次渲染之前**不需要服务器往返**(无闪烁,无布局偏移)。
|
|
54
|
+
2. 每个 `content_exposure` 事件都会携带所显示的 `variant`。
|
|
55
|
+
3. `useConversion()` 允许您将目标(例如 `"cta_click"`)归因于该变体。
|
|
56
|
+
4. 仪表板的实验结果端点 (endpoint) 比较各变体的转化率,包括统计显著性(z 检验)。
|
|
57
|
+
|
|
58
|
+
## 安装
|
|
59
|
+
|
|
60
|
+
`@intlayer/analytics` 是一个**对等 (peer)、可选**的依赖项 —— 框架包永远不会自动安装它。请将其与 `intlayer` 一起添加:
|
|
61
|
+
|
|
62
|
+
```bash packageManager="npm"
|
|
63
|
+
npm install @intlayer/analytics
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```bash packageManager="yarn"
|
|
67
|
+
yarn add @intlayer/analytics
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```bash packageManager="pnpm"
|
|
71
|
+
pnpm add @intlayer/analytics
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```bash packageManager="bun"
|
|
75
|
+
bun add @intlayer/analytics
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
如果您不安装它,每个集成点都将解析为空操作 (no-op) —— 请参阅下文的[未安装时零成本](#未安装时零成本)。
|
|
79
|
+
|
|
80
|
+
## 配置
|
|
81
|
+
|
|
82
|
+
Analytics **重用了现有的 `editor` 配置块** —— 没有单独的 `analytics` 配置模式需要填写:
|
|
83
|
+
|
|
84
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
85
|
+
import type { IntlayerConfig } from "intlayer";
|
|
86
|
+
|
|
87
|
+
const config: IntlayerConfig = {
|
|
88
|
+
editor: {
|
|
89
|
+
backendURL: "https://back.intlayer.org", // 也用作分析数据摄取端点
|
|
90
|
+
clientId: "your-client-id", // 也用作分析项目密钥
|
|
91
|
+
clientSecret: "your-client-secret",
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export default config;
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
- `editor.backendURL` — 发送分析事件的基本 URL (`POST {backendURL}/api/analytics/events`)。
|
|
99
|
+
- `editor.clientId` — 归因于每个摄取事件的公共项目密钥。它也充当**启用开关**:在配置 `clientId` 之前,分析将保持完全禁用(并被摇树优化去除,见下文)。
|
|
100
|
+
|
|
101
|
+
如果您自托管 Intlayer,分析会自动指向您自己的实例,因为它共享 `editor.backendURL`。
|
|
102
|
+
|
|
103
|
+
## 框架支持
|
|
104
|
+
|
|
105
|
+
Analytics 已连接到 `react-intlayer` 共享的 `IntlayerProvider` 中,因此今天只要使用该 provider 的任何地方都可以使用它:
|
|
106
|
+
|
|
107
|
+
| 框架 | 状态 |
|
|
108
|
+
| -------------------------------------------------------- | -------------------------------------------------------------------------- |
|
|
109
|
+
| React | ✅ 可用 |
|
|
110
|
+
| Next.js (`next-intlayer`) | ✅ 可用 (通过 `react-intlayer`) |
|
|
111
|
+
| React Native / Expo (`react-native-intlayer`) | ✅ 可用 (通过 `react-intlayer`) |
|
|
112
|
+
| Vue, Svelte, Angular, Solid, Preact, Lit, Astro, Vanilla | 🚧 计划中 — 相同的客户端,遵循 `@intlayer/editor` 推出模式的提供商级别绑定 |
|
|
113
|
+
|
|
114
|
+
## 使用方法
|
|
115
|
+
|
|
116
|
+
### 自动 Provider 级别跟踪
|
|
117
|
+
|
|
118
|
+
无需更改代码。一旦安装了 `@intlayer/analytics` 并配置了 `editor.clientId`,`IntlayerProvider` 会自动:
|
|
119
|
+
|
|
120
|
+
- 在挂载时初始化分析客户端,
|
|
121
|
+
- 在初始加载时记录一个 `page_view`,
|
|
122
|
+
- 在每次更改区域设置时记录一个 `page_view`,
|
|
123
|
+
- 启动约 20 秒的刷新循环,并在卸载/关闭选项卡时刷新任何剩余事件(通过 `navigator.sendBeacon`,回退至 `fetch(..., { keepalive: true })`)。
|
|
124
|
+
|
|
125
|
+
### 自动 Node 级别跟踪
|
|
126
|
+
|
|
127
|
+
每次 `useIntlayer` 解析用于显示的内容片段时,解释器都会为该确切的 `dictionaryKey` + 键路径 + 区域设置报告一个 `content_exposure` 事件 —— 同样,无需更改代码。在刷新窗口内同一节点的重复曝光会合并为一个带有 `count`(计数)的事件,因此重新渲染 50 次的列表不会发送 50 个事件。
|
|
128
|
+
|
|
129
|
+
### 跟踪 A/B 测试的转化
|
|
130
|
+
|
|
131
|
+
使用 `useConversion()` 将目标归因于会话看到的变体:
|
|
132
|
+
|
|
133
|
+
```tsx fileName="CTAButton.tsx" codeFormat="tsx"
|
|
134
|
+
import { useConversion } from "react-intlayer";
|
|
135
|
+
|
|
136
|
+
const CTAButton = () => {
|
|
137
|
+
const trackConversion = useConversion();
|
|
138
|
+
|
|
139
|
+
return (
|
|
140
|
+
<button
|
|
141
|
+
onClick={() =>
|
|
142
|
+
trackConversion({
|
|
143
|
+
experimentKey: "homepage-hero",
|
|
144
|
+
variant: "black_friday",
|
|
145
|
+
goal: "cta_click",
|
|
146
|
+
})
|
|
147
|
+
}
|
|
148
|
+
>
|
|
149
|
+
开始使用
|
|
150
|
+
</button>
|
|
151
|
+
);
|
|
152
|
+
};
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 在客户端解析变体
|
|
156
|
+
|
|
157
|
+
```tsx fileName="useHeroVariant.ts" codeFormat="tsx"
|
|
158
|
+
import { getGlobalAnalyticsClient } from "@intlayer/analytics/client";
|
|
159
|
+
|
|
160
|
+
const client = getGlobalAnalyticsClient();
|
|
161
|
+
const variant = client?.getVariant("homepage-hero", [
|
|
162
|
+
"control",
|
|
163
|
+
"black_friday",
|
|
164
|
+
]);
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## 隐私与性能
|
|
168
|
+
|
|
169
|
+
- **设计上匿名**:会话由轮换 ID 标识;后端永远只存储该 ID 的 **SHA-256 哈希值** —— 从不存储原始 ID,从不存储 IP 地址。
|
|
170
|
+
- **位置是粗略的**:只有一个国家/地区代码,该代码从 CDN 地理位置标头(`cf-ipcountry`、`x-vercel-ip-country` 等)派生 —— 不会读取或存储 IP。
|
|
171
|
+
- **默认情况下 URL 排除搜索参数**,因此永远不会捕获查询字符串。
|
|
172
|
+
- **采样**:`sampleRate` 允许您在高流量应用程序中仅保留一小部分内容曝光事件。
|
|
173
|
+
- **批处理**:大约每 20 秒发送一个请求 (`flushInterval`),或者如果缓冲区满了则提前发送 (`maxBufferSize`) —— 永远不会每个事件发送一个请求。
|
|
174
|
+
|
|
175
|
+
### 未安装时零成本
|
|
176
|
+
|
|
177
|
+
`@intlayer/analytics` 遵循与 `@intlayer/editor` 完全相同的可选依赖模式:
|
|
178
|
+
|
|
179
|
+
- 每个集成点通过**包裹在 `try/catch` 中的动态 `import()`** 加载包 —— 从未安装 `@intlayer/analytics` 的应用程序永远不会支付包大小或运行时成本,也永远不会看到错误;
|
|
180
|
+
- 一个编译时环境变量(`INTLAYER_ANALYTICS_ENABLED`),当没有配置 `editor.clientId` 时,它会由 `@intlayer/config` 自动设置为 `'false'`,允许打包器 (bundlers) **将整个集成作为死代码消除 (dead-code-eliminate)**;
|
|
181
|
+
- 分析在 Intlayer 编辑器/CMS 预览 iframe 中被禁用,因此编辑器会话永远不会算作真实流量。
|
|
182
|
+
|
|
183
|
+
## 仪表板:Analytics 页面
|
|
184
|
+
|
|
185
|
+
一旦您的项目收集了事件,[Intlayer 仪表板](https://app.intlayer.org/analytics) 中的 **Analytics(分析)** 页面(选择项目后在侧边栏中可见)会显示:
|
|
186
|
+
|
|
187
|
+
- **活跃用户** — 选定滚动窗口(7 / 30 / 90 天)内的独立访客。
|
|
188
|
+
- **今日用户** 和 **过去 7 天的用户**。
|
|
189
|
+
- 选定窗口内的 **页面浏览量**。
|
|
190
|
+
- 每日独立访客的 **演变图**。
|
|
191
|
+
- **区域设置 (Locales)** 和 **位置 (Location)** 细分选项卡,按区域设置和国家/地区对您的受众进行排名。
|
|
192
|
+
|
|
193
|
+
## 后端 API 参考
|
|
194
|
+
|
|
195
|
+
所有读取端点都需要身份验证;数据摄取是公开的,并且由主体中的 `clientId` 进行归因。
|
|
196
|
+
|
|
197
|
+
| 方法 (Method) | 端点 (Endpoint) | 描述 |
|
|
198
|
+
| ------------- | ------------------------------------------- | ---------------------------------------------------------- |
|
|
199
|
+
| `POST` | `/api/analytics/events` | 摄取一批事件(公开,由主体中的 `clientId` 归因)。 |
|
|
200
|
+
| `GET` | `/api/analytics/overview` | 认证项目的页面/区域设置总数。 |
|
|
201
|
+
| `GET` | `/api/analytics/audience?days=30` | 独立访客,页面浏览量,每日序列,区域设置 + 国家/地区分类。 |
|
|
202
|
+
| `GET` | `/api/analytics/content-stats` | 每个内容的曝光总数,按字典键 / 键路径 / 区域设置分组。 |
|
|
203
|
+
| `GET` | `/api/analytics/experiments/:experimentKey` | A/B 实验中每个变体的转化率和统计显著性。 |
|
|
204
|
+
|
|
205
|
+
您还可以使用 [CMS SDK](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md) 以编程方式调用这些端点:
|
|
206
|
+
|
|
207
|
+
```ts fileName="analytics.ts"
|
|
208
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
209
|
+
import { analyticsEndpoint } from "@intlayer/api/analytics";
|
|
210
|
+
|
|
211
|
+
const cms = createIntlayerCMS();
|
|
212
|
+
|
|
213
|
+
const { data: audience } = await analyticsEndpoint(cms).getAudience(30);
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## 有用的链接
|
|
217
|
+
|
|
218
|
+
- [动态字典 - 集合与变体 (Collections & Variants)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dynamic_dictionaries/index.md)
|
|
219
|
+
- [Intlayer CMS - CMS SDK](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md)
|
|
220
|
+
- [Intlayer 可视化编辑器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)
|
|
221
|
+
- [配置参考](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)
|
|
222
|
+
- [自托管指南](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/self_hosting.md)
|
package/docs/zh/autoFill.md
CHANGED
|
@@ -75,11 +75,30 @@ Intlayer 还将考虑以下自动填充指令:
|
|
|
75
75
|
|
|
76
76
|
使用路径选项写入另一个文件时,填充机制通过内容声明文件之间的 _主从_ 关系工作。主(master)文件作为真实来源,当它被更新时,Intlayer 将自动将这些更改应用到由路径指定的派生(填充)声明文件。
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
### 按语言环境自定义
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
您也可以使用对象为每个语言环境自定义行为:
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
```ts fileName="intlayer.config.ts"
|
|
83
|
+
const config: IntlayerConfig = {
|
|
84
|
+
content: {
|
|
85
|
+
internationalization: {
|
|
86
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.POLISH],
|
|
87
|
+
defaultLocale: Locales.ENGLISH,
|
|
88
|
+
requiredLocales: [Locales.ENGLISH], // 建议设置以避免在 t 函数中出现"Property 'pl' is missing in type '{ en: string; xxx }"错误
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
dictionary: {
|
|
92
|
+
fill: {
|
|
93
|
+
en: true, // 为英文填充并编辑当前文件
|
|
94
|
+
fr: "./translations/fr.json", // 为法文创建单独的文件
|
|
95
|
+
es: false, // 禁用西班牙文的填充
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
这允许您在同一项目中为不同的语言环境设置不同的填充行为。
|
|
83
102
|
|
|
84
103
|
```ts fileName="src/components/example/example.content.ts"
|
|
85
104
|
import { Locales, type Dictionary } from "intlayer";
|
|
@@ -87,18 +106,18 @@ import { Locales, type Dictionary } from "intlayer";
|
|
|
87
106
|
const exampleContent = {
|
|
88
107
|
key: "example",
|
|
89
108
|
locale: Locales.ENGLISH,
|
|
90
|
-
|
|
109
|
+
fill: "./example.content.json",
|
|
91
110
|
content: {
|
|
92
|
-
contentExample: "
|
|
111
|
+
contentExample: "This is an example of content",
|
|
93
112
|
},
|
|
94
113
|
} satisfies Dictionary;
|
|
95
114
|
|
|
96
115
|
export default exampleContent;
|
|
97
116
|
```
|
|
98
117
|
|
|
99
|
-
|
|
118
|
+
这是一个[按语言环境的内容声明文件](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/per_locale_file.md),使用了 `fill` 指令。
|
|
100
119
|
|
|
101
|
-
|
|
120
|
+
然后,当您运行以下命令时:
|
|
102
121
|
|
|
103
122
|
```bash packageManager="npm"
|
|
104
123
|
npx intlayer fill --file 'src/components/example/example.content.ts'
|
|
@@ -116,7 +135,7 @@ pnpm intlayer fill --file 'src/components/example/example.content.ts'
|
|
|
116
135
|
bun x intlayer fill --file 'src/components/example/example.content.ts'
|
|
117
136
|
```
|
|
118
137
|
|
|
119
|
-
Intlayer
|
|
138
|
+
Intlayer 将自动在 `src/components/example/example.content.json` 生成派生声明文件,填充主文件中尚未声明的所有语言环境。
|
|
120
139
|
|
|
121
140
|
```json5 fileName="src/components/example/example.content.json"
|
|
122
141
|
{
|
|
@@ -133,7 +152,7 @@ Intlayer 将自动生成派生的声明文件,路径为 `src/components/exampl
|
|
|
133
152
|
}
|
|
134
153
|
```
|
|
135
154
|
|
|
136
|
-
|
|
155
|
+
之后,两个声明文件将被合并为一个单一字典,可以使用标准的 `useIntlayer("example")` hook (react) / composable (vue) 访问。
|
|
137
156
|
|
|
138
157
|
## 全局配置
|
|
139
158
|
|
package/docs/zh/configuration.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-13
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-08-06
|
|
4
4
|
title: 配置
|
|
5
5
|
description: 了解如何为您的应用程序配置 Intlayer。了解可用于根据您的需求自定义 Intlayer 的各种设置和选项。
|
|
6
6
|
keywords:
|
|
@@ -14,6 +14,9 @@ slugs:
|
|
|
14
14
|
- concept
|
|
15
15
|
- configuration
|
|
16
16
|
history:
|
|
17
|
+
- version: 9.1.3
|
|
18
|
+
date: 2026-08-06
|
|
19
|
+
changes: "将 `routing.enableProxy` 改为三态:未设置(auto)、`true`、`false`"
|
|
17
20
|
- version: 9.0.0
|
|
18
21
|
date: 2026-07-11
|
|
19
22
|
changes: "添加 `analytics` 配置"
|
|
@@ -235,6 +238,18 @@ const config: IntlayerConfig = {
|
|
|
235
238
|
*/
|
|
236
239
|
mode: "prefix-no-default",
|
|
237
240
|
|
|
241
|
+
/**
|
|
242
|
+
* 启用 Intlayer 语言环境路由代理(中间件)。
|
|
243
|
+
* 负责在 dev、preview 和 SSR 中进行语言环境检测、重定向和重写。
|
|
244
|
+
* - 未设置(auto):dev 和 preview 服务器忽略 Cookie 和请求头中存储的语言环境,
|
|
245
|
+
* 保持路由由 URL 驱动。前缀仍会解析,语言环境仍会持久化,
|
|
246
|
+
* Accept-Language 检测仍然生效。生产环境下的行为与 `true` 相同。
|
|
247
|
+
* - true:在所有环境中启用完整行为。
|
|
248
|
+
* - false:不进行语言环境路由。
|
|
249
|
+
* 默认值:undefined(auto)
|
|
250
|
+
*/
|
|
251
|
+
enableProxy: undefined,
|
|
252
|
+
|
|
238
253
|
/**
|
|
239
254
|
* 用户选择的区域设置存储在哪里。
|
|
240
255
|
* 选项:'cookie', 'localStorage', 'sessionStorage', 'header' 或这些选项的数组。
|
|
@@ -716,13 +731,14 @@ export default config;
|
|
|
716
731
|
|
|
717
732
|
控制路由行为的设置,包括 URL 结构、区域设置存储和中间件管理。
|
|
718
733
|
|
|
719
|
-
| 字段
|
|
720
|
-
|
|
|
721
|
-
| `mode`
|
|
722
|
-
| `
|
|
723
|
-
| `
|
|
724
|
-
| `
|
|
725
|
-
| `
|
|
734
|
+
| 字段 | 说明 | 类型 | 默认值 | 示例 | 备注 |
|
|
735
|
+
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
736
|
+
| `mode` | 区域设置管理的 URL 路由模式。 | `'prefix-no-default'` | <br/> `'prefix-all'` | <br/> `'no-prefix'` | <br/> `'search-params'` | `'prefix-no-default'` | `'prefix-no-default'`: `/dashboard` (en) 或 `/fr/dashboard` (fr)。 `'prefix-all'`: `/en/dashboard` 。 `'no-prefix'`: 区域设置以其他方式管理。 `'search-params'`: `/dashboard?locale=fr` | 不影响 cookie 管理或本地存储。 |
|
|
737
|
+
| `enableProxy` | 启用 Intlayer 语言环境路由代理(中间件)。 | `boolean` | <br/> `undefined` | `undefined`(auto) | `true` | • 未设置(auto):dev 和 preview 服务器忽略 Cookie/请求头中存储的语言环境作为重定向来源;前缀、持久化和 `Accept-Language` 检测仍然生效。生产环境下的行为与 `true` 相同。<br/>• `true`:在任何地方都启用完整行为。<br/>• `false`:不进行语言环境路由。在 Next.js 中,`intlayerProxy` 中间件将变为直通。 |
|
|
738
|
+
| `storage` | 客户端区域设置存储的配置。 | `false` | <br/> `'cookie'` | <br/> `'localStorage'` | <br/> `'sessionStorage'` | <br/> `'header'` | <br/> `CookiesAttributes` | <br/> `StorageAttributes` | <br/> `Array` | `['cookie', 'header']` | `'localStorage'` <br/> `[{ type: 'cookie', name: 'custom-locale', secure: true }]` | 参阅下方的存储参数表。 |
|
|
739
|
+
| `basePath` | 应用程序 URL 的基础路径。 | `string` | `''` | `'/my-app'` | 如果您的应用程序位于 `https://example.com/my-app`,则 basePath 为 `'/my-app'`,指向 URL 为 `https://example.com/my-app/en` 。 |
|
|
740
|
+
| `rewrite` | 自定义 URL 重写规则,用于覆盖特定路径的默认路由模式。支持动态参数 `[param]`。 | `Record<string, StrictModeLocaleMap<string>>` | `undefined` | 见下方示例 | • 重写规则优先级高于 `mode`。<br/>• 与 Next.js 和 Vite 配合。 <br/>• `getLocalizedUrl()` 自动应用适当的规则。<br/>• 见 [自定义 URL 重写](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/custom_url_rewrites.md)。 |
|
|
741
|
+
| `domains` | 将区域设置映射到域主机名以进行基于域的路由。设置后,区域设置的 URL 将使用该域作为基础(绝对 URL),并且不会向路径添加区域设置前缀。 | `Partial<Record<Locale, string>>` | `undefined` | `{ zh: 'intlayer.zh', fr: 'intlayer.org' }` | • 如果主机名中未包含,默认协议为 `https://`。<br/>• 域本身标识区域设置,因此不会添加 `/zh/` 前缀。<br/>• `getLocalizedUrl('/', 'zh')` 返回 `https://intlayer.zh/`。 |
|
|
726
742
|
|
|
727
743
|
**`rewrite` 示例**:
|
|
728
744
|
|
|
@@ -25,6 +25,8 @@ author: aymericzip
|
|
|
25
25
|
|
|
26
26
|
# 文件内容 / 在 Intlayer 中嵌入文件
|
|
27
27
|
|
|
28
|
+
在 Intlayer 中,`file` 函数允许将外部文件内容嵌入到字典中。这种方法确保 Intlayer 识别源文件,从而与 Intlayer Visual Editor 和 CMS 实现无缝集成。
|
|
29
|
+
|
|
28
30
|
## 文件嵌入的工作原理
|
|
29
31
|
|
|
30
32
|
在 Intlayer 中,`file` 函数允许将外部文件内容嵌入到字典中。这种方法确保 Intlayer 识别源文件,实现与 Intlayer 可视化编辑器和 CMS 的无缝集成。与直接使用 `import`、`require` 或 `fs` 文件读取方法不同,使用 `file` 会将文件与字典关联,使 Intlayer 能够在文件被编辑时动态跟踪和更新内容。
|
|
@@ -64,6 +64,53 @@ export default firstDictionary;
|
|
|
64
64
|
}
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
+
### 使用 Nest 进行引用
|
|
68
|
+
|
|
69
|
+
现在,创建另一个内容模块,使用 `nest` 函数来引用上述内容。您可以引用整个内容或特定的嵌套值:
|
|
70
|
+
|
|
71
|
+
```typescript fileName="secondDictionary.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
|
|
72
|
+
import { nest, type Dictionary } from "intlayer";
|
|
73
|
+
|
|
74
|
+
const myNestingContent = {
|
|
75
|
+
key: "key_of_my_second_dictionary",
|
|
76
|
+
content: {
|
|
77
|
+
// 引用整个字典:
|
|
78
|
+
fullNestedContent: nest("key_of_my_first_dictionary"),
|
|
79
|
+
// 引用特定的嵌套值:
|
|
80
|
+
partialNestedContent: nest(
|
|
81
|
+
"key_of_my_first_dictionary",
|
|
82
|
+
"subContent.contentNumber"
|
|
83
|
+
),
|
|
84
|
+
},
|
|
85
|
+
} satisfies Dictionary;
|
|
86
|
+
|
|
87
|
+
export default myNestingContent;
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```json fileName="secondDictionary.content.json" contentDeclarationFormat="json"
|
|
91
|
+
{
|
|
92
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
93
|
+
"key": "key_of_my_second_dictionary",
|
|
94
|
+
"content": {
|
|
95
|
+
"fullNestedContent": {
|
|
96
|
+
"nodeType": "nested",
|
|
97
|
+
"nested": {
|
|
98
|
+
"dictionaryKey": "key_of_my_first_dictionary"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"partialNestedContent": {
|
|
102
|
+
"nodeType": "nested",
|
|
103
|
+
"nested": {
|
|
104
|
+
"dictionaryKey": "key_of_my_first_dictionary",
|
|
105
|
+
"path": "subContent.contentNumber"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
作为第二个参数,您可以指定该内容中嵌套值的路径。如果未提供路径,则返回引用字典的全部内容。
|
|
113
|
+
|
|
67
114
|
## 设置嵌套
|
|
68
115
|
|
|
69
116
|
<Tabs group="framework">
|
|
@@ -258,36 +305,6 @@ document.getElementById("nested")!.textContent = content.partialNestedContent;
|
|
|
258
305
|
</Tab>
|
|
259
306
|
</Tabs>
|
|
260
307
|
|
|
261
|
-
## 在 React Intlayer 中使用嵌套
|
|
262
|
-
|
|
263
|
-
要在 React 组件中使用嵌套内容,可以利用 `react-intlayer` 包中的 `useIntlayer` 钩子。此钩子根据指定的键检索正确的内容。以下是如何使用它的示例:
|
|
264
|
-
|
|
265
|
-
```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
|
|
266
|
-
import type { FC } from "react";
|
|
267
|
-
import { useIntlayer } from "react-intlayer";
|
|
268
|
-
|
|
269
|
-
const NestComponent: FC = () => {
|
|
270
|
-
const { fullNestedContent, partialNestedContent } = useIntlayer(
|
|
271
|
-
"key_of_my_second_dictionary"
|
|
272
|
-
);
|
|
273
|
-
|
|
274
|
-
return (
|
|
275
|
-
<div>
|
|
276
|
-
<p>
|
|
277
|
-
Full Nested Content: {JSON.stringify(fullNestedContent)}
|
|
278
|
-
{/* 输出: {"content": "content", "subContent": {"contentNumber": 0, "contentString": "string"}} */}
|
|
279
|
-
</p>
|
|
280
|
-
<p>
|
|
281
|
-
Partial Nested Value: {partialNestedContent}
|
|
282
|
-
{/* 输出: 0 */}
|
|
283
|
-
</p>
|
|
284
|
-
</div>
|
|
285
|
-
);
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
export default NestComponent;
|
|
289
|
-
```
|
|
290
|
-
|
|
291
308
|
## 其他资源
|
|
292
309
|
|
|
293
310
|
有关配置和使用的更多详细信息,请参考以下资源:
|