@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,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-07-08
|
|
3
|
+
updatedAt: 2026-07-08
|
|
4
|
+
title: Intlayer Analytics | Lacak paparan konten dan jalankan pengujian A/B (A/B testing)
|
|
5
|
+
description: Temukan bagaimana @intlayer/analytics melacak tampilan halaman/lokal dan paparan konten, dan bagaimana menggunakannya untuk menjalankan pengujian A/B (A/B testing) pada konten Intlayer Anda.
|
|
6
|
+
keywords:
|
|
7
|
+
- Analytics (Analitik)
|
|
8
|
+
- A/B Testing (Pengujian A/B)
|
|
9
|
+
- Audience (Audiens)
|
|
10
|
+
- Internationalization (Internasionalisasi)
|
|
11
|
+
- Documentation (Dokumentasi)
|
|
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 — paket @intlayer/analytics, pelacakan tingkat provider/node, pengujian A/B, dasbor"
|
|
24
|
+
author: aymericzip
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Dokumentasi Intlayer Analytics
|
|
28
|
+
|
|
29
|
+
`@intlayer/analytics` adalah paket pelengkap opsional yang memberi tahu Anda **konten mana yang benar-benar ditampilkan** kepada pengunjung Anda — halaman mana, dalam bahasa (locale) apa, dan bagian mana dari konten terjemahan yang spesifik — sehingga Anda dapat memahami audiens Anda dan menjalankan **pengujian A/B pada konten**.
|
|
30
|
+
|
|
31
|
+
## Daftar Isi (Table of Contents)
|
|
32
|
+
|
|
33
|
+
<TOC/>
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Apa yang dilacak (What it tracks)
|
|
38
|
+
|
|
39
|
+
`@intlayer/analytics` menggabungkan tiga jenis peristiwa anonim dalam sebuah batch:
|
|
40
|
+
|
|
41
|
+
| Peristiwa (Event) | Di mana ditangkap | Apa yang dikatakannya kepada Anda |
|
|
42
|
+
| ------------------ | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
43
|
+
| `page_view` | Tingkat Provider (`IntlayerProvider`) | Halaman dan lokal (locale) mana yang dilihat oleh sesi (session), pada muat awal, perubahan rute, atau pergantian bahasa. |
|
|
44
|
+
| `content_exposure` | Tingkat Node (`useIntlayer` / plugin interpreter) | Kunci kamus / jalur kunci mana yang benar-benar diselesaikan (resolved) dan ditampilkan — dan jika bagian dari sebuah eksperimen, **varian** yang mana. |
|
|
45
|
+
| `conversion` | Di mana pun Anda memanggil `useConversion()` | Sebuah tujuan (goal) yang dicapai (pendaftaran, klik, pembelian...) yang diatribusikan ke varian A/B yang diekspos kepada sesi tersebut. |
|
|
46
|
+
|
|
47
|
+
Peristiwa (events) dikumpulkan di dalam memori dan dikirimkan sebagai **sebuah permintaan batch tunggal kira-kira setiap 20 detik** — tidak pernah pada setiap ketikan (keystroke) atau saat di-render (render) — sehingga analitik tidak pernah berdampak pada waktu rendering pertama (first render time) atau menambahkan sebuah request setiap interaksi.
|
|
48
|
+
|
|
49
|
+
## Bagaimana hal ini mendukung pengujian A/B pada konten
|
|
50
|
+
|
|
51
|
+
Intlayer telah memungkinkan Anda mendeklarasikan [Varian (Variants)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dynamic_dictionaries/index.md) dari konten (misalnya kamus `hero-banner` yang memiliki varian `control` dan varian `black_friday`). `@intlayer/analytics` menutup siklus tersebut:
|
|
52
|
+
|
|
53
|
+
1. `getVariant(experimentKey, variants)` secara deterministik (deterministically) menugaskan (assign) setiap sesi anonim ke dalam sebuah varian — ini merupakan murni sebuah fungsi (pure function) dari session id dan experiment key, sehingga tugas (assignment) ini **stabil (stable) di seluruh sesi** dan tidak memerlukan **satu siklus ke server (server round-trip)** sebelum proses rendering pertama selesai dilakukan (tidak ada kelap-kelip / flicker, dan juga layout shift).
|
|
54
|
+
2. Setiap peristiwa `content_exposure` turut membawa `variant` yang dipertunjukkan tersebut.
|
|
55
|
+
3. `useConversion()` memungkinkan Anda untuk mengatribusikan (attribute) sebuah tujuan (goal) (contohnya `"cta_click"`) ke arah varian tersebut.
|
|
56
|
+
4. Titik-akhir (endpoint) terkait hasil eksperimen pada dasbor membandingkan tingkat konversi (conversion rates) dari setiap varian, termasuk dengan signifikansi statistik-nya (melalui z-test).
|
|
57
|
+
|
|
58
|
+
## Instalasi (Installation)
|
|
59
|
+
|
|
60
|
+
`@intlayer/analytics` adalah kebergantungan (dependency) yang bersifat **sepadan (peer), opsional** — dan paket framework mana pun tidak akan secara otomatis memasangnya. Anda perlu menambahkannya bersama dengan `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
|
+
Bila Anda memutuskan untuk tak memasangnya, maka titik temu / integrasi (integration point) ini diselesaikan menjadi hal yang tidak beroperasi atau no-op — silakan periksa rincian dari [Tidak ada biaya apa pun ketika tidak dipasang (Zero-cost ketika tidak dipasang)](#nol-biaya-saat-tidak-diinstal) pada poin selanjutnya di bawah.
|
|
79
|
+
|
|
80
|
+
## Konfigurasi (Configuration)
|
|
81
|
+
|
|
82
|
+
Analytics **menggunakan ulang rancangan pengaturan / blok konfigurasi `editor` yang sudah ada** — jadi tak ada rincian pengaturan maupun bentuk bagan tersendiri (analytics config schema) untuk diisikan:
|
|
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", // Turut dipakai pula untuk keperluan analytics (berfungsi selaku analytics ingestion endpoint)
|
|
90
|
+
clientId: "your-client-id", // Juga dipakai pada fungsi kunci proyek analytics / analytics project key
|
|
91
|
+
clientSecret: "your-client-secret",
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export default config;
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
- `editor.backendURL` — merupakan dasar (base) rujukan / acuan bagi URL saat peristiwa (event) analytics diantarkan ke sana (`POST {backendURL}/api/analytics/events`).
|
|
99
|
+
- `editor.clientId` — merujuk terhadap pengunci (key) bagi proyek publik agar dipertautkan / diatribusikan ke beragam input data. Tak hanya itu fungsinya turut bertindak layaknya **pemicu aktivasi (enable switch)**: analitik sepenuhnya dibuat pada tingkatan non-aktif (dan dalam kondisi ter-tree-shaken, perhatikan penjabarannya di bawah) sampai kemudian di saat fungsi `clientId` ini ditata & dikonfigurasikan.
|
|
100
|
+
|
|
101
|
+
Dalam situasi ketika melakukan hosting (self-host) mandiri akan halnya fungsi Intlayer ini, analitik bakal terpusat tanpa penyesuaian baru (otomatis) terhadap instalasi server Anda disebabkan rujukan pengaturannya adalah identik terhadap rujukan `editor.backendURL`.
|
|
102
|
+
|
|
103
|
+
## Dukungan Framework (Framework support)
|
|
104
|
+
|
|
105
|
+
Analytics sendiri disalurkan beriringan di saat mendayagunakan `IntlayerProvider` rujukan `react-intlayer`, dan pastinya ini membuatnya selalu sedia dipakai di belahan titik mana pun bilamana ia di-inisiasikan:
|
|
106
|
+
|
|
107
|
+
| Framework | Status |
|
|
108
|
+
| -------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
109
|
+
| React | ✅ Tersedia |
|
|
110
|
+
| Next.js (`next-intlayer`) | ✅ Tersedia (melalui `react-intlayer`) |
|
|
111
|
+
| React Native / Expo (`react-native-intlayer`) | ✅ Tersedia (melalui `react-intlayer`) |
|
|
112
|
+
| Vue, Svelte, Angular, Solid, Preact, Lit, Astro, Vanilla | 🚧 Direncanakan (Planned) — klien yang serupa, dalam tingkatan binding berlandaskan rilis standar |
|
|
113
|
+
|
|
114
|
+
## Penggunaan (Usage)
|
|
115
|
+
|
|
116
|
+
### Pelacakan tingkat provider (Automatic provider-level tracking)
|
|
117
|
+
|
|
118
|
+
Tidak perlu ada perubahan kode atau modifikasi koding apa pun. Setelah instalan dari `@intlayer/analytics` dipastikan, serta konfigurasinya mengacu terhadap `editor.clientId`, dengan cara yang langsung `IntlayerProvider` bertindak untuk:
|
|
119
|
+
|
|
120
|
+
- Melakukan proses inisialisasi awal klien (analytics client) saat mounting awal (mount),
|
|
121
|
+
- Mencatatkan satu rekam jejak rupa tampilan layar `page_view` sewaktu pemuatan yang pertama,
|
|
122
|
+
- Menginisiasi kembali pelacakan `page_view` ini sewaktu perpindahan wilayah pilihan penggunaan (locale change),
|
|
123
|
+
- Memunculkan mekanisme pusaran siklus (~20s flush loop) agar menyaring tuntas rincian atau pun serpihan yang melekat tanpa menunggu (unmount / tutupan pada tab halaman pengguna; yaitu memfungsikan `navigator.sendBeacon` yang bakal melakukan hal serupa disusul balikan perujukannya memakai `fetch(..., { keepalive: true })`).
|
|
124
|
+
|
|
125
|
+
### Pelacakan otomatis tingkat Node (Automatic node-level tracking)
|
|
126
|
+
|
|
127
|
+
Dalam segenap ragam resolusi muatan koding saat menampilkan serpihan / wujud konten pada panggilannya melewati rujukan pemakaian dari `useIntlayer`, interpreter di sistem melaporkan dan merekam serpihan data bertitelkan rujukan nama peristiwanya (event): `content_exposure` untuk paduan akurasi di hal penggunaan ini: `dictionaryKey` + arah pencariannya pada perincian jalan/aksesnya (key path) + daerah acuan pilihan pemakai (locale) — sekali lagi tak satu jengkal pun perubahan bentuk kode dilibatkan. Adanya wujud rentetan dari kemunculan satu buah referensi simpul penamaan (node) selama jangka tahapan pusar (flush window) maka keseluruhannya cuma dikumpulkan di dalam satu rangkuman catatan rujukan dan dibumbuhi tambahan catatan bilangan rekam-an `count`, ini menegaskan bahwasanya dari hal yang sama terulang dan memunculkan rupa ulang tampilan atau rendering tak-kurang-bahkan 50 kali sekalipun bukan berarti mengirimkan rincian berurutan dan mengada-adakan proses berulang (50 pengantaran yang diestimasikan terhitung secara manual).
|
|
128
|
+
|
|
129
|
+
### Memantau hal rekam pencapaian / Konversi test A/B (Tracking conversions for A/B tests)
|
|
130
|
+
|
|
131
|
+
Anda mesti menerapkan rincian `useConversion()` guna memandu sebuah tujuan akhir ke wujud sebuah variabel eksperimen dengan hasil pengamatan pengguna akhir (session):
|
|
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
|
+
Mari kita memulainya (Get started)
|
|
150
|
+
</button>
|
|
151
|
+
);
|
|
152
|
+
};
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Penyelesaian varian eksperimen klien secara internal (Resolving a variant client-side)
|
|
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
|
+
## Privasi dan Peforma (Privacy & performance)
|
|
168
|
+
|
|
169
|
+
- **Anonim semenjak disajikan di dalam rancang bangun rancangan arsitektur** (Anonymous by design): keseluruhan lalu-lintas data pengguna hanya akan mempergunakan nama acak yang bergilir secara unik (rotating id); fungsi-fungsi bagian hulu dari mesin server (backend) tidak pernah (secara langsung & tak sadar) me-rekam hasil catatan rujukan dalam hal ini IP dari pengguna asalnya — namun alih-alih me-rekam atau men-sirkulasikannya pada **rangkaian fungsi Hash SHA-256 (SHA-256 hash)** demi tujuan keutuhan.
|
|
170
|
+
- **Batasan dan acuan dari pemosisian sangat acak / menyeluruh (Location is coarse)**: rincian data disuplai melalui serangkaian fungsi pelacakan geo-posisi atau geolokasi di CDN headers (`cf-ipcountry`, `x-vercel-ip-country`, ...). Rangkaian tidak merekam data maupun menyalin posisi akurat IP penggunanya secara keseluruhan maupun sebagian di sepanjang lalu lalang dari setiap interaksi data di lapangan.
|
|
171
|
+
- **Rujukan URL senantiasa tidak menyingkap serpihan/sandi atau referensinya (URLs exclude search params)** berkat penetapan bawaan sistem di balik layar (default settings) demi kemaslahatan fungsi yang menyeluruh dari pengguna saat men-skrining pelacakan referensi penyamaran yang berkesinambungan.
|
|
172
|
+
- **Batasan perbandingan sampling (Sampling)**: `sampleRate` dapat diselaraskan atau diformat berdasarkan dari rentetan trafik atau kerumitan penelusuran demi fungsi kinerja tinggi aplikasi.
|
|
173
|
+
- **Mekanisme antrian pengiriman rupa-upa (Batched)**: Pengaturan ini mengatur bahwasanya ada rujukan rentang acuan di `flushInterval` dalam interval taksiran pengantaran ± setiap 20 detik (kira-kira) atau pun bila terhambat di `maxBufferSize` maka sistem bereaksi dan beraksi menyuplai secara masal dari sekumpulan rincian (batched) itu ke dalam rujukan tanpa mencederai prinsip asasi yakni 'tak-ada satu-pun rekaman penelusuran untuk setiap transaksi / satu peristiwa dikirim sebagai laporan sendiri'.
|
|
174
|
+
|
|
175
|
+
### Nol-biaya saat tidak diinstal (Zero-cost when not installed)
|
|
176
|
+
|
|
177
|
+
Fungsi di belakang layer yang senantiasa berlaku dalam hal-ihwal perincian `@intlayer/analytics` sepenuhnya taat terhadap acuan yang lazim dipakai, tak-ubahnya seperti keberadaan pakem atau patokan yang biasa mendasari / membidani / menyelimuti referensi kebergantungan situasional (optional-dependency pattern) dalam serangkaian fungsi dari ranah operasional `@intlayer/editor`:
|
|
178
|
+
|
|
179
|
+
- di setiap rupa kemunculan pada fase / titik pertautan (integration point) sistem senantiasa mendatangkan wujud dari kumpulan rujukan kodingnya dalam model penanganan kesalahan yaitu mendayagunakan blok rujukan di kerangka kodingan bersandikan **`try/catch` pada rangkaian perincian pemanggil model pemanggil dari fungsi / pola struktur pemrograman pemanggil dinamis `import()` (dynamic `import()`)** — Hal itu mengasumsikan bila ternyata sewaktu sistem di mana di satu aplikasi tak-menyematkan proses pasang modul / instal koding pendukung untuk instrumen ini (di kasus penggunaan rujukan spesifik bagi instalasi alat pelacak seperti instalasi di `@intlayer/analytics`) — itu sama sekali tak akan mengurangi sedikit pun ruang ketersediaan sistem penyedia data atau server karena sistem mengasumsikan penggunanya memang memandang sebelah mata perihal tersebut (yakni tak pernah merilis wujud dukungan alat operasional penganalisa data rujukan aplikasi untuk ukuran besar/bundel pada penyediaan / runtime di sisi sistem dan tidak perlu melihat kegagalan proses).
|
|
180
|
+
- di kala perincian ini sedang berjalan pada fase proses sistem mempabrikasinya menjadi bagian tak-terpisahkan maka hal ini dapat difungsikan pada pengaturan (`INTLAYER_ANALYTICS_ENABLED`) rujukan lingkungan pemrograman bawaan / baku dari waktu-kompilasi.
|
|
181
|
+
Bentuk pengeset-an rupa-rupa di waktu-awal oleh koding pengatur yakni alat di lingkungan rancangan pemograman (`@intlayer/config`) menyelaraskannya seraya otomatis dikukuhkan kepada bentuk referensi bertuliskankan status `'false'` dan rujukan pengunci dari sisi / sisi koding pendefinisi tak ditemukan keberadaannya dari sisi koding acuan konfigurasi (`editor.clientId`). Proses berkesinambungan menyingkirkan elemen mati demi mencegah rupa serpihan sampah ini disebut sebagai — fitur pembuangan dari elemen kode mubazir (atau perlakuan ini dikenal di dunia sistem sebagai pemicu dalam fungsi acuan yang disebut hal **dead-code-eliminate**).
|
|
182
|
+
|
|
183
|
+
## Dasbor (Dashboard): Halaman Analitik
|
|
184
|
+
|
|
185
|
+
Saat di mana perancangan rupa proyek Anda secara sempurna rampung & mampu / bisa mengambil dan menyalin kejadian di ranahnya — perincian perujukan sistem dari pemanggil pada tautan **Analytics** pada tampilan di dasbor/pusat fungsi rujukan operasional pada antarmuka ([Intlayer dashboard](https://app.intlayer.org/analytics)) maka bagian tersebut senantiasa terbuka dan tampak bila pengguna menentukan opsi ke sebuah perwujudan pilihan atau proyek tertentu di dalam kolom-menu samping dari layar antar-muka operasional (sidebar) dan tampil perinciannya:
|
|
186
|
+
|
|
187
|
+
- **Rujukan dari pengunjung atau pemakai / pelanggan atau pengguna-aktif harian** (Active users).
|
|
188
|
+
- **Hasil catatan perihal rincian rujukan harian pengunjung / orang yang berlalu lalang (today & last 7 days)**.
|
|
189
|
+
- Rangkaian catatan **halaman-halaman** sepanjang jeda hari (Page views) pada periode tertentu.
|
|
190
|
+
- Acuan grafis visual yang menjelaskan laju/rekaman harian orang berkunjung.
|
|
191
|
+
- Seksi-seksi pilihan untuk mengatur penjabaran berdasarkan perpaduan antara **wilayah/Daerah pilihan pengguna (Locales)** dari pengunjung & acuan per wilayah pemetaan ke-negara / geografi.
|
|
192
|
+
|
|
193
|
+
## Referensi API Backend (Backend API reference)
|
|
194
|
+
|
|
195
|
+
Untuk segenap rincian di dalam pangkalan yang bersinggungan langsung sewaktu proses perujukan atau pembacaan-data meniscayakan perlunya satu identifikasi atau rujukan data terpusat (authenticated); proses sebaliknya (pemasukan referensi / ingestion) dibebaskan dan dirujuk & diatur lewat sebaris kode (`clientId`) yang dideklarasikan secara tertanam di sekujur bentuk operasional rincian pembawa referensinya (body parameter).
|
|
196
|
+
|
|
197
|
+
| Method | Endpoint | Deskripsi |
|
|
198
|
+
| ------ | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
199
|
+
| `POST` | `/api/analytics/events` | Proses memasukkan referensi data per kumpulan data berantai (bersifat teruka, diatribusikan lewat `clientId`). |
|
|
200
|
+
| `GET` | `/api/analytics/overview` | Kalkulasi halaman (Page) / Daerah Bahasa (Locale) terhadap hasil perhitungan autentikasi keseluruhan. |
|
|
201
|
+
| `GET` | `/api/analytics/audience?days=30` | Menjabarkan serangkaian referensi harian untuk setiap ragam pengelompokannya berdasarkan rincian acuan. |
|
|
202
|
+
| `GET` | `/api/analytics/content-stats` | Kumpulan kalkulasi (total) untuk masing-masing wujud paparan / eksposur (berkelompok & dikategorikan). |
|
|
203
|
+
| `GET` | `/api/analytics/experiments/:experimentKey` | Nilai atau serangkaian nilai / referensi A/B test (pengaruh eksperimental dari wujud tampilan pembanding). |
|
|
204
|
+
|
|
205
|
+
Fungsi SDK Intlayer secara otomatis menyalurkan ragam instrumen pada fungsi ini melalui jalur kode ter-automasi lewat pemrograman, hal tersebut senantiasa berpedoman kepada fungsi kodingan yang sama dari sumber SDK ini.
|
|
206
|
+
Lihat / Pelajari selengkapnya seputar: [CMS SDK](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_CMS.md):
|
|
207
|
+
|
|
208
|
+
```ts fileName="analytics.ts"
|
|
209
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
210
|
+
import { analyticsEndpoint } from "@intlayer/api/analytics";
|
|
211
|
+
|
|
212
|
+
const cms = createIntlayerCMS();
|
|
213
|
+
|
|
214
|
+
const { data: audience } = await analyticsEndpoint(cms).getAudience(30);
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Tautan Berguna (Useful links)
|
|
218
|
+
|
|
219
|
+
- [Kamus Dinamis - Koleksi & Varian (Dynamic Dictionaries - Collections & Variants)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dynamic_dictionaries/index.md)
|
|
220
|
+
- [Intlayer CMS - CMS SDK](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_CMS.md)
|
|
221
|
+
- [Editor Visual Intlayer (Intlayer Visual Editor)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_visual_editor.md)
|
|
222
|
+
- [Referensi Konfigurasi (Configuration Reference)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/configuration.md)
|
|
223
|
+
- [Panduan Hosting Mandiri (Self-Hosting Guide)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/self_hosting.md)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-11-25
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-08-09
|
|
4
4
|
title: Optimasi Ukuran Bundle & Performa i18n
|
|
5
5
|
description: Kurangi ukuran bundle aplikasi Anda dengan mengoptimalkan konten internasionalisasi (i18n). Pelajari cara memanfaatkan tree shaking dan lazy loading untuk kamus menggunakan 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` dan `minify` kini bekerja di Next.js melalui `@intlayer/swc` — tidak perlu `babel.config.js`"
|
|
22
|
+
- version: 8.12.0
|
|
23
|
+
date: 2026-06-24
|
|
24
|
+
changes: "Mencantumkan plugin Babel dalam urutan pipeline yang diperlukan (extract → purge → minify → optimize) pada tabel referensi"
|
|
19
25
|
- version: 8.12.0
|
|
20
26
|
date: 2026-06-07
|
|
21
27
|
changes: "Menambahkan `intlayerPurgeBabelPlugin` dan `intlayerMinifyBabelPlugin` untuk Babel/Webpack; menjelaskan pipeline plugin"
|
|
@@ -191,12 +197,14 @@ Optimasi build dari Intlayer terbagi menjadi beberapa plugin terpisah yang masin
|
|
|
191
197
|
|
|
192
198
|
Plugin-plugin ini digunakan secara langsung di dalam `babel.config.js` untuk setup berbasis Webpack (Next.js dengan Babel, CRA, kustom Webpack, dll).
|
|
193
199
|
|
|
200
|
+
Tabel di bawah ini mencantumkannya dalam urutan pipeline yang diperlukan (urutan yang sama seperti yang harus muncul di `babel.config.js`):
|
|
201
|
+
|
|
194
202
|
| Plugin | Apa yang dilakukannya |
|
|
195
203
|
| :---------------------------- | :--------------------------------------------------------------------------------------------------------------------- |
|
|
196
204
|
| `intlayerExtractBabelPlugin` | Memindai file `.content.ts` dan menulis kamus yang telah dikompilasi ke direktori `.intlayer/` |
|
|
197
|
-
| `intlayerOptimizeBabelPlugin` | Menulis ulang `useIntlayer('key')` menjadi `useDictionary(hash)` dan menyuntikkan (injects) `import` kamus yang sesuai |
|
|
198
205
|
| `intlayerPurgeBabelPlugin` | Memindai semua file source, menghapus **field konten yang tidak terpakai** dari file kamus `.intlayer/**/*.json` |
|
|
199
206
|
| `intlayerMinifyBabelPlugin` | **Mengganti nama kunci (keys) konten** menjadi alias alfabet yang pendek (`title` → `a`) di file JSON maupun source |
|
|
207
|
+
| `intlayerOptimizeBabelPlugin` | Menulis ulang `useIntlayer('key')` menjadi `useDictionary(hash)` dan menyuntikkan (injects) `import` kamus yang sesuai |
|
|
200
208
|
|
|
201
209
|
> **Urutan plugin sangat penting.** Di dalam `babel.config.js`, plugin purge dan minify harus ditempatkan **sebelum** plugin optimize. Langkah optimize menggantikan `useIntlayer('key')` dengan pemanggilan `useDictionary(hash)` yang menyembunyikan informasi 'key' dari kamus. Informasi 'key' ini sangat diperlukan oleh tahap purge dan minify untuk mengidentifikasi field mana yang dipakai.
|
|
202
210
|
|
|
@@ -205,9 +213,9 @@ Setiap plugin Babel memiliki "options helper" yang berhubungan untuk membaca `in
|
|
|
205
213
|
| Options helper | Digunakan dengan |
|
|
206
214
|
| :--------------------------- | :---------------------------- |
|
|
207
215
|
| `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
|
|
208
|
-
| `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
|
|
209
216
|
| `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
|
|
210
217
|
| `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
|
|
218
|
+
| `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
|
|
211
219
|
|
|
212
220
|
### Plugin Vite (`vite-intlayer`)
|
|
213
221
|
|
|
@@ -220,6 +228,20 @@ Pengguna Vite **tidak pernah mengonfigurasi ini secara langsung**. Plugin ini te
|
|
|
220
228
|
| Dictionary minify | Sama seperti pass penulisan JSON dari `intlayerMinifyBabelPlugin` |
|
|
221
229
|
| Babel transform | Sama seperti penggantian nama kode dari `intlayerMinifyBabelPlugin` + `intlayerOptimizeBabelPlugin` |
|
|
222
230
|
|
|
231
|
+
### Plugin SWC (`@intlayer/swc`)
|
|
232
|
+
|
|
233
|
+
Pengguna Next.js juga **tidak pernah mengonfigurasi ini secara langsung**. Sejak **v9.2.1**, `withIntlayer()` di `next.config.ts` menjalankan seluruh pipeline — purge, minify, dan penulisan ulang import — hanya berdasarkan flag `build.purge` dan `build.minify`.
|
|
234
|
+
|
|
235
|
+
Pekerjaan dibagi menjadi dua, karena plugin Wasm SWC mentransformasi satu berkas dalam satu waktu dan tidak memiliki akses ke sistem berkas:
|
|
236
|
+
|
|
237
|
+
| Tahap | Di mana dijalankan | Apa yang dilakukan |
|
|
238
|
+
| :---------------------------------------------- | :------------------------------ | :-------------------------------------------------------------------------------------------------------------- |
|
|
239
|
+
| Analisis penggunaan + purge/minify JSON | Node, di dalam `withIntlayer()` | Membaca setiap berkas sumber komponen, menulis ulang `.intlayer/**/*.json`, menghasilkan tabel penggantian nama |
|
|
240
|
+
| Penulisan ulang sumber (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | Menerapkan tabel penggantian nama pada akses properti yang sesuai di kode Anda |
|
|
241
|
+
| Penulisan ulang import (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | Sama seperti `intlayerOptimizeBabelPlugin` |
|
|
242
|
+
|
|
243
|
+
Menentukan _bidang mana_ yang tidak terpakai dan _alias apa_ yang diterima masing-masing memerlukan status lintas berkas dan I/O berkas, sehingga separuh itu berjalan di Node; plugin SWC hanya menerima tabel hasilnya.
|
|
244
|
+
|
|
223
245
|
## Setup berdasarkan Platform
|
|
224
246
|
|
|
225
247
|
<Tabs>
|
|
@@ -227,10 +249,12 @@ Pengguna Vite **tidak pernah mengonfigurasi ini secara langsung**. Plugin ini te
|
|
|
227
249
|
|
|
228
250
|
### Next.js
|
|
229
251
|
|
|
230
|
-
Next.js memerlukan plugin `@intlayer/swc
|
|
252
|
+
Next.js memerlukan plugin `@intlayer/swc`, karena Next.js menggunakan SWC untuk build. Sejak **v9.2.1**, satu paket ini mencakup seluruh pipeline — optimasi (penulisan ulang import), purge, dan minify.
|
|
231
253
|
|
|
232
254
|
> Plugin ini tidak terpasang secara default karena plugin SWC masih berada pada tahap eksperimental untuk Next.js. Hal ini dapat berubah di masa yang akan datang.
|
|
233
255
|
|
|
256
|
+
> **Next.js 16.1.0 adalah versi minimum.** Ini adalah rilis pertama yang dibangun di atas ABI plugin Wasm SWC yang kompatibel ke depan; rilis sebelumnya menolak plugin tersebut. `withIntlayer` membaca versi Next.js proyek Anda dan tidak mendaftarkan plugin sama sekali di bawah 16.1.0 — build tersebut tetap berhasil, hanya saja berjalan tanpa optimasi bundle.
|
|
257
|
+
|
|
234
258
|
<Tabs>
|
|
235
259
|
<Tab value="npm">
|
|
236
260
|
|
|
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
|
|
|
265
289
|
|
|
266
290
|
Setelah dipasang, Intlayer akan mendeteksi dan menggunakan plugin ini secara otomatis.
|
|
267
291
|
|
|
268
|
-
|
|
292
|
+
Tahap **purge dan minify** (penghapusan dan penggantian nama bidang) tidak memerlukan paket tambahan maupun `babel.config.js`. Bungkus konfigurasi Anda dengan `withIntlayer` dan aktifkan flag di `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 = {/* konfigurasi Anda */};
|
|
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: mengubah nama field konten di JSON + source code
|
|
288
|
-
[intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
|
|
289
|
-
// Catatan: intlayerOptimizeBabelPlugin TIDAK DIBUTUHKAN di sini karena
|
|
290
|
-
// @intlayer/swc yang menangani penggantian useIntlayer → useDictionary.
|
|
291
|
-
],
|
|
306
|
+
const config: IntlayerConfig = {
|
|
307
|
+
build: {
|
|
308
|
+
purge: true, // menghapus bidang konten yang tidak terpakai dari JSON yang dibundel
|
|
309
|
+
minify: true, // mengganti nama kunci bidang konten menjadi alias pendek
|
|
310
|
+
},
|
|
292
311
|
};
|
|
312
|
+
|
|
313
|
+
export default config;
|
|
293
314
|
```
|
|
294
315
|
|
|
316
|
+
Selama `next build`, `withIntlayer` menganalisis sumber Anda, menulis ulang kamus yang telah dikompilasi, dan meneruskan tabel penggantian nama bidang yang dihasilkan ke `@intlayer/swc`, yang memperbarui akses properti yang sesuai di kode Anda.
|
|
317
|
+
|
|
318
|
+
> Gunakan `withIntlayer` yang asinkron, bukan `withIntlayerSync`. Varian sinkron tidak menjalankan pipeline analisis, jadi purge dan minify tidak berpengaruh dengannya.
|
|
319
|
+
|
|
320
|
+
> Purge dan minify hanya berjalan pada `next build` — pipeline optimasi dimatikan selama `next dev`.
|
|
321
|
+
|
|
322
|
+
> Keduanya juga dinonaktifkan ketika pemanggil adapter kompatibilitas dikonfigurasi (`swcExtraCallers`, disetel oleh paket kompatibilitas seperti `@intlayer/next-intl` atau `@intlayer/react-i18next`): titik panggilan tersebut tidak terlihat oleh penganalisis penggunaan, sehingga purge akan menghapus bidang yang masih dibaca oleh kode. Penulisan ulang import tetap aktif.
|
|
323
|
+
|
|
324
|
+
**Versi sebelumnya (sebelum 9.2.1)** memerlukan `@intlayer/babel` dan sebuah `babel.config.js` yang mendeklarasikan `intlayerPurgeBabelPlugin` dan `intlayerMinifyBabelPlugin`. Berkas itu tidak lagi diperlukan dan dapat dihapus.
|
|
325
|
+
|
|
295
326
|
</Tab>
|
|
296
327
|
<Tab value="vite">
|
|
297
328
|
|
|
@@ -447,6 +478,8 @@ export default config;
|
|
|
447
478
|
|
|
448
479
|
> Minifikasi akan dilompati (skipped) bila `optimize` disetel menjadi `false` atau `editor.enabled` bernilai `true` (Visual editor sangat memerlukan nama field asli untuk mode pengeditan).
|
|
449
480
|
|
|
481
|
+
> Di Next.js, minifikasi juga dilewati ketika `@intlayer/swc` tidak terpasang atau tidak dapat dimuat (Next.js di bawah 16.1.0). Plugin inilah separuh yang menulis ulang akses di kode sumber, sehingga mengganti nama kamus tanpa plugin tersebut akan membuat kode Anda membaca nama bidang yang sudah tidak ada.
|
|
482
|
+
|
|
450
483
|
> Proses minifikasi ini juga akan dihiraukan jika file kamus dipanggil lewat `importMode: 'fetch'` karena file JSON tersebut dikirim dari API terpencil menggunakan nama struktur kunci originalnya. Apabila client mencoba melakukan minifikasi maka jembatan kontrak server/client akan rusak.
|
|
451
484
|
|
|
452
485
|
### Purging (penghapusan field konten tak terpakai)
|
|
@@ -475,7 +508,7 @@ export default config;
|
|
|
475
508
|
{ "title": "…", "subtitle": "…" }
|
|
476
509
|
```
|
|
477
510
|
|
|
478
|
-
> Purge akan dilompati ketika `optimize` bernilai `false` atau `editor.enabled` adalah `true`.
|
|
511
|
+
> Purge akan dilompati ketika `optimize` bernilai `false` atau `editor.enabled` adalah `true`. Di Next.js, ia juga dilewati ketika `@intlayer/swc` tidak tersedia dan ketika pemanggil adapter kompatibilitas dikonfigurasi.
|
|
479
512
|
|
|
480
513
|
> Secara konservatif, proses purge tidak akan dilaksanakan jika file asal (source file) gagal dipindai, atau pemanggilan `useIntlayer` disimpan di variabel untuk lalu disebarluaskan di mana proses pindaian statik tak mampu melacak jejaknya (contoh lewat spread function atau pengiriman prop secara untuh). Jika skenario ini terjadi, file kamus tak akan disentuh.
|
|
481
514
|
|
package/docs/id/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: Konfigurasi
|
|
5
5
|
description: Pelajari cara mengonfigurasi Intlayer untuk aplikasi Anda. Pahami berbagai pengaturan dan opsi yang tersedia untuk menyesuaikan Intlayer sesuai kebutuhan Anda.
|
|
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: "Menjadikan `routing.enableProxy` tiga keadaan: tidak diatur (auto), `true`, `false`"
|
|
17
20
|
- version: 9.0.0
|
|
18
21
|
date: 2026-07-11
|
|
19
22
|
changes: "Menambahkan konfigurasi `analytics`"
|
|
@@ -235,6 +238,19 @@ const config: IntlayerConfig = {
|
|
|
235
238
|
*/
|
|
236
239
|
mode: "prefix-no-default",
|
|
237
240
|
|
|
241
|
+
/**
|
|
242
|
+
* Mengaktifkan proxy perutean locale Intlayer (middleware).
|
|
243
|
+
* Menangani deteksi locale, pengalihan, dan penulisan ulang di dev, preview, dan SSR.
|
|
244
|
+
* - tidak diatur (auto): server dev dan preview menjaga perutean tetap digerakkan URL
|
|
245
|
+
* dengan mengabaikan locale yang tersimpan di cookie dan header. Prefiks tetap
|
|
246
|
+
* diselesaikan, locale tetap disimpan, dan deteksi Accept-Language tetap berlaku.
|
|
247
|
+
* Di produksi berperilaku seperti `true`.
|
|
248
|
+
* - true: perilaku penuh di setiap lingkungan.
|
|
249
|
+
* - false: tanpa perutean locale.
|
|
250
|
+
* Default: undefined (auto)
|
|
251
|
+
*/
|
|
252
|
+
enableProxy: undefined,
|
|
253
|
+
|
|
238
254
|
/**
|
|
239
255
|
* Tempat menyimpan locale yang dipilih pengguna.
|
|
240
256
|
* Opsi: 'cookie', 'localStorage', 'sessionStorage', 'header', atau array dari opsi ini.
|
|
@@ -713,13 +729,14 @@ Analitik bersifat opt-in secara ketat: tidak ada yang dikumpulkan kecuali `analy
|
|
|
713
729
|
|
|
714
730
|
Pengaturan yang mengontrol perilaku routing, termasuk struktur URL, penyimpanan locale, dan penanganan middleware.
|
|
715
731
|
|
|
716
|
-
| Bidang
|
|
717
|
-
|
|
|
718
|
-
| `mode`
|
|
719
|
-
| `
|
|
720
|
-
| `
|
|
721
|
-
| `
|
|
722
|
-
| `
|
|
732
|
+
| Bidang | Deskripsi | Tipe | Default | Contoh | Catatan |
|
|
733
|
+
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
734
|
+
| `mode` | Mode routing URL untuk penanganan locale. | `'prefix-no-default'` | <br/> `'prefix-all'` | <br/> `'no-prefix'` | <br/> `'search-params'` | `'prefix-no-default'` | `'prefix-no-default'`: `/dashboard` (en) atau `/fr/dashboard` (fr). `'prefix-all'`: `/en/dashboard`. `'no-prefix'`: locale ditangani melalui cara lain. `'search-params'`: `/dashboard?locale=fr` | Tidak berdampak pada manajemen cookie atau penyimpanan locale. |
|
|
735
|
+
| `enableProxy` | Mengaktifkan proxy perutean locale Intlayer (middleware). | `boolean` | <br/> `undefined` | `undefined` (auto) | `true` | • Tidak diatur (auto): server dev dan preview mengabaikan locale yang tersimpan di cookie/header sebagai sumber pengalihan; prefiks, penyimpanan, dan deteksi `Accept-Language` tetap berlaku. Di produksi berperilaku seperti `true`.<br/>• `true`: perilaku penuh di mana pun.<br/>• `false`: tanpa perutean locale. Di Next.js, middleware `intlayerProxy` menjadi pass-through. |
|
|
736
|
+
| `storage` | Konfigurasi untuk menyimpan locale di klien. | `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 }]` | Lihat tabel Opsi Penyimpanan di bawah. |
|
|
737
|
+
| `basePath` | Path dasar untuk URL aplikasi. | `string` | `''` | `'/my-app'` | Jika aplikasi berada di `https://example.com/my-app, basePath adalah `'/my-app'`dan URL menjadi`https://example.com/my-app/en`. |
|
|
738
|
+
| `rewrite` | Aturan penulisan ulang URL kustom yang mengesampingkan mode routing default untuk path tertentu. Mendukung parameter dinamis `[param]`. | `Record<string, StrictModeLocaleMap<string>>` | `undefined` | Lihat contoh di bawah | • Aturan penulisan ulang (rewrite) didahulukan daripada `mode`.<br/>• Berfungsi dengan Next.js dan Vite.<br/>• `getLocalizedUrl()` secara otomatis menerapkan aturan yang cocok.<br/>• Lihat [Penulisan Ulang URL Kustom](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/custom_url_rewrites.md). |
|
|
739
|
+
| `domains` | Memetakan locale ke nama host domain untuk routing berbasis domain. Jika diatur, URL untuk locale tersebut menggunakan domain ini sebagai basis (URL absolut) dan tidak ada prefiks locale yang ditambahkan ke path. | `Partial<Record<Locale, string>>` | `undefined` | `{ zh: 'intlayer.zh', fr: 'intlayer.org' }` | • Protokol default adalah `https://` jika tidak disertakan dalam hostname.<br/>• Domain itu sendiri mengidentifikasi locale, sehingga prefiks `/zh/` tidak ditambahkan.<br/>• `getLocalizedUrl('/', 'zh')` mengembalikan `https://intlayer.zh/`. |
|
|
723
740
|
|
|
724
741
|
**Contoh `rewrite`**:
|
|
725
742
|
|