@intlayer/docs 9.1.3 → 9.3.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/index.md +1 -1
- package/blog/ar/rag_powered_documentation_assistant.md +7 -0
- package/blog/de/index.md +1 -1
- package/blog/de/rag_powered_documentation_assistant.md +6 -0
- package/blog/en/index.md +1 -1
- package/blog/en-GB/index.md +1 -1
- package/blog/en-GB/rag_powered_documentation_assistant.md +6 -0
- package/blog/es/index.md +1 -1
- package/blog/es/rag_powered_documentation_assistant.md +7 -0
- package/blog/fr/i18n_meaning.md +7 -1
- package/blog/fr/index.md +1 -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/index.md +1 -1
- 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/index.md +1 -1
- package/blog/id/rag_powered_documentation_assistant.md +6 -0
- package/blog/it/index.md +1 -1
- package/blog/it/rag_powered_documentation_assistant.md +6 -0
- package/blog/ja/index.md +1 -1
- package/blog/ja/rag_powered_documentation_assistant.md +7 -0
- package/blog/ko/index.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/react.md +7 -7
- package/blog/ko/rag_powered_documentation_assistant.md +6 -0
- package/blog/pl/index.md +1 -1
- package/blog/pl/rag_powered_documentation_assistant.md +6 -0
- package/blog/pt/index.md +1 -1
- package/blog/pt/rag_powered_documentation_assistant.md +6 -0
- package/blog/ru/index.md +1 -1
- 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/index.md +1 -1
- package/blog/uk/rag_powered_documentation_assistant.md +6 -0
- package/blog/vi/index.md +1 -1
- package/blog/vi/rag_powered_documentation_assistant.md +6 -0
- package/blog/zh/index.md +1 -1
- 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/common.cjs +24 -1
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +58 -31
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +265 -218
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +48 -21
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +33 -6
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/common.mjs +24 -1
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +58 -31
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +265 -218
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +48 -21
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +33 -6
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/generated/blog.entry.d.ts.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/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/docs/ar/analytics.md +222 -0
- package/docs/ar/autoFill.md +28 -9
- package/docs/ar/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -0
- 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/bundle_optimization.md +58 -25
- package/docs/bn/configuration.md +25 -8
- package/docs/bn/intlayer_with_angular_21.md +9 -9
- package/docs/cs/bundle_optimization.md +58 -25
- 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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -0
- 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/bundle_optimization.md +51 -23
- 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/live-sync.md +4 -0
- package/docs/en-GB/analytics.md +222 -0
- package/docs/en-GB/autoFill.md +26 -7
- package/docs/en-GB/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -0
- 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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -0
- 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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -0
- 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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -0
- 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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -0
- 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/bundle_optimization.md +58 -25
- 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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -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/bundle_optimization.md +58 -24
- 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/live-sync.md +4 -0
- 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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -0
- 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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -0
- 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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -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/bundle_optimization.md +58 -25
- 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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -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/bundle_optimization.md +58 -25
- 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/live-sync.md +4 -0
- 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/bundle_optimization.md +58 -25
- package/docs/zh-TW/intlayer_with_angular_21.md +7 -7
- package/package.json +7 -7
- package/src/common.ts +39 -2
- package/src/generated/blog.entry.ts +66 -34
- package/src/generated/docs.entry.ts +273 -221
- package/src/generated/frequentQuestions.entry.ts +56 -24
- package/src/generated/legal.entry.ts +41 -9
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-07-08
|
|
3
|
+
updatedAt: 2026-07-08
|
|
4
|
+
title: Analytique Intlayer | Suivre l'exposition du contenu et exécuter des tests A/B
|
|
5
|
+
description: Découvrez comment @intlayer/analytics suit les vues de pages/locales et l'exposition du contenu, et comment l'utiliser pour exécuter des tests A/B sur votre contenu Intlayer.
|
|
6
|
+
keywords:
|
|
7
|
+
- Analytique
|
|
8
|
+
- Tests A/B
|
|
9
|
+
- Audience
|
|
10
|
+
- Internationalisation
|
|
11
|
+
- Documentation
|
|
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 — package @intlayer/analytics, suivi au niveau du provider/node, tests A/B, dashboard"
|
|
24
|
+
author: aymericzip
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Documentation Analytique Intlayer
|
|
28
|
+
|
|
29
|
+
`@intlayer/analytics` est un package compagnon optionnel qui vous indique **quel contenu est réellement affiché** à vos visiteurs — quelle page, dans quelle locale, et quel élément de contenu traduit spécifique — afin que vous puissiez comprendre votre audience et exécuter des **tests A/B sur le contenu**.
|
|
30
|
+
|
|
31
|
+
## Table des matières
|
|
32
|
+
|
|
33
|
+
<TOC/>
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Ce qu'il suit
|
|
38
|
+
|
|
39
|
+
`@intlayer/analytics` regroupe trois types d'événements anonymes en lots :
|
|
40
|
+
|
|
41
|
+
| Événement | Capturé où | Ce qu'il vous indique |
|
|
42
|
+
| ------------------ | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
43
|
+
| `page_view` | Niveau Provider (`IntlayerProvider`) | Quelle page et locale une session a consulté, lors du chargement initial, du changement de route ou du changement de locale. |
|
|
44
|
+
| `content_exposure` | Niveau Nœud (`useIntlayer` / plugins d'interpréteur) | Quelle clé de dictionnaire / chemin de clé a été réellement résolu et affiché — et, si faisant partie d'une expérience, quelle **variante**. |
|
|
45
|
+
| `conversion` | Partout où vous appelez `useConversion()` | Un objectif atteint (inscription, clic, achat…) attribué à la variante A/B à laquelle la session a été exposée. |
|
|
46
|
+
|
|
47
|
+
Les événements sont collectés en mémoire et envoyés sous forme d'une **seule requête groupée (batch) environ toutes les 20 secondes** — jamais à chaque frappe au clavier ou rendu — donc l'analytique n'impacte jamais le temps de premier rendu et n'ajoute pas une requête par interaction.
|
|
48
|
+
|
|
49
|
+
## Comment cela propulse les tests A/B sur le contenu
|
|
50
|
+
|
|
51
|
+
Intlayer vous permet déjà de déclarer des [Variantes](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dynamic_dictionaries/index.md) de contenu (par exemple un dictionnaire `hero-banner` avec une variante `control` et une variante `black_friday`). `@intlayer/analytics` boucle la boucle :
|
|
52
|
+
|
|
53
|
+
1. `getVariant(experimentKey, variants)` attribue de manière déterministe chaque session anonyme à une variante — une fonction pure de l'ID de session et de la clé d'expérience, donc l'attribution est **stable dans toute la session** et ne nécessite **aucun aller-retour serveur** avant le premier rendu (pas de scintillement, pas de décalage de mise en page).
|
|
54
|
+
2. Chaque événement `content_exposure` transporte la `variant` qui a été affichée.
|
|
55
|
+
3. `useConversion()` vous permet d'attribuer un objectif (par exemple `"cta_click"`) à cette variante.
|
|
56
|
+
4. L'endpoint des résultats d'expérience du tableau de bord compare les taux de conversion par variante, y compris la signification statistique (un test z).
|
|
57
|
+
|
|
58
|
+
## Installation
|
|
59
|
+
|
|
60
|
+
`@intlayer/analytics` est une dépendance **peer, optionnelle** — jamais installée automatiquement par un package de framework. Ajoutez-la aux côtés de `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
|
+
Si vous ne l'installez pas, chaque point d'intégration se résout en une opération vide (no-op) — voir [Zéro coût quand non installé](#zero-cout-quand-non-installe) ci-dessous.
|
|
79
|
+
|
|
80
|
+
## Configuration
|
|
81
|
+
|
|
82
|
+
Analytics **réutilise le bloc de configuration `editor` existant** — il n'y a pas de schéma de configuration `analytics` séparé à remplir :
|
|
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", // Également utilisé comme endpoint d'ingestion d'analytique
|
|
90
|
+
clientId: "your-client-id", // Aussi utilisé comme clé de projet analytique
|
|
91
|
+
clientSecret: "your-client-secret",
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export default config;
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
- `editor.backendURL` — l'URL de base vers laquelle les événements analytiques sont envoyés (`POST {backendURL}/api/analytics/events`).
|
|
99
|
+
- `editor.clientId` — la clé de projet publique attribuée à chaque événement ingéré. Elle agit également comme **interrupteur d'activation** : l'analytique reste complètement désactivée (et éliminée du code par tree-shaking, voir ci-dessous) jusqu'à ce que `clientId` soit configuré.
|
|
100
|
+
|
|
101
|
+
Si vous auto-hébergez (self-host) Intlayer, l'analytique pointe automatiquement vers votre propre instance puisqu'elle partage `editor.backendURL`.
|
|
102
|
+
|
|
103
|
+
## Support des frameworks
|
|
104
|
+
|
|
105
|
+
Analytics est intégré dans le `IntlayerProvider` partagé de `react-intlayer`, il est donc disponible dès aujourd'hui partout où ce provider est utilisé :
|
|
106
|
+
|
|
107
|
+
| Framework | Statut |
|
|
108
|
+
| -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
109
|
+
| React | ✅ Disponible |
|
|
110
|
+
| Next.js (`next-intlayer`) | ✅ Disponible (via `react-intlayer`) |
|
|
111
|
+
| React Native / Expo (`react-native-intlayer`) | ✅ Disponible (via `react-intlayer`) |
|
|
112
|
+
| Vue, Svelte, Angular, Solid, Preact, Lit, Astro, Vanilla | 🚧 Planifié — même client, liaisons au niveau du provider suivant le modèle de déploiement de `@intlayer/editor` |
|
|
113
|
+
|
|
114
|
+
## Utilisation
|
|
115
|
+
|
|
116
|
+
### Suivi automatique au niveau du provider
|
|
117
|
+
|
|
118
|
+
Aucune modification de code n'est requise. Une fois que `@intlayer/analytics` est installé et que `editor.clientId` est configuré, `IntlayerProvider` effectue automatiquement les actions suivantes :
|
|
119
|
+
|
|
120
|
+
- initialise le client d'analytique au montage (mount),
|
|
121
|
+
- enregistre un `page_view` au chargement initial,
|
|
122
|
+
- enregistre un `page_view` à chaque changement de locale,
|
|
123
|
+
- démarre la boucle de flush d'environ 20s et vide tous les événements restants au démontage / fermeture d'onglet (via `navigator.sendBeacon`, avec un repli vers `fetch(..., { keepalive: true })`).
|
|
124
|
+
|
|
125
|
+
### Suivi automatique au niveau des nœuds
|
|
126
|
+
|
|
127
|
+
Chaque fois que `useIntlayer` résout un élément de contenu pour l'affichage, l'interpréteur signale un événement `content_exposure` pour ce(tte) `dictionaryKey` + chemin de clé + locale exacte — là encore, aucune modification de code n'est requise. Les expositions répétées du même nœud dans une fenêtre de flush sont fusionnées en un seul événement avec un `count`, donc une liste qui se re-rend 50 fois n'envoie pas 50 événements.
|
|
128
|
+
|
|
129
|
+
### Suivi des conversions pour les tests A/B
|
|
130
|
+
|
|
131
|
+
Utilisez `useConversion()` pour attribuer un objectif à la variante qu'une session a vue :
|
|
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
|
+
Commencer
|
|
150
|
+
</button>
|
|
151
|
+
);
|
|
152
|
+
};
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Résolution d'une variante côté client
|
|
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
|
+
## Confidentialité & performance
|
|
168
|
+
|
|
169
|
+
- **Anonyme par conception** : les sessions sont identifiées par un ID rotatif ; le backend ne stocke jamais qu'un **hash SHA-256** de cet ID — jamais l'ID brut, jamais une adresse IP.
|
|
170
|
+
- **La localisation est approximative (coarse)** : uniquement un code pays, dérivé des en-têtes de géolocalisation CDN (`cf-ipcountry`, `x-vercel-ip-country`, …) — aucune IP n'est lue ou stockée.
|
|
171
|
+
- **Les URL excluent les paramètres de recherche** par défaut, les chaînes de requête (query strings) ne sont donc jamais capturées.
|
|
172
|
+
- **Échantillonnage (Sampling)** : `sampleRate` vous permet de conserver seulement une fraction des événements d'exposition de contenu sur les applications à fort trafic.
|
|
173
|
+
- **En lots (Batched)** : une requête environ toutes les 20 secondes (`flushInterval`), ou plus tôt si le tampon se remplit (`maxBufferSize`) — jamais une requête par événement.
|
|
174
|
+
|
|
175
|
+
### Zéro coût quand non installé
|
|
176
|
+
|
|
177
|
+
`@intlayer/analytics` suit exactement le même modèle de dépendance optionnelle que `@intlayer/editor` :
|
|
178
|
+
|
|
179
|
+
- chaque point d'intégration charge le package via un **`import()` dynamique enveloppé dans un `try/catch`** — une application qui n'installe jamais `@intlayer/analytics` ne paie aucun coût en taille de bundle ou à l'exécution, et ne voit jamais d'erreur ;
|
|
180
|
+
- une variable d'environnement au moment de la compilation (`INTLAYER_ANALYTICS_ENABLED`), définie automatiquement à `'false'` par `@intlayer/config` chaque fois que `editor.clientId` n'est pas configuré, permet aux bundlers d'**éliminer le code mort (dead-code-eliminate)** de toute l'intégration ;
|
|
181
|
+
- l'analytique est désactivée à l'intérieur de l'iframe de prévisualisation de l'éditeur/CMS Intlayer, afin que les sessions d'éditeur ne soient jamais comptées comme du vrai trafic.
|
|
182
|
+
|
|
183
|
+
## Tableau de bord : Page Analytique
|
|
184
|
+
|
|
185
|
+
Une fois que votre projet a collecté des événements, la page **Analytics** dans le [tableau de bord Intlayer](https://app.intlayer.org/analytics) (visible dans la barre latérale une fois qu'un projet est sélectionné) affiche :
|
|
186
|
+
|
|
187
|
+
- **Utilisateurs actifs** — visiteurs uniques sur la fenêtre glissante sélectionnée (7 / 30 / 90 jours).
|
|
188
|
+
- **Utilisateurs aujourd'hui** et **utilisateurs au cours des 7 derniers jours**.
|
|
189
|
+
- **Pages vues** sur la fenêtre sélectionnée.
|
|
190
|
+
- Un **graphique d'évolution** des visiteurs uniques quotidiens.
|
|
191
|
+
- Des onglets de répartition par **Locales** et par **Emplacement (Location)**, classant votre audience par locale et par pays.
|
|
192
|
+
|
|
193
|
+
## Référence API Backend
|
|
194
|
+
|
|
195
|
+
Tous les endpoints de lecture nécessitent une authentification ; l'ingestion est publique et attribuée par `clientId` dans le corps (body).
|
|
196
|
+
|
|
197
|
+
| Méthode | Endpoint | Description |
|
|
198
|
+
| ------- | ------------------------------------------- | ------------------------------------------------------------------------------- |
|
|
199
|
+
| `POST` | `/api/analytics/events` | Ingérer un lot d'événements (public, attribué par `clientId` dans le body). |
|
|
200
|
+
| `GET` | `/api/analytics/overview` | Totaux de pages/locales pour le projet authentifié. |
|
|
201
|
+
| `GET` | `/api/analytics/audience?days=30` | Visiteurs uniques, pages vues, série quotidienne, répartitions locale + pays. |
|
|
202
|
+
| `GET` | `/api/analytics/content-stats` | Totaux d'exposition par contenu, groupés par clé de dictionnaire/chemin/locale. |
|
|
203
|
+
| `GET` | `/api/analytics/experiments/:experimentKey` | Taux de conversion par variante et signification statistique pour un test A/B. |
|
|
204
|
+
|
|
205
|
+
Vous pouvez également appeler ces endpoints de manière programmatique avec le [SDK CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/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
|
+
## Liens utiles
|
|
217
|
+
|
|
218
|
+
- [Dictionnaires dynamiques - Collections et variantes](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dynamic_dictionaries/index.md)
|
|
219
|
+
- [Intlayer CMS - SDK CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md)
|
|
220
|
+
- [Éditeur Visuel Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_visual_editor.md)
|
|
221
|
+
- [Référence de configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md)
|
|
222
|
+
- [Guide d'auto-hébergement (Self-Hosting)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/self_hosting.md)
|
package/docs/fr/autoFill.md
CHANGED
|
@@ -75,11 +75,30 @@ Dans v7, le comportement de la commande `fill` a été mis à jour :
|
|
|
75
75
|
|
|
76
76
|
Lors de l'utilisation d'une option de chemin pour écrire dans un autre fichier, le mécanisme de remplissage fonctionne via une relation _maître-esclave_ entre les fichiers de déclaration de contenu. Le fichier principal (maître) sert de source de vérité, et lorsqu'il est mis à jour, Intlayer applique automatiquement ces modifications aux fichiers de déclaration dérivés (remplis) spécifiés par le chemin.
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
### Personnalisation par locale
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
Vous pouvez également personnaliser le comportement pour chaque locale en utilisant un objet :
|
|
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], // Recommandé pour éviter Property 'pl' is missing in type '{ en: string; xxx } on your t function if
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
dictionary: {
|
|
92
|
+
fill: {
|
|
93
|
+
en: true, // Remplir et modifier le fichier courant pour l'anglais
|
|
94
|
+
fr: "./translations/fr.json", // Créer un fichier séparé pour le français
|
|
95
|
+
es: false, // Désactiver le remplissage pour l'espagnol
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Cela vous permet d'avoir différents comportements de remplissage pour différentes locales au sein du même projet.
|
|
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
|
-
Voici un [fichier de déclaration de contenu par
|
|
118
|
+
Voici un [fichier de déclaration de contenu par locale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/per_locale_file.md) utilisant l'instruction `fill`.
|
|
100
119
|
|
|
101
120
|
Ensuite, lorsque vous exécutez la commande suivante :
|
|
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 générera automatiquement le fichier de déclaration dérivé à `src/components/example/example.content.json`, en remplissant toutes les locales non
|
|
138
|
+
Intlayer générera automatiquement le fichier de déclaration dérivé à `src/components/example/example.content.json`, en remplissant toutes les locales non déclarées dans le fichier principal.
|
|
120
139
|
|
|
121
140
|
```json5 fileName="src/components/example/example.content.json"
|
|
122
141
|
{
|
|
@@ -133,7 +152,7 @@ Intlayer générera automatiquement le fichier de déclaration dérivé à `src/
|
|
|
133
152
|
}
|
|
134
153
|
```
|
|
135
154
|
|
|
136
|
-
|
|
155
|
+
Après cela, les deux fichiers de déclaration seront fusionnés en un seul dictionnaire, accessible à l'aide du hook `useIntlayer("example")` standard (react) / composable (vue).
|
|
137
156
|
|
|
138
157
|
## Configuration globale
|
|
139
158
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-11-25
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-08-09
|
|
4
4
|
title: Optimisation de la taille et des performances du bundle i18n
|
|
5
5
|
description: Réduisez la taille du bundle de votre application en optimisant le contenu d'internationalisation (i18n). Apprenez à exploiter le tree shaking et le lazy loading pour les dictionnaires avec Intlayer.
|
|
6
6
|
keywords:
|
|
@@ -16,6 +16,12 @@ slugs:
|
|
|
16
16
|
- concept
|
|
17
17
|
- bundle-optimization
|
|
18
18
|
history:
|
|
19
|
+
- version: 9.2.1
|
|
20
|
+
date: 2026-08-09
|
|
21
|
+
changes: "`purge` et `minify` fonctionnent désormais sur Next.js via `@intlayer/swc` — aucun `babel.config.js` requis"
|
|
22
|
+
- version: 8.12.0
|
|
23
|
+
date: 2026-06-24
|
|
24
|
+
changes: "Liste des plugins Babel dans l'ordre de pipeline requis (extract → purge → minify → optimize) dans les tableaux de référence"
|
|
19
25
|
- version: 8.12.0
|
|
20
26
|
date: 2026-06-07
|
|
21
27
|
changes: "Ajout de `intlayerPurgeBabelPlugin` et `intlayerMinifyBabelPlugin` pour Babel/Webpack; clarification du pipeline de plugins"
|
|
@@ -191,12 +197,14 @@ L'optimisation de build d'Intlayer est divisée en plusieurs plugins distincts,
|
|
|
191
197
|
|
|
192
198
|
Ceux-ci sont utilisés directement dans `babel.config.js` pour les configurations basées sur Webpack (Next.js avec Babel, CRA, Webpack personnalisé, etc.).
|
|
193
199
|
|
|
200
|
+
Le tableau ci-dessous les liste dans leur ordre de pipeline requis (le même ordre dans lequel ils doivent apparaître dans `babel.config.js`) :
|
|
201
|
+
|
|
194
202
|
| Plugin | Ce qu'il fait |
|
|
195
203
|
| :---------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
196
204
|
| `intlayerExtractBabelPlugin` | Analyse les fichiers `.content.ts` et écrit les dictionnaires compilés dans `.intlayer/` |
|
|
197
|
-
| `intlayerOptimizeBabelPlugin` | Réécrit `useIntlayer('key')` → `useDictionary(hash)` et injecte l'`import` du dictionnaire correspondant |
|
|
198
205
|
| `intlayerPurgeBabelPlugin` | Analyse tous les fichiers sources, supprime les **champs de contenu inutilisés** des fichiers de dictionnaire compilés `.intlayer/**/*.json` |
|
|
199
206
|
| `intlayerMinifyBabelPlugin` | **Renomme les clés des champs de contenu** par de courts alias alphabétiques (`title` → `a`) dans les fichiers JSON et le code source |
|
|
207
|
+
| `intlayerOptimizeBabelPlugin` | Réécrit `useIntlayer('key')` → `useDictionary(hash)` et injecte l'`import` du dictionnaire correspondant |
|
|
200
208
|
|
|
201
209
|
> **L'ordre des plugins a de l'importance.** Dans votre `babel.config.js`, les plugins de purge et de minification doivent apparaître **avant** le plugin d'optimisation. La passe d'optimisation remplace `useIntlayer('key')` par un appel opaque `useDictionary(hash)`, effaçant l'information de la clé du dictionnaire dont les passes de purge et de minification ont besoin pour identifier les champs utilisés.
|
|
202
210
|
|
|
@@ -205,9 +213,9 @@ Chaque plugin Babel dispose d'un helper d'options correspondant qui lit votre `i
|
|
|
205
213
|
| Helper d'options | Utilisé avec |
|
|
206
214
|
| :--------------------------- | :---------------------------- |
|
|
207
215
|
| `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
|
|
208
|
-
| `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
|
|
209
216
|
| `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
|
|
210
217
|
| `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
|
|
218
|
+
| `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
|
|
211
219
|
|
|
212
220
|
### Plugins Vite (`vite-intlayer`)
|
|
213
221
|
|
|
@@ -220,6 +228,20 @@ Les utilisateurs de Vite **ne configurent jamais ceux-ci directement**. Ils sont
|
|
|
220
228
|
| Minification de dict. | Identique à la passe d'écriture JSON de `intlayerMinifyBabelPlugin` |
|
|
221
229
|
| Transformation Babel | Identique au renommage de code source de `intlayerMinifyBabelPlugin` + `intlayerOptimizeBabelPlugin` |
|
|
222
230
|
|
|
231
|
+
### Plugin SWC (`@intlayer/swc`)
|
|
232
|
+
|
|
233
|
+
Les utilisateurs de Next.js **ne configurent jamais ceux-ci directement** non plus. Depuis la **v9.2.1**, `withIntlayer()` dans `next.config.ts` exécute l'ensemble du pipeline — purge, minification et réécriture des imports — à partir des seuls drapeaux `build.purge` et `build.minify`.
|
|
234
|
+
|
|
235
|
+
Le travail est réparti en deux, car un plugin SWC Wasm transforme un fichier à la fois, sans accès au système de fichiers :
|
|
236
|
+
|
|
237
|
+
| Passe | Où elle s'exécute | Ce qu'elle fait |
|
|
238
|
+
| :-------------------------------------------- | :-------------------------- | :----------------------------------------------------------------------------------------------------- |
|
|
239
|
+
| Analyse d'usage + purge/minification JSON | Node, dans `withIntlayer()` | Lit chaque fichier source de composant, réécrit `.intlayer/**/*.json`, produit les tables de renommage |
|
|
240
|
+
| Réécriture du source (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | Applique les tables de renommage aux accès de propriétés correspondants dans votre code |
|
|
241
|
+
| Réécriture des imports (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | Identique à `intlayerOptimizeBabelPlugin` |
|
|
242
|
+
|
|
243
|
+
Déterminer _quels_ champs sont inutilisés et _quel_ alias attribuer à chacun nécessite un état inter-fichiers et des E/S fichier ; cette moitié s'exécute donc dans Node, et le plugin SWC ne reçoit que les tables résultantes.
|
|
244
|
+
|
|
223
245
|
## Configuration par plateforme
|
|
224
246
|
|
|
225
247
|
<Tabs>
|
|
@@ -227,10 +249,12 @@ Les utilisateurs de Vite **ne configurent jamais ceux-ci directement**. Ils sont
|
|
|
227
249
|
|
|
228
250
|
### Next.js
|
|
229
251
|
|
|
230
|
-
Next.js nécessite le plugin `@intlayer/swc
|
|
252
|
+
Next.js nécessite le plugin `@intlayer/swc`, car Next.js utilise SWC pour les builds. Depuis la **v9.2.1**, ce seul paquet couvre tout le pipeline — optimisation (réécriture des imports), purge et minification.
|
|
231
253
|
|
|
232
254
|
> Ce plugin n'est pas installé par défaut car les plugins SWC sont encore expérimentaux pour Next.js. Cela pourrait changer à l'avenir.
|
|
233
255
|
|
|
256
|
+
> **Next.js 16.1.0 est la version minimale.** C'est la première version construite sur l'ABI de plugin Wasm de SWC compatible en avant ; les versions antérieures rejettent le plugin. `withIntlayer` lit votre version de Next.js et n'enregistre tout simplement pas le plugin en dessous de 16.1.0 — ces builds réussissent quand même, ils s'exécutent simplement sans l'optimisation du bundle.
|
|
257
|
+
|
|
234
258
|
<Tabs>
|
|
235
259
|
<Tab value="npm">
|
|
236
260
|
|
|
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
|
|
|
265
289
|
|
|
266
290
|
Une fois installé, Intlayer détectera et utilisera automatiquement le plugin.
|
|
267
291
|
|
|
268
|
-
|
|
292
|
+
Les passes de **purge et de minification** (suppression et renommage de champs) ne nécessitent aucun paquet supplémentaire ni `babel.config.js`. Enveloppez votre configuration avec `withIntlayer` et activez les drapeaux dans `intlayer.config.ts` :
|
|
269
293
|
|
|
270
|
-
```
|
|
271
|
-
|
|
294
|
+
```typescript fileName="next.config.ts"
|
|
295
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
296
|
+
import type { NextConfig } from "next";
|
|
297
|
+
|
|
298
|
+
const nextConfig: NextConfig = {/* votre configuration */};
|
|
299
|
+
|
|
300
|
+
export default withIntlayer(nextConfig);
|
|
272
301
|
```
|
|
273
302
|
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
intlayerPurgeBabelPlugin,
|
|
277
|
-
intlayerMinifyBabelPlugin,
|
|
278
|
-
getPurgePluginOptions,
|
|
279
|
-
getMinifyPluginOptions,
|
|
280
|
-
} = require("@intlayer/babel");
|
|
303
|
+
```typescript fileName="intlayer.config.ts"
|
|
304
|
+
import type { IntlayerConfig } from "intlayer";
|
|
281
305
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
// Minify : renomme les clés de champ de contenu dans le JSON + code source
|
|
288
|
-
[intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
|
|
289
|
-
// Note : intlayerOptimizeBabelPlugin n'est PAS nécessaire ici car
|
|
290
|
-
// @intlayer/swc gère la réécriture useIntlayer → useDictionary.
|
|
291
|
-
],
|
|
306
|
+
const config: IntlayerConfig = {
|
|
307
|
+
build: {
|
|
308
|
+
purge: true, // supprime les champs de contenu inutilisés des JSON groupés
|
|
309
|
+
minify: true, // renomme les clés de champs avec de courts alias
|
|
310
|
+
},
|
|
292
311
|
};
|
|
312
|
+
|
|
313
|
+
export default config;
|
|
293
314
|
```
|
|
294
315
|
|
|
316
|
+
Pendant `next build`, `withIntlayer` analyse vos sources, réécrit les dictionnaires compilés et transmet les tables de renommage de champs résultantes à `@intlayer/swc`, qui met à jour les accès de propriétés correspondants dans votre code.
|
|
317
|
+
|
|
318
|
+
> Utilisez la version asynchrone `withIntlayer`, pas `withIntlayerSync`. La variante synchrone n'exécute pas le pipeline d'analyse : la purge et la minification n'ont donc aucun effet avec elle.
|
|
319
|
+
|
|
320
|
+
> La purge et la minification ne s'exécutent que lors de `next build` — le pipeline d'optimisation est désactivé pendant `next dev`.
|
|
321
|
+
|
|
322
|
+
> Elles sont également désactivées lorsque des appelants d'adaptateurs de compatibilité sont configurés (`swcExtraCallers`, définis par les paquets de compatibilité tels que `@intlayer/next-intl` ou `@intlayer/react-i18next`) : ces sites d'appel sont invisibles pour l'analyseur d'usage, et purger supprimerait donc des champs que le code lit encore. La réécriture des imports reste active.
|
|
323
|
+
|
|
324
|
+
**Les versions antérieures (avant 9.2.1)** nécessitaient `@intlayer/babel` et un `babel.config.js` déclarant `intlayerPurgeBabelPlugin` et `intlayerMinifyBabelPlugin`. Ce fichier n'est plus nécessaire et peut être supprimé.
|
|
325
|
+
|
|
295
326
|
</Tab>
|
|
296
327
|
<Tab value="vite">
|
|
297
328
|
|
|
@@ -447,6 +478,8 @@ export default config;
|
|
|
447
478
|
|
|
448
479
|
> La minification est ignorée lorsque `optimize` est `false` ou lorsque `editor.enabled` est `true` (l'éditeur visuel requiert les noms de champs originaux pour permettre l'édition).
|
|
449
480
|
|
|
481
|
+
> Sur Next.js, la minification est également ignorée lorsque `@intlayer/swc` n'est pas installé ou ne peut pas être chargé (Next.js inférieur à 16.1.0). Le plugin est la moitié qui réécrit les accès dans le source : renommer les dictionnaires sans lui laisserait votre code lire des noms de champs qui n'existent plus.
|
|
482
|
+
|
|
450
483
|
> La minification est également ignorée pour les dictionnaires chargés via `importMode: 'fetch'` car leur JSON est servi depuis une API distante en utilisant les noms de champs originaux — renommer les clés côté client briserait le contrat serveur/client.
|
|
451
484
|
|
|
452
485
|
### Purge (suppression des champs inutilisés)
|
|
@@ -475,7 +508,7 @@ export default config;
|
|
|
475
508
|
{ "title": "…", "subtitle": "…" }
|
|
476
509
|
```
|
|
477
510
|
|
|
478
|
-
> La purge est ignorée lorsque `optimize` est `false` ou lorsque `editor.enabled` est `true`.
|
|
511
|
+
> La purge est ignorée lorsque `optimize` est `false` ou lorsque `editor.enabled` est `true`. Sur Next.js, elle est en outre ignorée lorsque `@intlayer/swc` est indisponible, ainsi que lorsque des appelants d'adaptateurs de compatibilité sont configurés.
|
|
479
512
|
|
|
480
513
|
> La purge est également ignorée de manière conservative lorsqu'un fichier source ne peut pas être analysé, ou lorsque le résultat de `useIntlayer` est assigné à une variable et transmis de manières que l'analyseur statique ne peut pas suivre (par ex. propagation dans un objet, passé en tant que prop sans déstructuration). Dans ces cas, le dictionnaire complet est conservé.
|
|
481
514
|
|
package/docs/fr/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: Apprenez à configurer Intlayer pour votre application. Comprenez les différents paramètres et options disponibles pour personnaliser Intlayer selon vos besoins.
|
|
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: "Rendre `routing.enableProxy` tri-état : non défini (auto), `true`, `false`"
|
|
17
20
|
- version: 9.0.0
|
|
18
21
|
date: 2026-07-11
|
|
19
22
|
changes: "Ajout de la configuration `analytics`"
|
|
@@ -235,6 +238,19 @@ const config: IntlayerConfig = {
|
|
|
235
238
|
*/
|
|
236
239
|
mode: "prefix-no-default",
|
|
237
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Active le proxy de routage des locales d'Intlayer (middleware).
|
|
243
|
+
* Gère la détection de la locale, les redirections et les réécritures en dev, preview et SSR.
|
|
244
|
+
* - non défini (auto) : les serveurs de dev et de preview gardent le routage
|
|
245
|
+
* piloté par l'URL en ignorant la locale stockée dans les cookies et les en-têtes.
|
|
246
|
+
* Les préfixes sont toujours résolus, la locale est toujours persistée et la
|
|
247
|
+
* détection Accept-Language s'applique toujours. En production, se comporte comme `true`.
|
|
248
|
+
* - true : comportement complet dans tous les environnements.
|
|
249
|
+
* - false : aucun routage de locale.
|
|
250
|
+
* Par défaut : undefined (auto)
|
|
251
|
+
*/
|
|
252
|
+
enableProxy: undefined,
|
|
253
|
+
|
|
238
254
|
/**
|
|
239
255
|
* Où stocker la locale sélectionnée par l'utilisateur.
|
|
240
256
|
* Options : 'cookie', 'localStorage', 'sessionStorage', 'header', ou un tableau de ceux-ci.
|
|
@@ -716,13 +732,14 @@ Les analytics sont strictement optionnelles (opt-in) : rien n'est collecté à m
|
|
|
716
732
|
|
|
717
733
|
Paramètres contrôlant le comportement du routage, y compris la structure des URL, le stockage des locales et la gestion du middleware.
|
|
718
734
|
|
|
719
|
-
| Champ
|
|
720
|
-
|
|
|
721
|
-
| `mode`
|
|
722
|
-
| `
|
|
723
|
-
| `
|
|
724
|
-
| `
|
|
725
|
-
| `
|
|
735
|
+
| Champ | Description | Type | Par défaut | Exemple | Note |
|
|
736
|
+
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
737
|
+
| `mode` | Mode de routage d'URL pour la gestion des locales. | `'prefix-no-default'` | <br/> `'prefix-all'` | <br/> `'no-prefix'` | <br/> `'search-params'` | `'prefix-no-default'` | `'prefix-no-default'`: `/dashboard` (en) ou `/fr/dashboard` (fr). `'prefix-all'`: `/en/dashboard`. `'no-prefix'`: locale gérée par d'autres moyens. `'search-params'`: `/dashboard?locale=fr` | N'impacte pas la gestion des cookies ou du stockage des locales. |
|
|
738
|
+
| `enableProxy` | Active le proxy de routage des locales d'Intlayer (middleware). | `boolean` | <br/> `undefined` | `undefined` (auto) | `true` | • Non défini (auto) : les serveurs de dev et de preview ignorent la locale stockée dans les cookies/en-têtes comme source de redirection ; les préfixes, la persistance et la détection `Accept-Language` s'appliquent toujours. En production, se comporte comme `true`.<br/>• `true` : comportement complet partout.<br/>• `false` : aucun routage de locale. Sur Next.js, le middleware `intlayerProxy` devient transparent. |
|
|
739
|
+
| `storage` | Configuration pour stocker la locale sur le client. | `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 }]` | Voir le tableau des Options de Stockage ci-dessous. |
|
|
740
|
+
| `basePath` | Le chemin de base pour les URL de l'application. | `string` | `''` | `'/my-app'` | Si l'application est sur `https://example.com/my-app`, basePath est `'/my-app'` et les URL deviennent `https://example.com/my-app/en`. |
|
|
741
|
+
| `rewrite` | Règles de réécriture d'URL personnalisées qui surchargent le mode de routage par défaut pour des chemins spécifiques. Supporte les paramètres dynamiques `[param]`. | `Record<string, StrictModeLocaleMap<string>>` | `undefined` | Voir l'exemple ci-dessous | • Les règles de réécriture ont la priorité sur le `mode`.<br/>• Fonctionne avec Next.js et Vite.<br/>• `getLocalizedUrl()` applique automatiquement les règles correspondantes.<br/>• Voir [Réécritures d'URL Personnalisées](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/custom_url_rewrites.md). |
|
|
742
|
+
| `domains` | Mappe les locales aux noms d'hôte de domaine pour le routage basé sur le domaine. Lorsqu'il est défini, les URL pour une locale utilisent ce domaine comme base (URL absolue) et aucun préfixe de locale n'est ajouté au chemin. | `Partial<Record<Locale, string>>` | `undefined` | `{ zh: 'intlayer.zh', fr: 'intlayer.org' }` | • Le protocole est défini par défaut sur `https://` lorsqu'il n'est pas inclus dans le nom d'hôte.<br/>• Le domaine lui-même identifie la locale, donc aucun préfixe `/zh/` n'est ajouté.<br/>• `getLocalizedUrl('/', 'zh')` renvoie `https://intlayer.zh/`. |
|
|
726
743
|
|
|
727
744
|
**Exemple de `rewrite`** :
|
|
728
745
|
|
|
@@ -25,6 +25,8 @@ author: aymericzip
|
|
|
25
25
|
|
|
26
26
|
# Contenu de fichier / Intégration de fichiers dans Intlayer
|
|
27
27
|
|
|
28
|
+
Dans Intlayer, la fonction `file` permet d'intégrer le contenu de fichiers externes dans un dictionnaire. Cette approche garantit qu'Intlayer reconnaît le fichier source, permettant une intégration transparente avec l'Intlayer Visual Editor et le CMS.
|
|
29
|
+
|
|
28
30
|
## Comment fonctionne l'intégration de fichiers
|
|
29
31
|
|
|
30
32
|
Dans Intlayer, la fonction `file` permet d'intégrer le contenu d'un fichier externe dans un dictionnaire. Cette approche garantit qu'Intlayer reconnaît le fichier source, permettant une intégration fluide avec l'éditeur visuel Intlayer et le CMS. Contrairement aux méthodes directes `import`, `require` ou de lecture de fichier via `fs`, l'utilisation de `file` associe le fichier au dictionnaire, ce qui permet à Intlayer de suivre et de mettre à jour dynamiquement le contenu lorsque le fichier est modifié.
|