@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legal.entry.d.ts","names":[],"sources":["../../../src/generated/legal.entry.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"legal.entry.d.ts","names":[],"sources":["../../../src/generated/legal.entry.ts"],"mappings":";;cAsFa;WACX,gCAmBgB,OAAO,eAAe;WACtC,kCAmBgB,OAAO,eAAe"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-07-08
|
|
3
|
+
updatedAt: 2026-07-08
|
|
4
|
+
title: Intlayer Analytics | تتبع عرض المحتوى وإجراء اختبارات A/B
|
|
5
|
+
description: اكتشف كيف يقوم @intlayer/analytics بتتبع مشاهدات الصفحات/اللغات وعرض المحتوى، وكيفية استخدامه لإجراء اختبارات A/B على محتوى Intlayer الخاص بك.
|
|
6
|
+
keywords:
|
|
7
|
+
- التحليلات
|
|
8
|
+
- اختبار A/B
|
|
9
|
+
- الجمهور
|
|
10
|
+
- التدويل (Internationalization)
|
|
11
|
+
- التوثيق
|
|
12
|
+
- Intlayer
|
|
13
|
+
- Next.js
|
|
14
|
+
- JavaScript
|
|
15
|
+
- React
|
|
16
|
+
slugs:
|
|
17
|
+
- doc
|
|
18
|
+
- concept
|
|
19
|
+
- analytics
|
|
20
|
+
history:
|
|
21
|
+
- version: 9.0.0
|
|
22
|
+
date: 2026-07-08
|
|
23
|
+
changes: "Init doc — @intlayer/analytics package, provider/node-level tracking, A/B testing, dashboard"
|
|
24
|
+
author: aymericzip
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# توثيق Intlayer Analytics
|
|
28
|
+
|
|
29
|
+
`@intlayer/analytics` هي حزمة مساعدة اختيارية تخبرك **بالمحتوى الذي يتم عرضه بالفعل** لزوارك — أي صفحة، بأي لغة (locale)، وأي جزء محدد من المحتوى المترجم — حتى تتمكن من فهم جمهورك وإجراء **اختبارات A/B على المحتوى**.
|
|
30
|
+
|
|
31
|
+
## جدول المحتويات
|
|
32
|
+
|
|
33
|
+
<TOC/>
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## ما الذي يتم تتبعه
|
|
38
|
+
|
|
39
|
+
تجمع حزمة `@intlayer/analytics` ثلاثة أنواع من الأحداث المجهولة في دفعات:
|
|
40
|
+
|
|
41
|
+
| الحدث (Event) | أين يتم التقاطه | ماذا يخبرك |
|
|
42
|
+
| ------------------ | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
|
|
43
|
+
| `page_view` | على مستوى المزود (`IntlayerProvider`) | أي صفحة ولغة شاهدتها الجلسة، عند التحميل الأولي، أو تغيير المسار، أو تبديل اللغة. |
|
|
44
|
+
| `content_exposure` | على مستوى العقدة (`useIntlayer` / إضافات المفسر) | أي مفتاح قاموس / مسار مفتاح تم حله وعرضه بالفعل — وإذا كان جزءًا من تجربة، أي **متغير (variant)** تم عرضه. |
|
|
45
|
+
| `conversion` | أينما تستدعي `useConversion()` | هدف تم تحقيقه (تسجيل، نقرة، شراء...) يُنسب إلى متغير A/B الذي تعرضت له الجلسة. |
|
|
46
|
+
|
|
47
|
+
يتم جمع الأحداث في الذاكرة وإرسالها كـ **طلب دفعة واحد كل 20 ثانية تقريبًا** — وليس عند كل ضغطة زر أو كل عملية تصيير (render) — لذا فإن التحليلات لا تؤثر أبدًا على وقت التصيير الأول ولا تضيف طلبًا عند كل تفاعل.
|
|
48
|
+
|
|
49
|
+
## كيف يدعم اختبارات A/B على المحتوى
|
|
50
|
+
|
|
51
|
+
يسمح لك Intlayer بالفعل بتعريف [متغيرات المحتوى (Variants)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dynamic_dictionaries/index.md) (على سبيل المثال، قاموس `hero-banner` مع متغير `control` ومتغير `black_friday`). حزمة `@intlayer/analytics` تغلق الدائرة:
|
|
52
|
+
|
|
53
|
+
1. دالة `getVariant(experimentKey, variants)` تخصص بشكل حتمي كل جلسة مجهولة لمتغير — وهي دالة بحتة تعتمد على معرف الجلسة ومفتاح التجربة، لذا فإن التخصيص يكون **مستقرًا طوال الجلسة** ولا يتطلب **أي اتصال بالخادم (server round-trip)** قبل التصيير الأول (بدون وميض، وبدون تحول في التخطيط).
|
|
54
|
+
2. كل حدث `content_exposure` يحمل الـ `variant` الذي تم عرضه.
|
|
55
|
+
3. تتيح لك `useConversion()` نسبة هدف (مثل `"cta_click"`) إلى ذلك المتغير.
|
|
56
|
+
4. تقارن نقطة نهاية (endpoint) نتائج التجربة في لوحة التحكم معدلات التحويل لكل متغير، بما في ذلك الدلالة الإحصائية (اختبار z).
|
|
57
|
+
|
|
58
|
+
## التثبيت
|
|
59
|
+
|
|
60
|
+
حزمة `@intlayer/analytics` هي **تبعية نظيرة واختيارية (peer, optional)** — لا يتم تثبيتها تلقائيًا أبدًا بواسطة حزم إطارات العمل. أضفها جنبًا إلى جنب مع `intlayer`:
|
|
61
|
+
|
|
62
|
+
```bash packageManager="npm"
|
|
63
|
+
npm install @intlayer/analytics
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```bash packageManager="yarn"
|
|
67
|
+
yarn add @intlayer/analytics
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```bash packageManager="pnpm"
|
|
71
|
+
pnpm add @intlayer/analytics
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```bash packageManager="bun"
|
|
75
|
+
bun add @intlayer/analytics
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
إذا لم تقم بتثبيتها، فإن كل نقطة تكامل تتحول إلى عملية لا تفعل شيئًا (no-op) — انظر [تكلفة صفرية عند عدم التثبيت](#تكلفة-صفرية-عند-عدم-التثبيت) أدناه.
|
|
79
|
+
|
|
80
|
+
## التكوين (Configuration)
|
|
81
|
+
|
|
82
|
+
التحليلات **تعيد استخدام كتلة التكوين `editor` الحالية** — لا يوجد مخطط تكوين `analytics` منفصل لملئه:
|
|
83
|
+
|
|
84
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
85
|
+
import type { IntlayerConfig } from "intlayer";
|
|
86
|
+
|
|
87
|
+
const config: IntlayerConfig = {
|
|
88
|
+
editor: {
|
|
89
|
+
backendURL: "https://back.intlayer.org", // يستخدم أيضًا كنقطة نهاية لاستيعاب أحداث التحليلات
|
|
90
|
+
clientId: "your-client-id", // يستخدم أيضًا كمفتاح مشروع التحليلات
|
|
91
|
+
clientSecret: "your-client-secret",
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export default config;
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
- `editor.backendURL` — عنوان URL الأساسي الذي يتم إرسال أحداث التحليلات إليه (`POST {backendURL}/api/analytics/events`).
|
|
99
|
+
- `editor.clientId` — مفتاح المشروع العام المنسوب إلى كل حدث يتم استيعابه. وهو يعمل أيضًا كـ **مفتاح تفعيل**: تظل التحليلات معطلة تمامًا (ومحذوفة كتعليمات برمجية ميتة، انظر أدناه) حتى يتم تكوين `clientId`.
|
|
100
|
+
|
|
101
|
+
إذا قمت بالاستضافة الذاتية لـ Intlayer (self-host)، فإن التحليلات تشير تلقائيًا إلى النسخة الخاصة بك لأنها تتشارك `editor.backendURL`.
|
|
102
|
+
|
|
103
|
+
## دعم إطارات العمل
|
|
104
|
+
|
|
105
|
+
التحليلات مدمجة في `IntlayerProvider` المشترك من `react-intlayer`، لذا فهي متاحة اليوم في أي مكان يُستخدم فيه هذا المزود:
|
|
106
|
+
|
|
107
|
+
| إطار العمل (Framework) | الحالة (Status) |
|
|
108
|
+
| -------------------------------------------------------- | ------------------------------------------------------------------------------------ |
|
|
109
|
+
| React | ✅ متاح |
|
|
110
|
+
| Next.js (`next-intlayer`) | ✅ متاح (عبر `react-intlayer`) |
|
|
111
|
+
| React Native / Expo (`react-native-intlayer`) | ✅ متاح (عبر `react-intlayer`) |
|
|
112
|
+
| Vue, Svelte, Angular, Solid, Preact, Lit, Astro, Vanilla | 🚧 مخطط له — نفس العميل، ارتباطات على مستوى المزود تتبع نمط إطلاق `@intlayer/editor` |
|
|
113
|
+
|
|
114
|
+
## الاستخدام
|
|
115
|
+
|
|
116
|
+
### التتبع التلقائي على مستوى المزود
|
|
117
|
+
|
|
118
|
+
لا توجد تغييرات برمجية مطلوبة. بمجرد تثبيت `@intlayer/analytics` وتكوين `editor.clientId`، يقوم `IntlayerProvider` تلقائيًا بـ:
|
|
119
|
+
|
|
120
|
+
- تهيئة عميل التحليلات عند التحميل (mount)،
|
|
121
|
+
- تسجيل `page_view` عند التحميل الأولي،
|
|
122
|
+
- تسجيل `page_view` عند كل تغيير في اللغة (locale)،
|
|
123
|
+
- بدء حلقة الإرسال كل ~20 ثانية وإرسال أي أحداث متبقية عند إزالة التحميل / إغلاق التبويب (عبر `navigator.sendBeacon`، مع العودة إلى `fetch(..., { keepalive: true })`).
|
|
124
|
+
|
|
125
|
+
### التتبع التلقائي على مستوى العقدة (Node)
|
|
126
|
+
|
|
127
|
+
في كل مرة يقوم فيها `useIntlayer` بحل جزء من المحتوى لعرضه، يقوم المفسر بالإبلاغ عن حدث `content_exposure` لذلك الـ `dictionaryKey` المحدد + مسار المفتاح + اللغة — مرة أخرى، لا توجد تغييرات برمجية مطلوبة. يتم تجميع مرات العرض المتكررة لنفس العقدة داخل نافذة الإرسال في حدث واحد مع `count` (عدد)، لذلك فإن القائمة التي تتم إعادة تصييرها 50 مرة لا ترسل 50 حدثًا.
|
|
128
|
+
|
|
129
|
+
### تتبع التحويلات (Conversions) لاختبارات A/B
|
|
130
|
+
|
|
131
|
+
استخدم `useConversion()` لنسبة هدف إلى المتغير الذي شاهدته الجلسة:
|
|
132
|
+
|
|
133
|
+
```tsx fileName="CTAButton.tsx" codeFormat="tsx"
|
|
134
|
+
import { useConversion } from "react-intlayer";
|
|
135
|
+
|
|
136
|
+
const CTAButton = () => {
|
|
137
|
+
const trackConversion = useConversion();
|
|
138
|
+
|
|
139
|
+
return (
|
|
140
|
+
<button
|
|
141
|
+
onClick={() =>
|
|
142
|
+
trackConversion({
|
|
143
|
+
experimentKey: "homepage-hero",
|
|
144
|
+
variant: "black_friday",
|
|
145
|
+
goal: "cta_click",
|
|
146
|
+
})
|
|
147
|
+
}
|
|
148
|
+
>
|
|
149
|
+
ابدأ الآن
|
|
150
|
+
</button>
|
|
151
|
+
);
|
|
152
|
+
};
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### حل متغير على جانب العميل
|
|
156
|
+
|
|
157
|
+
```tsx fileName="useHeroVariant.ts" codeFormat="tsx"
|
|
158
|
+
import { getGlobalAnalyticsClient } from "@intlayer/analytics/client";
|
|
159
|
+
|
|
160
|
+
const client = getGlobalAnalyticsClient();
|
|
161
|
+
const variant = client?.getVariant("homepage-hero", [
|
|
162
|
+
"control",
|
|
163
|
+
"black_friday",
|
|
164
|
+
]);
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## الخصوصية والأداء
|
|
168
|
+
|
|
169
|
+
- **مجهول حسب التصميم**: يتم تحديد الجلسات بواسطة معرّف متغير (rotating id)؛ وتقوم الواجهة الخلفية (backend) دائمًا بتخزين **تجزئة SHA-256** فقط لهذا المعرف — ولا تقوم أبدًا بتخزين المعرف الخام، ولا تقوم أبدًا بتخزين عنوان IP.
|
|
170
|
+
- **الموقع تقريبي**: فقط رمز الدولة، المستمد من رؤوس تحديد الموقع الجغرافي الخاصة بشبكة CDN (مثل `cf-ipcountry`، `x-vercel-ip-country`، ...) — لا يتم قراءة أو تخزين أي IP.
|
|
171
|
+
- **تستبعد عناوين URL معلمات البحث** افتراضيًا، لذلك لا يتم التقاط سلاسل الاستعلام (query strings) أبدًا.
|
|
172
|
+
- **أخذ العينات (Sampling)**: يتيح لك `sampleRate` الاحتفاظ بجزء بسيط فقط من أحداث عرض المحتوى في التطبيقات ذات حركة المرور العالية.
|
|
173
|
+
- **معالجة مجمعة (Batched)**: طلب واحد تقريبًا كل 20 ثانية (`flushInterval`)، أو في وقت مبكر إذا امتلأت الذاكرة المؤقتة (`maxBufferSize`) — لا يتم أبدًا إرسال طلب واحد لكل حدث.
|
|
174
|
+
|
|
175
|
+
### تكلفة صفرية عند عدم التثبيت
|
|
176
|
+
|
|
177
|
+
تتبع `@intlayer/analytics` نفس نمط التبعية الاختيارية المتبع في `@intlayer/editor`:
|
|
178
|
+
|
|
179
|
+
- تقوم كل نقطة تكامل بتحميل الحزمة عبر **استيراد ديناميكي `import()` مغلف بـ `try/catch`** — التطبيق الذي لم يقم أبدًا بتثبيت `@intlayer/analytics` لا يدفع أي تكلفة لحجم الحزمة أو وقت التشغيل، ولا يرى خطأ أبدًا؛
|
|
180
|
+
- متغير البيئة في وقت التجميع (`INTLAYER_ANALYTICS_ENABLED`)، والذي يتم تعيينه تلقائيًا إلى `'false'` بواسطة `@intlayer/config` كلما لم يتم تكوين `editor.clientId`، يسمح للمجمعين (bundlers) بـ **إزالة التعليمات البرمجية الميتة (dead-code-eliminate)** للتكامل بأكمله؛
|
|
181
|
+
- يتم تعطيل التحليلات داخل نافذة إطار المعاينة (iframe) الخاصة بمحرر Intlayer / CMS، لذا لا يتم حساب جلسات المحرر كحركة مرور حقيقية أبدًا.
|
|
182
|
+
|
|
183
|
+
## لوحة التحكم (Dashboard): صفحة التحليلات
|
|
184
|
+
|
|
185
|
+
بمجرد أن يجمع مشروعك الأحداث، فإن صفحة **التحليلات (Analytics)** في [لوحة تحكم Intlayer](https://app.intlayer.org/analytics) (تظهر في الشريط الجانبي بمجرد تحديد المشروع) تعرض:
|
|
186
|
+
|
|
187
|
+
- **المستخدمين النشطين** — الزوار الفريدين خلال النافذة الزمنية المحددة (7 / 30 / 90 يومًا).
|
|
188
|
+
- **المستخدمين اليوم** و **المستخدمين خلال آخر 7 أيام**.
|
|
189
|
+
- **مشاهدات الصفحة** خلال النافذة المحددة.
|
|
190
|
+
- **رسم بياني للتطور** للزوار الفريدين اليوميين.
|
|
191
|
+
- علامات تبويب لتحليل **اللغات (Locales)** و **الموقع (Location)**، مما يصنف جمهورك حسب اللغة وحسب البلد.
|
|
192
|
+
|
|
193
|
+
## مرجع واجهة برمجة تطبيقات الواجهة الخلفية (Backend API)
|
|
194
|
+
|
|
195
|
+
تتطلب جميع نقاط نهاية القراءة المصادقة؛ استيعاب البيانات عام وينسب إلى `clientId`.
|
|
196
|
+
|
|
197
|
+
| الطريقة (Method) | نقطة النهاية (Endpoint) | الوصف (Description) |
|
|
198
|
+
| ---------------- | ------------------------------------------- | ---------------------------------------------------------------------- |
|
|
199
|
+
| `POST` | `/api/analytics/events` | استيعاب دفعة من الأحداث (عام، يُنسب بواسطة `clientId` في جسم الطلب). |
|
|
200
|
+
| `GET` | `/api/analytics/overview` | إجماليات الصفحة/اللغة للمشروع الموثق. |
|
|
201
|
+
| `GET` | `/api/analytics/audience?days=30` | زوار فريدون، مشاهدات الصفحة، سلاسل يومية، تفصيلات اللغة + البلد. |
|
|
202
|
+
| `GET` | `/api/analytics/content-stats` | إجماليات عرض كل محتوى، مجمعة حسب مفتاح القاموس / مسار المفتاح / اللغة. |
|
|
203
|
+
| `GET` | `/api/analytics/experiments/:experimentKey` | معدلات التحويل لكل متغير والدلالة الإحصائية لتجربة A/B. |
|
|
204
|
+
|
|
205
|
+
يمكنك أيضًا استدعاء هذه النقاط برمجيًا باستخدام [CMS SDK](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_CMS.md):
|
|
206
|
+
|
|
207
|
+
```ts fileName="analytics.ts"
|
|
208
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
209
|
+
import { analyticsEndpoint } from "@intlayer/api/analytics";
|
|
210
|
+
|
|
211
|
+
const cms = createIntlayerCMS();
|
|
212
|
+
|
|
213
|
+
const { data: audience } = await analyticsEndpoint(cms).getAudience(30);
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## روابط مفيدة
|
|
217
|
+
|
|
218
|
+
- [القواميس الديناميكية - المجموعات والمتغيرات](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/dynamic_dictionaries/index.md)
|
|
219
|
+
- [Intlayer CMS - CMS SDK](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_CMS.md)
|
|
220
|
+
- [محرر Intlayer المرئي](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/intlayer_visual_editor.md)
|
|
221
|
+
- [مرجع التكوين](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md)
|
|
222
|
+
- [دليل الاستضافة الذاتية (Self-Hosting)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/self_hosting.md)
|
package/docs/ar/autoFill.md
CHANGED
|
@@ -75,11 +75,30 @@ author: aymericzip
|
|
|
75
75
|
|
|
76
76
|
عند استخدام خيار المسار للكتابة إلى ملف آخر، تعمل آلية الملء من خلال علاقة _master-slave_ بين ملفات إعلان المحتوى. يعمل الملف الرئيسي (master) كمصدر الحقيقة، وعند تحديثه، سيقوم Intlayer تلقائياً بتطبيق تلك التغييرات على ملفات إعلان المحتوى المشتقة (المملوءة) المحددة بواسطة المسار.
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
### تخصيص لكل Locale
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
يمكنك أيضًا تخصيص السلوك لكل locale باستخدام كائن:
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
```ts fileName="intlayer.config.ts"
|
|
83
|
+
const config: IntlayerConfig = {
|
|
84
|
+
content: {
|
|
85
|
+
internationalization: {
|
|
86
|
+
locales: [Locales.ENGLISH, Locales.FRENCH, Locales.POLISH],
|
|
87
|
+
defaultLocale: Locales.ENGLISH,
|
|
88
|
+
requiredLocales: [Locales.ENGLISH], // يُنصح به لتجنب Property 'pl' is missing in type '{ en: string; xxx } على دالة t الخاصة بك إذا
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
dictionary: {
|
|
92
|
+
fill: {
|
|
93
|
+
en: true, // ملء وتعديل الملف الحالي للغة الإنجليزية
|
|
94
|
+
fr: "./translations/fr.json", // إنشاء ملف منفصل للفرنسية
|
|
95
|
+
es: false, // تعطيل الملء للإسبانية
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
هذا يسمح لك بوجود سلوكيات ملء مختلفة لـ locales مختلفة ضمن نفس المشروع.
|
|
83
102
|
|
|
84
103
|
```ts fileName="src/components/example/example.content.ts"
|
|
85
104
|
import { Locales, type Dictionary } from "intlayer";
|
|
@@ -87,18 +106,18 @@ import { Locales, type Dictionary } from "intlayer";
|
|
|
87
106
|
const exampleContent = {
|
|
88
107
|
key: "example",
|
|
89
108
|
locale: Locales.ENGLISH,
|
|
90
|
-
|
|
109
|
+
fill: "./example.content.json",
|
|
91
110
|
content: {
|
|
92
|
-
contentExample: "
|
|
111
|
+
contentExample: "This is an example of content",
|
|
93
112
|
},
|
|
94
113
|
} satisfies Dictionary;
|
|
95
114
|
|
|
96
115
|
export default exampleContent;
|
|
97
116
|
```
|
|
98
117
|
|
|
99
|
-
إليك [ملف إعلان
|
|
118
|
+
إليك [ملف إعلان المحتوى لكل locale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/per_locale_file.md) باستخدام تعليمات `fill`.
|
|
100
119
|
|
|
101
|
-
|
|
120
|
+
بعد ذلك، عند تشغيل الأمر التالي:
|
|
102
121
|
|
|
103
122
|
```bash packageManager="npm"
|
|
104
123
|
npx intlayer fill --file 'src/components/example/example.content.ts'
|
|
@@ -116,7 +135,7 @@ pnpm intlayer fill --file 'src/components/example/example.content.ts'
|
|
|
116
135
|
bun x intlayer fill --file 'src/components/example/example.content.ts'
|
|
117
136
|
```
|
|
118
137
|
|
|
119
|
-
سيقوم Intlayer تلقائيًا بإنشاء ملف الإعلان المشتق في `src/components/example/example.content.json`،
|
|
138
|
+
سيقوم Intlayer تلقائيًا بإنشاء ملف الإعلان المشتق في `src/components/example/example.content.json`، وملء جميع locales التي لم يتم إعلانها بالفعل في الملف الرئيسي.
|
|
120
139
|
|
|
121
140
|
```json5 fileName="src/components/example/example.content.json"
|
|
122
141
|
{
|
|
@@ -133,7 +152,7 @@ bun x intlayer fill --file 'src/components/example/example.content.ts'
|
|
|
133
152
|
}
|
|
134
153
|
```
|
|
135
154
|
|
|
136
|
-
بعد ذلك، سيتم دمج
|
|
155
|
+
بعد ذلك، سيتم دمج ملفات الإعلان معًا في قاموس واحد، يمكن الوصول إليه باستخدام hook `useIntlayer("example")` القياسي (react) / composable (vue).
|
|
137
156
|
|
|
138
157
|
## الإعدادات العامة
|
|
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: تحسين حجم وأداء حزمة i18n
|
|
5
5
|
description: قم بتقليل حجم حزمة تطبيقك عن طريق تحسين محتوى التدويل (i18n). تعلم كيفية الاستفادة من "tree shaking" والتحميل الكسول (lazy loading) للقواميس مع 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` و`minify` تعمل الآن على Next.js عبر `@intlayer/swc` — لا حاجة إلى `babel.config.js`"
|
|
22
|
+
- version: 8.12.0
|
|
23
|
+
date: 2026-06-24
|
|
24
|
+
changes: "سرد إضافات Babel بالترتيب المطلوب لخط المعالجة (extract → purge → minify → optimize) في الجداول المرجعية"
|
|
19
25
|
- version: 8.12.0
|
|
20
26
|
date: 2026-06-07
|
|
21
27
|
changes: "تمت إضافة `intlayerPurgeBabelPlugin` و `intlayerMinifyBabelPlugin` لـ Babel/Webpack؛ توضيح مسار الإضافات (plugin pipeline)"
|
|
@@ -191,12 +197,14 @@ export default {
|
|
|
191
197
|
|
|
192
198
|
تُستخدم هذه مباشرة في `babel.config.js` للإعدادات المستندة إلى Webpack (مثل Next.js مع Babel، CRA، Webpack المخصص، إلخ).
|
|
193
199
|
|
|
200
|
+
يسرد الجدول أدناه هذه الإضافات بالترتيب المطلوب لخط المعالجة (وهو الترتيب نفسه الذي يجب أن تظهر به في `babel.config.js`):
|
|
201
|
+
|
|
194
202
|
| الإضافة | ما تفعله |
|
|
195
203
|
| :---------------------------- | :------------------------------------------------------------------------------------------------------------------- |
|
|
196
204
|
| `intlayerExtractBabelPlugin` | تمسح ملفات `.content.ts` وتكتب القواميس المجمعة إلى `.intlayer/` |
|
|
197
|
-
| `intlayerOptimizeBabelPlugin` | تعيد كتابة `useIntlayer('key')` → `useDictionary(hash)` وتحقن الـ `import` المطابق للقاموس |
|
|
198
205
|
| `intlayerPurgeBabelPlugin` | تمسح جميع ملفات المصدر، تزيل **حقول المحتوى غير المستخدمة** من ملفات القاموس المجمعة `.intlayer/**/*.json` |
|
|
199
206
|
| `intlayerMinifyBabelPlugin` | **تعيد تسمية مفاتيح حقول المحتوى** إلى أسماء مستعارة أبجدية قصيرة (`title` → `a`) في كل من ملفات JSON والكود المصدري |
|
|
207
|
+
| `intlayerOptimizeBabelPlugin` | تعيد كتابة `useIntlayer('key')` → `useDictionary(hash)` وتحقن الـ `import` المطابق للقاموس |
|
|
200
208
|
|
|
201
209
|
> **ترتيب الإضافات مهم.** في `babel.config.js` يجب أن تظهر إضافات التطهير (purge) والتصغير (minify) **قبل** إضافة التحسين (optimize). تقوم خطوة التحسين باستبدال `useIntlayer('key')` باستدعاء مبهم لـ `useDictionary(hash)`، مما يمحو معلومات مفتاح القاموس التي تحتاجها خطوات التطهير والتصغير لتحديد الحقول المستخدمة.
|
|
202
210
|
|
|
@@ -205,9 +213,9 @@ export default {
|
|
|
205
213
|
| مساعد الخيارات (Options helper) | يُستخدم مع |
|
|
206
214
|
| :------------------------------ | :---------------------------- |
|
|
207
215
|
| `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
|
|
208
|
-
| `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
|
|
209
216
|
| `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
|
|
210
217
|
| `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
|
|
218
|
+
| `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
|
|
211
219
|
|
|
212
220
|
### إضافات Vite (`vite-intlayer`)
|
|
213
221
|
|
|
@@ -220,6 +228,20 @@ export default {
|
|
|
220
228
|
| Dictionary minify | نفس مسار كتابة JSON في `intlayerMinifyBabelPlugin` |
|
|
221
229
|
| Babel transform | نفس مسار إعادة تسمية كود المصدر لـ `intlayerMinifyBabelPlugin` + `intlayerOptimizeBabelPlugin` |
|
|
222
230
|
|
|
231
|
+
### إضافة SWC (`@intlayer/swc`)
|
|
232
|
+
|
|
233
|
+
مستخدمو Next.js أيضًا **لا يهيئون هذه الإضافات مباشرةً أبدًا**. منذ الإصدار **v9.2.1**، تشغّل `withIntlayer()` في `next.config.ts` خط المعالجة الكامل — التنقية والتصغير وإعادة كتابة عمليات الاستيراد — اعتمادًا على العَلَمين `build.purge` و`build.minify` فقط.
|
|
234
|
+
|
|
235
|
+
العمل مقسوم إلى نصفين، لأن إضافة SWC بصيغة Wasm تحوّل ملفًا واحدًا في كل مرة ولا تملك وصولًا إلى نظام الملفات:
|
|
236
|
+
|
|
237
|
+
| المرحلة | أين تُنفَّذ | ماذا تفعل |
|
|
238
|
+
| :------------------------------------------- | :-------------------------- | :--------------------------------------------------------------------------------------- |
|
|
239
|
+
| تحليل الاستخدام + تنقية/تصغير JSON | Node، داخل `withIntlayer()` | تقرأ كل ملف مصدر للمكوّنات، وتعيد كتابة `.intlayer/**/*.json`، وتنتج جداول إعادة التسمية |
|
|
240
|
+
| إعادة كتابة المصدر (`content.title` ← `.a`) | `@intlayer/swc` (Wasm) | تطبّق جداول إعادة التسمية على عمليات الوصول إلى الخصائص المقابلة في شيفرتك |
|
|
241
|
+
| إعادة كتابة الاستيراد (`useIntlayer` ← dict) | `@intlayer/swc` (Wasm) | مثل `intlayerOptimizeBabelPlugin` |
|
|
242
|
+
|
|
243
|
+
إن تحديد _أي_ الحقول غير مستخدمة و_أي_ اسم مستعار يحصل عليه كل حقل يتطلب حالة عابرة للملفات وعمليات إدخال/إخراج على الملفات، لذلك يعمل ذلك النصف داخل Node؛ ولا تتلقى إضافة SWC سوى الجداول الناتجة.
|
|
244
|
+
|
|
223
245
|
## الإعداد حسب المنصة
|
|
224
246
|
|
|
225
247
|
<Tabs>
|
|
@@ -227,10 +249,12 @@ export default {
|
|
|
227
249
|
|
|
228
250
|
### Next.js
|
|
229
251
|
|
|
230
|
-
يتطلب Next.js إضافة `@intlayer/swc
|
|
252
|
+
يتطلب Next.js إضافة `@intlayer/swc`، لأن Next.js يستخدم SWC في عمليات البناء. منذ الإصدار **v9.2.1**، تغطي هذه الحزمة الواحدة خط المعالجة بأكمله — التحسين (إعادة كتابة الاستيراد) والتنقية والتصغير.
|
|
231
253
|
|
|
232
254
|
> لا يتم تثبيت هذا المكون الإضافي افتراضيًا لأن مكونات SWC لا تزال تجريبية لـ Next.js. قد يتغير هذا في المستقبل.
|
|
233
255
|
|
|
256
|
+
> **Next.js 16.1.0 هو الحد الأدنى للإصدار.** فهو أول إصدار مبني على واجهة ABI لإضافات Wasm المتوافقة مستقبليًا في SWC؛ أما الإصدارات الأقدم فترفض الإضافة. تقرأ `withIntlayer` إصدار Next.js في مشروعك ولا تسجّل الإضافة إطلاقًا دون 16.1.0 — وتظل تلك البناءات ناجحة، غير أنها تعمل من دون تحسين الحزمة.
|
|
257
|
+
|
|
234
258
|
<Tabs>
|
|
235
259
|
<Tab value="npm">
|
|
236
260
|
|
|
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
|
|
|
265
289
|
|
|
266
290
|
بمجرد التثبيت، سيكتشف Intlayer ويستخدم الإضافة تلقائيًا.
|
|
267
291
|
|
|
268
|
-
|
|
292
|
+
لا تحتاج مرحلتا **التنقية والتصغير** (إزالة الحقول وإعادة تسميتها) إلى أي حزمة إضافية ولا إلى `babel.config.js`. غلّف إعداداتك بـ `withIntlayer` وفعّل العَلَمين في `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 = {/* إعداداتك */};
|
|
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: يعيد تسمية مفاتيح حقول المحتوى في ملف JSON + الكود المصدري
|
|
288
|
-
[intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
|
|
289
|
-
// ملاحظة: intlayerOptimizeBabelPlugin غير مطلوب هنا لأن
|
|
290
|
-
// @intlayer/swc يتعامل مع إعادة كتابة useIntlayer → useDictionary.
|
|
291
|
-
],
|
|
306
|
+
const config: IntlayerConfig = {
|
|
307
|
+
build: {
|
|
308
|
+
purge: true, // يزيل حقول المحتوى غير المستخدمة من JSON المضمّن في الحزمة
|
|
309
|
+
minify: true, // يعيد تسمية مفاتيح حقول المحتوى إلى أسماء مستعارة قصيرة
|
|
310
|
+
},
|
|
292
311
|
};
|
|
312
|
+
|
|
313
|
+
export default config;
|
|
293
314
|
```
|
|
294
315
|
|
|
316
|
+
أثناء `next build`، تحلّل `withIntlayer` مصادرك، وتعيد كتابة القواميس المُجمَّعة، ثم تمرّر جداول إعادة تسمية الحقول الناتجة إلى `@intlayer/swc`، التي تحدّث عمليات الوصول إلى الخصائص المقابلة في شيفرتك.
|
|
317
|
+
|
|
318
|
+
> استخدم `withIntlayer` غير المتزامنة، لا `withIntlayerSync`. فالنسخة المتزامنة لا تشغّل خط معالجة التحليل، ولذلك لا أثر للتنقية والتصغير معها.
|
|
319
|
+
|
|
320
|
+
> تعمل التنقية والتصغير عند `next build` فقط — إذ يكون خط معالجة التحسين متوقفًا أثناء `next dev`.
|
|
321
|
+
|
|
322
|
+
> كما تتعطلان عند تهيئة مستدعِيات محوّلات التوافق (`swcExtraCallers`، التي تضبطها حزم التوافق مثل `@intlayer/next-intl` أو `@intlayer/react-i18next`): فمواضع الاستدعاء تلك غير مرئية لمحلّل الاستخدام، ومن ثم فإن التنقية ستزيل حقولًا لا تزال الشيفرة تقرؤها. أما إعادة كتابة الاستيراد فتبقى فعّالة.
|
|
323
|
+
|
|
324
|
+
**كانت الإصدارات الأقدم (قبل 9.2.1)** تتطلب `@intlayer/babel` وملف `babel.config.js` يعلن `intlayerPurgeBabelPlugin` و`intlayerMinifyBabelPlugin`. لم يعد ذلك الملف ضروريًا ويمكن حذفه.
|
|
325
|
+
|
|
295
326
|
</Tab>
|
|
296
327
|
<Tab value="vite">
|
|
297
328
|
|
|
@@ -447,6 +478,8 @@ export default config;
|
|
|
447
478
|
|
|
448
479
|
> يتم تخطي التصغير عندما يكون `optimize` في وضع `false` أو عندما يكون `editor.enabled` في وضع `true` (يحتاج المحرر المرئي إلى أسماء الحقول الأصلية للسماح بالتحرير).
|
|
449
480
|
|
|
481
|
+
> في Next.js، يُتخطى التصغير أيضًا عندما لا تكون `@intlayer/swc` مثبّتة أو يتعذر تحميلها (إصدار Next.js أقل من 16.1.0). فالإضافة هي النصف الذي يعيد كتابة عمليات الوصول في المصدر، ومن ثم فإن إعادة تسمية القواميس من دونها ستترك شيفرتك تقرأ أسماء حقول لم تعد موجودة.
|
|
482
|
+
|
|
450
483
|
> يتم أيضًا تخطي التصغير بالنسبة للقواميس التي تم تحميلها عبر `importMode: 'fetch'` لأن ملف JSON الخاص بهم يُقدّم من واجهة برمجة تطبيقات (API) بعيدة باستخدام أسماء الحقول الأصلية — سيؤدي تغيير أسماء المفاتيح من جانب العميل إلى كسر العقد بين الخادم/العميل.
|
|
451
484
|
|
|
452
485
|
### التطهير (إزالة الحقول غير المستخدمة)
|
|
@@ -475,7 +508,7 @@ export default config;
|
|
|
475
508
|
{ "title": "…", "subtitle": "…" }
|
|
476
509
|
```
|
|
477
510
|
|
|
478
|
-
> يتم تخطي التطهير (Purge) عندما يكون `optimize` في وضع `false` أو عندما يكون `editor.enabled` في وضع `true`.
|
|
511
|
+
> يتم تخطي التطهير (Purge) عندما يكون `optimize` في وضع `false` أو عندما يكون `editor.enabled` في وضع `true`. وفي Next.js تُتخطى كذلك عندما تكون `@intlayer/swc` غير متاحة، وعند تهيئة مستدعِيات محوّلات التوافق.
|
|
479
512
|
|
|
480
513
|
> يتم أيضًا تخطي التطهير كإجراء احترازي عندما يتعذر تحليل ملف المصدر، أو عندما يتم تعيين نتيجة `useIntlayer` لمتغير ويتم تمريرها بطرق لا يستطيع المحلل الثابت تتبعها (مثل وضعها في كائن بطريقة النشر، تمريرها كخاصية بدون تفكيك الهيكل). في تلك الحالات، يتم الاحتفاظ بالقاموس بالكامل.
|
|
481
514
|
|
package/docs/ar/configuration.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-13
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-08-06
|
|
4
4
|
title: الإعدادات (Configuration)
|
|
5
5
|
description: تعرف على كيفية إعداد Intlayer لتطبيقك. افهم الإعدادات والخيارات المختلفة المتاحة لتخصيص Intlayer وفقًا لاحتياجاتك.
|
|
6
6
|
keywords:
|
|
@@ -14,6 +14,9 @@ slugs:
|
|
|
14
14
|
- concept
|
|
15
15
|
- configuration
|
|
16
16
|
history:
|
|
17
|
+
- version: 9.1.3
|
|
18
|
+
date: 2026-08-06
|
|
19
|
+
changes: "جعل `routing.enableProxy` ثلاثي الحالات: غير محدد (auto)، `true`، `false`"
|
|
17
20
|
- version: 9.0.0
|
|
18
21
|
date: 2026-07-11
|
|
19
22
|
changes: "إضافة إعدادات `analytics`"
|
|
@@ -235,6 +238,19 @@ const config: IntlayerConfig = {
|
|
|
235
238
|
*/
|
|
236
239
|
mode: "prefix-no-default",
|
|
237
240
|
|
|
241
|
+
/**
|
|
242
|
+
* يفعّل وكيل توجيه اللغات في Intlayer (البرمجية الوسيطة).
|
|
243
|
+
* يتولى اكتشاف اللغة وإعادة التوجيه وإعادة الكتابة في dev وpreview وSSR.
|
|
244
|
+
* - غير محدد (auto): تُبقي خوادم dev وpreview التوجيه معتمدًا على الرابط،
|
|
245
|
+
* متجاهلةً اللغة المخزّنة في ملفات تعريف الارتباط والترويسات. تظل البادئات
|
|
246
|
+
* تُحلّ، وتظل اللغة تُحفظ، ويظل اكتشاف Accept-Language ساريًا.
|
|
247
|
+
* في الإنتاج يتصرف مثل `true`.
|
|
248
|
+
* - true: السلوك الكامل في جميع البيئات.
|
|
249
|
+
* - false: بدون توجيه للغات.
|
|
250
|
+
* الافتراضي: undefined (auto)
|
|
251
|
+
*/
|
|
252
|
+
enableProxy: undefined,
|
|
253
|
+
|
|
238
254
|
/**
|
|
239
255
|
* أين يتم تخزين اللغة التي يختارها المستخدم.
|
|
240
256
|
* الخيارات: 'cookie' أو 'localStorage' أو 'sessionStorage' أو 'header' أو مصفوفة منها.
|
|
@@ -706,13 +722,14 @@ export default config;
|
|
|
706
722
|
|
|
707
723
|
الإعدادات التي تتحكم في سلوك التوجيه، بما في ذلك بنية رابط URL، وتخزين اللغة، وإدارة البرمجيات الوسيطة.
|
|
708
724
|
|
|
709
|
-
| الحقل
|
|
710
|
-
|
|
|
711
|
-
| `mode`
|
|
712
|
-
| `
|
|
713
|
-
| `
|
|
714
|
-
| `
|
|
715
|
-
| `
|
|
725
|
+
| الحقل | الوصف | النوع | الافتراضي | مثال | ملاحظة |
|
|
726
|
+
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
727
|
+
| `mode` | وضع توجيه رابط URL لإدارة اللغات. | `'prefix-no-default'` | <br/> `'prefix-all'` | <br/> `'no-prefix'` | <br/> `'search-params'` | `'prefix-no-default'` | `'prefix-no-default'`: `/dashboard` (الإنجليزية) أو `/fr/dashboard` (الفرنسية). `'prefix-all'`: `/en/dashboard`. `'no-prefix'`: تتم إدارة اللغة بوسائل أخرى. `'search-params'`: `/dashboard?locale=fr` | لا يؤثر على إدارة الكوكيز أو تخزين اللغات. |
|
|
728
|
+
| `enableProxy` | يفعّل وكيل توجيه اللغات في Intlayer (البرمجية الوسيطة). | `boolean` | <br/> `undefined` | `undefined` (auto) | `true` | • غير محدد (auto): تتجاهل خوادم dev وpreview اللغة المخزّنة في ملفات تعريف الارتباط/الترويسات كمصدر لإعادة التوجيه؛ وتظل البادئات والحفظ واكتشاف `Accept-Language` سارية. في الإنتاج يتصرف مثل `true`.<br/>• `true`: السلوك الكامل في كل مكان.<br/>• `false`: بدون توجيه للغات. في Next.js تصبح البرمجية الوسيطة `intlayerProxy` مجرد ممر. |
|
|
729
|
+
| `storage` | إعدادات تخزين اللغة على العميل. | `false` | <br/> `'cookie'` | <br/> `'localStorage'` | <br/> `'sessionStorage'` | <br/> `'header'` | <br/> `CookiesAttributes` | <br/> `StorageAttributes` | <br/> `Array` | `['cookie', 'header']` | `'localStorage'` <br/> `[{ type: 'cookie', name: 'custom-locale', secure: true }]` | انظر جدول معالم التخزين أدناه. |
|
|
730
|
+
| `basePath` | المسار الأساسي لروابط التطبيق. | `string` | `''` | `'/my-app'` | إذا كان التطبيق يعمل على العنوان `https://example.com/my-app` ، فإن الـ basePath هو `'/my-app'` وتصبح الروابط `https://example.com/my-app/en`. |
|
|
731
|
+
| `rewrite` | قواعد إعادة كتابة رابط URL مخصصة تتجاوز وضع التوجيه الافتراضي لمسارات معينة. تدعم المعاملات الديناميكية `[param]`. | `Record<string, StrictModeLocaleMap<string>>` | `undefined` | انظر المثال أدناه | • لقواعد إعادة الكتابة أولوية على `mode`. <br/> • يعمل مع Next.js و Vite. <br/> • تقوم `getLocalizedUrl()` بتطبيق القواعد المناسبة تلقائياً. <br/> • انظر [إعادة كتابة روابط URL المخصصة](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/custom_url_rewrites.md). |
|
|
732
|
+
| `domains` | يربط اللغات بأسماء نطاقات الاستضافة للتوجيه القائم على النطاق. عند تعيينه، تستخدم روابط URL للغة ذلك النطاق كقاعدة (رابط URL مطلق) ولا يتم إضافة بادئة لغة إلى المسار. | `Partial<Record<Locale, string>>` | `undefined` | `{ zh: 'intlayer.zh', fr: 'intlayer.org' }` | • البروتوكول الافتراضي هو `https://` عندما لا يتم تضمينه في اسم الاستضافة.<br/>• النطاق نفسه يحدد اللغة، لذا لا يتم إضافة بادئة `/zh/`.<br/>• `getLocalizedUrl('/', 'zh')` يرجع `https://intlayer.zh/`. |
|
|
716
733
|
|
|
717
734
|
**مثال لـ `rewrite`**:
|
|
718
735
|
|
|
@@ -23,7 +23,9 @@ history:
|
|
|
23
23
|
author: aymericzip
|
|
24
24
|
---
|
|
25
25
|
|
|
26
|
-
# محتوى
|
|
26
|
+
# محتوى الملفات / دمج الملفات في Intlayer
|
|
27
|
+
|
|
28
|
+
في Intlayer، تسمح دالة `file` بدمج محتوى الملفات الخارجية في قاموس. يضمن هذا النهج أن Intlayer يتعرف على ملف المصدر، مما يتيح التكامل السلس مع محرر Intlayer المرئي و CMS.
|
|
27
29
|
|
|
28
30
|
## كيف يعمل تضمين الملفات
|
|
29
31
|
|