@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 отслеживает просмотры страниц/локалей и показы контента, а также как использовать это для проведения A/B-тестирования вашего контента Intlayer.
|
|
6
|
+
keywords:
|
|
7
|
+
- Analytics
|
|
8
|
+
- A/B-тестирование
|
|
9
|
+
- Аудитория
|
|
10
|
+
- Интернационализация
|
|
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, отслеживание на уровне провайдера/узла, A/B-тестирование, дашборд"
|
|
24
|
+
author: aymericzip
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Документация Intlayer Analytics
|
|
28
|
+
|
|
29
|
+
`@intlayer/analytics` — это дополнительный пакет, который показывает, **какой контент на самом деле видят** ваши посетители (какая страница, в какой локали и какой именно фрагмент переведенного контента), чтобы вы могли лучше понимать свою аудиторию и **проводить A/B-тестирование контента**.
|
|
30
|
+
|
|
31
|
+
## Содержание
|
|
32
|
+
|
|
33
|
+
<TOC/>
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Что отслеживается
|
|
38
|
+
|
|
39
|
+
`@intlayer/analytics` объединяет в пакеты три типа анонимных событий:
|
|
40
|
+
|
|
41
|
+
| Событие | Где фиксируется | О чем оно говорит |
|
|
42
|
+
| ------------------ | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
43
|
+
| `page_view` | На уровне провайдера (`IntlayerProvider`) | Какую страницу и локаль просмотрел пользователь при начальной загрузке, смене маршрута или смене локали. |
|
|
44
|
+
| `content_exposure` | На уровне узла (`useIntlayer` / плагины) | Какой ключ словаря / путь к ключу был фактически разрешен и отображен — и, если это часть эксперимента, какой **вариант**. |
|
|
45
|
+
| `conversion` | Везде, где вызывается `useConversion()` | Достижение цели (регистрация, клик, покупка...), связанное с A/B-вариантом, который видел пользователь в этой сессии. |
|
|
46
|
+
|
|
47
|
+
События собираются в памяти и отправляются как **один пакетный запрос примерно каждые 20 секунд** — а не при каждом нажатии клавиши или рендеринге — поэтому аналитика никогда не влияет на время первого рендеринга и не добавляет запросы на каждое взаимодействие.
|
|
48
|
+
|
|
49
|
+
## Как это работает для A/B-тестирования контента
|
|
50
|
+
|
|
51
|
+
Intlayer уже позволяет вам объявлять [Варианты](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dynamic_dictionaries/index.md) контента (например, словарь `hero-banner` с вариантами `control` и `black_friday`). `@intlayer/analytics` замыкает цикл:
|
|
52
|
+
|
|
53
|
+
1. `getVariant(experimentKey, variants)` детерминированно назначает каждую анонимную сессию варианту — это чистая функция от ID сессии и ключа эксперимента, поэтому назначение **стабильно на протяжении всей сессии** и не требует **серверных запросов** до первого рендеринга (без мерцания и сдвигов макета).
|
|
54
|
+
2. Каждое событие `content_exposure` содержит показанный `variant`.
|
|
55
|
+
3. `useConversion()` позволяет связать цель (например, `"cta_click"`) с этим вариантом.
|
|
56
|
+
4. Эндпоинт результатов экспериментов в дашборде сравнивает коэффициенты конверсии по вариантам, включая статистическую значимость (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
|
+
Аналитика **повторно использует существующий блок конфигурации `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` — открытый ключ проекта, присваиваемый каждому принятому событию. Он также действует как **переключатель включения**: аналитика остается полностью отключенной (и удаляется при tree-shaking, см. ниже), пока не настроен `clientId`.
|
|
100
|
+
|
|
101
|
+
Если вы самостоятельно размещаете (self-host) Intlayer, аналитика автоматически указывает на ваш собственный экземпляр, поскольку она использует общий `editor.backendURL`.
|
|
102
|
+
|
|
103
|
+
## Поддержка фреймворков
|
|
104
|
+
|
|
105
|
+
Аналитика встроена в общий `IntlayerProvider` из `react-intlayer`, поэтому она доступна уже сегодня везде, где используется этот провайдер:
|
|
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
|
+
### Автоматическое отслеживание на уровне провайдера
|
|
117
|
+
|
|
118
|
+
Никаких изменений в коде не требуется. Как только установлен `@intlayer/analytics` и настроен `editor.clientId`, `IntlayerProvider` автоматически:
|
|
119
|
+
|
|
120
|
+
- инициализирует клиент аналитики при монтировании,
|
|
121
|
+
- записывает `page_view` при начальной загрузке,
|
|
122
|
+
- записывает `page_view` при каждой смене локали,
|
|
123
|
+
- запускает цикл очистки (flush) с интервалом около 20 с и отправляет оставшиеся события при размонтировании / закрытии вкладки (через `navigator.sendBeacon`, с откатом на `fetch(..., { keepalive: true })`).
|
|
124
|
+
|
|
125
|
+
### Автоматическое отслеживание на уровне узла
|
|
126
|
+
|
|
127
|
+
Каждый раз, когда `useIntlayer` разрешает фрагмент контента для отображения, интерпретатор сообщает о событии `content_exposure` для этого точного `dictionaryKey` + пути к ключу + локали — опять же, никаких изменений в коде не требуется. Повторяющиеся показы одного и того же узла в пределах окна очистки объединяются в одно событие со счетчиком (`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; сервер когда-либо сохраняет только **SHA-256 хэш** этого id — никогда сам 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
|
+
- каждая точка интеграции загружает пакет через **динамический `import()`, обернутый в `try/catch`** — приложение, которое никогда не устанавливает `@intlayer/analytics`, не увеличивает размер сборки (bundle) и не тратит ресурсы во время выполнения, а также никогда не видит ошибок;
|
|
180
|
+
- переменная окружения времени компиляции (`INTLAYER_ANALYTICS_ENABLED`), автоматически устанавливаемая в `'false'` пакетом `@intlayer/config`, когда не настроен `editor.clientId`, позволяет бандлерам **удалять весь код интеграции (dead-code-eliminate)**;
|
|
181
|
+
- аналитика отключена внутри iframe предварительного просмотра редактора/CMS Intlayer, поэтому сессии в редакторе никогда не учитываются как реальный трафик.
|
|
182
|
+
|
|
183
|
+
## Дашборд: Страница Analytics
|
|
184
|
+
|
|
185
|
+
Как только ваш проект соберет события, страница **Analytics** в [дашборде Intlayer](https://app.intlayer.org/analytics) (видна в боковой панели после выбора проекта) покажет:
|
|
186
|
+
|
|
187
|
+
- **Активные пользователи** — уникальные посетители за выбранное скользящее окно (7 / 30 / 90 дней).
|
|
188
|
+
- **Пользователи сегодня** и **пользователи за последние 7 дней**.
|
|
189
|
+
- **Просмотры страниц** за выбранное окно.
|
|
190
|
+
- **График динамики** уникальных посетителей по дням.
|
|
191
|
+
- Вкладки с разбивкой по **Локалям** и **Местоположению**, ранжирующие вашу аудиторию по локали и по стране.
|
|
192
|
+
|
|
193
|
+
## Справочник API бэкенда
|
|
194
|
+
|
|
195
|
+
Все эндпоинты для чтения требуют аутентификации; прием данных публичный и ассоциируется по `clientId` в теле запроса.
|
|
196
|
+
|
|
197
|
+
| Метод | Эндпоинт | Описание |
|
|
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/ru/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
|
+
- [Динамические словари - Коллекции и варианты](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/dynamic_dictionaries/index.md)
|
|
219
|
+
- [Intlayer CMS - CMS SDK](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md)
|
|
220
|
+
- [Визуальный редактор Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_visual_editor.md)
|
|
221
|
+
- [Справочник по конфигурации](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md)
|
|
222
|
+
- [Руководство по самостоятельному хостингу (Self-Hosting)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/self_hosting.md)
|
package/docs/ru/autoFill.md
CHANGED
|
@@ -75,11 +75,30 @@ Intlayer также будет учитывать следующую инстр
|
|
|
75
75
|
|
|
76
76
|
При использовании опции пути для записи в другой файл механизм заполнения работает через отношение _master-slave_ между файлами объявления содержимого. Основной файл (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], // Рекомендуется, чтобы избежать Property 'pl' is missing in type '{ en: string; xxx } on your t function if
|
|
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,16 +106,16 @@ 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/ru/per_locale_file.md) с использованием инструкции `fill`.
|
|
100
119
|
|
|
101
120
|
Затем, когда вы выполните следующую команду:
|
|
102
121
|
|
|
@@ -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 автоматически сгенерирует производны
|
|
|
133
152
|
}
|
|
134
153
|
```
|
|
135
154
|
|
|
136
|
-
После этого оба файла
|
|
155
|
+
После этого оба файла объявления будут объединены в один словарь, доступный с помощью стандартного хука `useIntlayer("example")` (react) / композабла (vue).
|
|
137
156
|
|
|
138
157
|
## Глобальная конфигурация
|
|
139
158
|
|
package/docs/ru/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: Конфигурация (Configuration)
|
|
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,19 @@ const config: IntlayerConfig = {
|
|
|
235
238
|
*/
|
|
236
239
|
mode: "prefix-no-default",
|
|
237
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Включает прокси маршрутизации локалей Intlayer (middleware).
|
|
243
|
+
* Отвечает за определение локали, редиректы и перезапись URL в dev, preview и SSR.
|
|
244
|
+
* - не задано (auto): серверы dev и preview сохраняют маршрутизацию по URL,
|
|
245
|
+
* игнорируя локаль, сохранённую в cookie и заголовках. Префиксы по-прежнему
|
|
246
|
+
* разрешаются, локаль по-прежнему сохраняется, а определение Accept-Language
|
|
247
|
+
* по-прежнему действует. В продакшене ведёт себя как `true`.
|
|
248
|
+
* - true: полное поведение во всех окружениях.
|
|
249
|
+
* - false: маршрутизация локалей отключена.
|
|
250
|
+
* По умолчанию: undefined (auto)
|
|
251
|
+
*/
|
|
252
|
+
enableProxy: undefined,
|
|
253
|
+
|
|
238
254
|
/**
|
|
239
255
|
* Где хранить выбранный пользователем язык.
|
|
240
256
|
* Опции: 'cookie', 'localStorage', 'sessionStorage', 'header' или их массив.
|
|
@@ -713,13 +729,14 @@ export default config;
|
|
|
713
729
|
|
|
714
730
|
Настройки, управляющие поведением маршрутизации, включая структуру URL, хранение языков и управление middleware.
|
|
715
731
|
|
|
716
|
-
| Поле
|
|
717
|
-
|
|
|
718
|
-
| `mode`
|
|
719
|
-
| `
|
|
720
|
-
| `
|
|
721
|
-
| `
|
|
722
|
-
| `
|
|
732
|
+
| Поле | Описание | Тип | По умолчанию | Пример | Примечание |
|
|
733
|
+
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
734
|
+
| `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` | Не влияет на управление куками или хранилищем языков. |
|
|
735
|
+
| `enableProxy` | Включает прокси маршрутизации локалей Intlayer (middleware). | `boolean` | <br/> `undefined` | `undefined` (auto) | `true` | • Не задано (auto): серверы dev и preview игнорируют локаль из cookie/заголовков как источник редиректа; префиксы, сохранение локали и определение `Accept-Language` продолжают работать. В продакшене ведёт себя как `true`.<br/>• `true`: полное поведение везде.<br/>• `false`: маршрутизация локалей отключена. В Next.js middleware `intlayerProxy` становится сквозным. |
|
|
736
|
+
| `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 }]` | См. таблицу параметров хранения ниже. |
|
|
737
|
+
| `basePath` | Базовый путь для URL-адресов приложения. | `string` | `''` | `'/my-app'` | Если приложение находится по адресу `https://example.com/my-app`, basePath - `'/my-app'`, а URL становятся `https://example.com/my-app/en`. |
|
|
738
|
+
| `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). |
|
|
739
|
+
| `domains` | Сопоставляет локали с именами хостов доменов для маршрутизации на основе доменов. Когда установлено, URL-адреса для локали используют этот домен в качестве базы (абсолютный URL), и к пути не добавляется префикс локали. | `Partial<Record<Locale, string>>` | `undefined` | `{ zh: 'intlayer.zh', fr: 'intlayer.org' }` | • Протокол по умолчанию - `https://`, если он не указан в имени хоста.<br/>• Сам домен идентифицирует локаль, поэтому префикс `/zh/` не добавляется.<br/>• `getLocalizedUrl('/', 'zh')` возвращает `https://intlayer.zh/`. |
|
|
723
740
|
|
|
724
741
|
**Пример `rewrite`**:
|
|
725
742
|
|
|
@@ -23,7 +23,9 @@ history:
|
|
|
23
23
|
author: aymericzip
|
|
24
24
|
---
|
|
25
25
|
|
|
26
|
-
# Содержимое
|
|
26
|
+
# Содержимое файлов / Встраивание файлов в Intlayer
|
|
27
|
+
|
|
28
|
+
В Intlayer функция `file` позволяет встраивать содержимое внешних файлов в словарь. Такой подход гарантирует, что Intlayer распознает исходный файл, обеспечивая безупречную интеграцию с Visual Editor и CMS Intlayer.
|
|
27
29
|
|
|
28
30
|
## Как работает встраивание файлов
|
|
29
31
|
|