@intlayer/docs 9.1.3 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/rag_powered_documentation_assistant.md +7 -0
- package/blog/de/rag_powered_documentation_assistant.md +6 -0
- package/blog/en-GB/rag_powered_documentation_assistant.md +6 -0
- package/blog/es/rag_powered_documentation_assistant.md +7 -0
- package/blog/fr/i18n_meaning.md +7 -1
- package/blog/fr/list_i18n_technologies/frameworks/angular.md +5 -1
- package/blog/fr/rag_powered_documentation_assistant.md +6 -0
- package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +119 -42
- package/blog/hi/rag_powered_documentation_assistant.md +7 -0
- package/blog/id/rag_powered_documentation_assistant.md +6 -0
- package/blog/it/rag_powered_documentation_assistant.md +6 -0
- package/blog/ja/rag_powered_documentation_assistant.md +7 -0
- package/blog/ko/list_i18n_technologies/frameworks/react.md +7 -7
- package/blog/ko/rag_powered_documentation_assistant.md +6 -0
- package/blog/pl/rag_powered_documentation_assistant.md +6 -0
- package/blog/pt/rag_powered_documentation_assistant.md +6 -0
- package/blog/ru/rag_powered_documentation_assistant.md +7 -0
- package/blog/tr/intlayer_with_react-intl.md +3 -1
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +175 -42
- package/blog/tr/rag_powered_documentation_assistant.md +6 -0
- package/blog/uk/rag_powered_documentation_assistant.md +6 -0
- package/blog/vi/rag_powered_documentation_assistant.md +6 -0
- package/blog/zh/intlayer_with_i18next.md +87 -28
- package/blog/zh/intlayer_with_next-i18next.md +86 -29
- package/blog/zh/intlayer_with_next-intl.md +88 -28
- package/blog/zh/intlayer_with_react-i18next.md +87 -28
- package/blog/zh/intlayer_with_react-intl.md +88 -27
- package/blog/zh/intlayer_with_vue-i18n.md +117 -8
- package/blog/zh/rag_powered_documentation_assistant.md +6 -0
- package/dist/cjs/generated/blog.entry.cjs +27 -27
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +234 -214
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +17 -17
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +2 -2
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +27 -27
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +234 -214
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +17 -17
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +2 -2
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/analytics.md +222 -0
- package/docs/ar/autoFill.md +28 -9
- package/docs/ar/configuration.md +25 -8
- package/docs/ar/dictionary/file.md +3 -1
- package/docs/ar/dictionary/nesting.md +47 -30
- package/docs/ar/formatters.md +148 -193
- package/docs/ar/intlayer_CMS.md +152 -0
- package/docs/ar/intlayer_with_angular_21.md +9 -9
- package/docs/ar/intlayer_with_nextjs_14.md +1 -28
- package/docs/ar/intlayer_with_nextjs_15.md +1 -33
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +40 -83
- package/docs/ar/intlayer_with_solid_start.md +1078 -0
- package/docs/ar/intlayer_with_vite+vue.md +1 -3
- package/docs/ar/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ar/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ar/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/ar/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/ar/packages/vite-intlayer/exports.md +15 -0
- package/docs/ar/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ar/packages/vite-intlayer/intlayerPrune.md +70 -3
- package/docs/ar/releases/v9.md +0 -37
- package/docs/ar/self_hosting.md +46 -49
- package/docs/bn/configuration.md +25 -8
- package/docs/bn/intlayer_with_angular_21.md +9 -9
- package/docs/cs/configuration.md +25 -8
- package/docs/cs/intlayer_with_angular_21.md +9 -9
- package/docs/de/analytics.md +222 -0
- package/docs/de/autoFill.md +28 -9
- package/docs/de/configuration.md +25 -8
- package/docs/de/dictionary/file.md +3 -1
- package/docs/de/dictionary/nesting.md +47 -31
- package/docs/de/formatters.md +208 -334
- package/docs/de/intlayer_CMS.md +66 -15
- package/docs/de/intlayer_with_angular_21.md +9 -9
- package/docs/de/intlayer_with_nestjs.md +11 -7
- package/docs/de/intlayer_with_nextjs_14.md +1 -28
- package/docs/de/intlayer_with_nextjs_15.md +1 -33
- package/docs/de/intlayer_with_solid_start.md +1078 -0
- package/docs/de/intlayer_with_vite+vue.md +1 -3
- package/docs/de/packages/intlayer/getLocalizedUrl.md +33 -25
- package/docs/de/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/de/packages/react-intlayer/useDictionary.md +2 -5
- package/docs/de/packages/vite-intlayer/exports.md +15 -0
- package/docs/de/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/de/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/de/releases/v9.md +0 -15
- package/docs/de/self_hosting.md +46 -50
- package/docs/en/cli/doc-review.md +13 -2
- package/docs/en/configuration.md +24 -15
- package/docs/en/intlayer_with_angular_21.md +9 -9
- package/docs/en/intlayer_with_solid_start.md +1091 -0
- package/docs/en/intlayer_with_vite+solid.md +12 -0
- package/docs/en-GB/analytics.md +222 -0
- package/docs/en-GB/autoFill.md +26 -7
- package/docs/en-GB/configuration.md +25 -8
- package/docs/en-GB/dictionary/file.md +2 -0
- package/docs/en-GB/dictionary/nesting.md +64 -205
- package/docs/en-GB/formatters.md +146 -181
- package/docs/en-GB/intlayer_CMS.md +152 -0
- package/docs/en-GB/intlayer_with_angular_21.md +9 -9
- package/docs/en-GB/intlayer_with_nestjs.md +6 -2
- package/docs/en-GB/intlayer_with_nextjs_14.md +0 -27
- package/docs/en-GB/intlayer_with_nextjs_15.md +1 -33
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +40 -82
- package/docs/en-GB/intlayer_with_solid_start.md +1078 -0
- package/docs/en-GB/intlayer_with_vite+vue.md +1 -3
- package/docs/en-GB/packages/intlayer/getLocalizedUrl.md +30 -22
- package/docs/en-GB/packages/intlayer/getMultilingualUrls.md +16 -48
- package/docs/en-GB/packages/vite-intlayer/exports.md +15 -0
- package/docs/en-GB/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/en-GB/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/en-GB/self_hosting.md +60 -49
- package/docs/es/analytics.md +222 -0
- package/docs/es/autoFill.md +28 -9
- package/docs/es/configuration.md +24 -7
- package/docs/es/dictionary/file.md +3 -1
- package/docs/es/dictionary/nesting.md +47 -30
- package/docs/es/formatters.md +114 -168
- package/docs/es/intlayer_CMS.md +35 -10
- package/docs/es/intlayer_with_angular_21.md +9 -9
- package/docs/es/intlayer_with_nextjs_14.md +1 -28
- package/docs/es/intlayer_with_nextjs_15.md +1 -33
- package/docs/es/intlayer_with_solid_start.md +1078 -0
- package/docs/es/packages/intlayer/getLocalizedUrl.md +31 -23
- package/docs/es/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/es/packages/vite-intlayer/exports.md +15 -0
- package/docs/es/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/es/packages/vite-intlayer/intlayerPrune.md +69 -2
- package/docs/es/releases/v9.md +0 -15
- package/docs/es/self_hosting.md +46 -49
- package/docs/fr/analytics.md +222 -0
- package/docs/fr/autoFill.md +27 -8
- package/docs/fr/configuration.md +25 -8
- package/docs/fr/dictionary/file.md +2 -0
- package/docs/fr/dictionary/nesting.md +37 -184
- package/docs/fr/formatters.md +95 -236
- package/docs/fr/intlayer_CMS.md +66 -15
- package/docs/fr/intlayer_with_angular_21.md +9 -9
- package/docs/fr/intlayer_with_nextjs_14.md +1 -28
- package/docs/fr/intlayer_with_nextjs_15.md +1 -33
- package/docs/fr/intlayer_with_solid_start.md +1078 -0
- package/docs/fr/packages/intlayer/getLocalizedUrl.md +37 -27
- package/docs/fr/packages/intlayer/getMultilingualUrls.md +18 -20
- package/docs/fr/packages/vite-intlayer/exports.md +15 -0
- package/docs/fr/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/fr/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/fr/releases/v9.md +0 -15
- package/docs/fr/self_hosting.md +46 -49
- package/docs/hi/analytics.md +222 -0
- package/docs/hi/autoFill.md +28 -9
- package/docs/hi/configuration.md +25 -8
- package/docs/hi/dictionary/file.md +3 -1
- package/docs/hi/dictionary/nesting.md +47 -30
- package/docs/hi/formatters.md +233 -334
- package/docs/hi/how_works_intlayer.md +3 -1
- package/docs/hi/intlayer_CMS.md +152 -0
- package/docs/hi/intlayer_with_angular_21.md +9 -9
- package/docs/hi/intlayer_with_nestjs.md +11 -7
- package/docs/hi/intlayer_with_nextjs_14.md +1 -28
- package/docs/hi/intlayer_with_nextjs_15.md +1 -33
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +40 -83
- package/docs/hi/intlayer_with_solid_start.md +1077 -0
- package/docs/hi/intlayer_with_vite+preact.md +56 -49
- package/docs/hi/intlayer_with_vite+react.md +48 -41
- package/docs/hi/intlayer_with_vite+solid.md +32 -41
- package/docs/hi/intlayer_with_vite+vue.md +49 -44
- package/docs/hi/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/hi/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/hi/packages/next-intlayer/t.md +33 -1
- package/docs/hi/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/hi/packages/vite-intlayer/exports.md +15 -0
- package/docs/hi/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/hi/packages/vite-intlayer/intlayerPrune.md +78 -5
- package/docs/hi/plugins/sync-json.md +9 -9
- package/docs/hi/releases/v9.md +0 -15
- package/docs/hi/self_hosting.md +38 -51
- package/docs/id/analytics.md +223 -0
- package/docs/id/configuration.md +25 -8
- package/docs/id/dictionary/nesting.md +37 -184
- package/docs/id/formatters.md +208 -305
- package/docs/id/intlayer_CMS.md +164 -0
- package/docs/id/intlayer_with_angular_21.md +9 -9
- package/docs/id/intlayer_with_nextjs_14.md +1 -26
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +70 -63
- package/docs/id/intlayer_with_solid_start.md +1078 -0
- package/docs/id/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/id/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/id/packages/vite-intlayer/exports.md +15 -0
- package/docs/id/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/id/packages/vite-intlayer/intlayerPrune.md +78 -5
- package/docs/id/releases/v9.md +12 -0
- package/docs/id/self_hosting.md +61 -50
- package/docs/it/analytics.md +222 -0
- package/docs/it/autoFill.md +27 -8
- package/docs/it/configuration.md +25 -8
- package/docs/it/dictionary/file.md +3 -1
- package/docs/it/dictionary/nesting.md +47 -30
- package/docs/it/formatters.md +114 -168
- package/docs/it/intlayer_CMS.md +66 -15
- package/docs/it/intlayer_with_angular_21.md +9 -9
- package/docs/it/intlayer_with_nestjs.md +11 -7
- package/docs/it/intlayer_with_nextjs_14.md +1 -28
- package/docs/it/intlayer_with_nextjs_15.md +1 -33
- package/docs/it/intlayer_with_solid_start.md +1078 -0
- package/docs/it/intlayer_with_vite+vue.md +1 -3
- package/docs/it/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/it/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/it/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/it/packages/vite-intlayer/exports.md +15 -0
- package/docs/it/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/it/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/it/releases/v9.md +0 -15
- package/docs/it/self_hosting.md +60 -49
- package/docs/ja/analytics.md +222 -0
- package/docs/ja/autoFill.md +28 -9
- package/docs/ja/configuration.md +25 -8
- package/docs/ja/dictionary/content_file.md +15 -7
- package/docs/ja/dictionary/file.md +3 -1
- package/docs/ja/dictionary/nesting.md +47 -30
- package/docs/ja/formatters.md +133 -187
- package/docs/ja/intlayer_visual_editor.md +3 -1
- package/docs/ja/intlayer_with_angular_21.md +6 -6
- package/docs/ja/intlayer_with_nestjs.md +2 -12
- package/docs/ja/intlayer_with_nextjs_14.md +1 -28
- package/docs/ja/intlayer_with_nextjs_15.md +1 -33
- package/docs/ja/intlayer_with_react_router_v7.md +456 -20
- package/docs/ja/intlayer_with_solid_start.md +1078 -0
- package/docs/ja/intlayer_with_vite+preact.md +73 -41
- package/docs/ja/intlayer_with_vite+vue.md +1 -3
- package/docs/ja/mcp_server.md +3 -9
- package/docs/ja/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ja/packages/intlayer/getMultilingualUrls.md +3 -17
- package/docs/ja/packages/vite-intlayer/exports.md +15 -0
- package/docs/ja/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ja/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/ja/releases/v9.md +12 -0
- package/docs/ja/self_hosting.md +46 -50
- package/docs/ko/analytics.md +222 -0
- package/docs/ko/autoFill.md +28 -9
- package/docs/ko/configuration.md +25 -8
- package/docs/ko/dictionary/file.md +3 -1
- package/docs/ko/dictionary/nesting.md +47 -30
- package/docs/ko/formatters.md +133 -187
- package/docs/ko/intlayer_with_angular_21.md +9 -9
- package/docs/ko/intlayer_with_lynx+react.md +133 -39
- package/docs/ko/intlayer_with_nextjs_14.md +1 -28
- package/docs/ko/intlayer_with_nextjs_15.md +1 -33
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +40 -188
- package/docs/ko/intlayer_with_solid_start.md +1078 -0
- package/docs/ko/intlayer_with_vite+preact.md +57 -23
- package/docs/ko/intlayer_with_vite+vue.md +1 -3
- package/docs/ko/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ko/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ko/packages/vite-intlayer/exports.md +15 -0
- package/docs/ko/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ko/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/ko/releases/v9.md +12 -0
- package/docs/ko/self_hosting.md +60 -49
- package/docs/nl/configuration.md +25 -8
- package/docs/nl/intlayer_with_angular_21.md +9 -9
- package/docs/pl/analytics.md +220 -0
- package/docs/pl/configuration.md +25 -8
- package/docs/pl/dictionary/nesting.md +47 -30
- package/docs/pl/formatters.md +208 -305
- package/docs/pl/intlayer_CMS.md +152 -0
- package/docs/pl/intlayer_with_angular_21.md +9 -9
- package/docs/pl/intlayer_with_nextjs_14.md +1 -26
- package/docs/pl/intlayer_with_solid_start.md +1078 -0
- package/docs/pl/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/pl/packages/react-intlayer/useDictionary.md +2 -19
- package/docs/pl/packages/vite-intlayer/exports.md +15 -0
- package/docs/pl/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/pl/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/pl/releases/v9.md +0 -15
- package/docs/pl/self_hosting.md +60 -49
- package/docs/pt/analytics.md +222 -0
- package/docs/pt/configuration.md +25 -8
- package/docs/pt/dictionary/file.md +3 -1
- package/docs/pt/dictionary/nesting.md +47 -30
- package/docs/pt/formatters.md +112 -168
- package/docs/pt/intlayer_CMS.md +66 -15
- package/docs/pt/intlayer_with_angular_21.md +9 -9
- package/docs/pt/intlayer_with_astro_lit.md +26 -1
- package/docs/pt/intlayer_with_nextjs_14.md +1 -28
- package/docs/pt/intlayer_with_nextjs_15.md +1 -33
- package/docs/pt/intlayer_with_solid_start.md +1078 -0
- package/docs/pt/intlayer_with_vite+vue.md +1 -3
- package/docs/pt/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/pt/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/pt/packages/vite-intlayer/exports.md +15 -0
- package/docs/pt/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/pt/packages/vite-intlayer/intlayerPrune.md +78 -6
- package/docs/pt/releases/v9.md +0 -15
- package/docs/pt/self_hosting.md +60 -49
- package/docs/ru/analytics.md +222 -0
- package/docs/ru/autoFill.md +27 -8
- package/docs/ru/configuration.md +25 -8
- package/docs/ru/dictionary/file.md +3 -1
- package/docs/ru/dictionary/nesting.md +64 -205
- package/docs/ru/formatters.md +108 -128
- package/docs/ru/intlayer_with_angular_21.md +9 -9
- package/docs/ru/intlayer_with_nextjs_14.md +1 -28
- package/docs/ru/intlayer_with_nextjs_15.md +1 -33
- package/docs/ru/intlayer_with_solid_start.md +1078 -0
- package/docs/ru/intlayer_with_vite+vue.md +1 -3
- package/docs/ru/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/ru/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ru/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/ru/packages/vite-intlayer/exports.md +15 -0
- package/docs/ru/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ru/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/ru/releases/v9.md +0 -15
- package/docs/ru/self_hosting.md +60 -49
- package/docs/tr/analytics.md +222 -0
- package/docs/tr/autoFill.md +28 -9
- package/docs/tr/configuration.md +25 -8
- package/docs/tr/dictionary/file.md +2 -0
- package/docs/tr/dictionary/nesting.md +47 -30
- package/docs/tr/formatters.md +144 -190
- package/docs/tr/intlayer_CMS.md +152 -0
- package/docs/tr/intlayer_with_angular_21.md +9 -9
- package/docs/tr/intlayer_with_nestjs.md +2 -12
- package/docs/tr/intlayer_with_nextjs_15.md +1 -33
- package/docs/tr/intlayer_with_solid_start.md +1078 -0
- package/docs/tr/intlayer_with_vite+vue.md +1 -3
- package/docs/tr/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/tr/packages/vite-intlayer/exports.md +15 -0
- package/docs/tr/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/tr/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/tr/self_hosting.md +47 -50
- package/docs/uk/analytics.md +222 -0
- package/docs/uk/configuration.md +25 -8
- package/docs/uk/dictionary/nesting.md +47 -30
- package/docs/uk/formatters.md +128 -185
- package/docs/uk/intlayer_CMS.md +152 -0
- package/docs/uk/intlayer_with_angular_21.md +9 -9
- package/docs/uk/intlayer_with_nextjs_14.md +1 -26
- package/docs/uk/intlayer_with_solid_start.md +1078 -0
- package/docs/uk/packages/react-intlayer/useDictionary.md +2 -19
- package/docs/uk/packages/vite-intlayer/exports.md +15 -0
- package/docs/uk/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/uk/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/uk/releases/v9.md +0 -15
- package/docs/uk/self_hosting.md +60 -50
- package/docs/ur/configuration.md +25 -8
- package/docs/ur/intlayer_with_angular_21.md +9 -9
- package/docs/vi/analytics.md +222 -0
- package/docs/vi/configuration.md +24 -8
- package/docs/vi/dictionary/nesting.md +37 -184
- package/docs/vi/formatters.md +208 -309
- package/docs/vi/intlayer_CMS.md +164 -0
- package/docs/vi/intlayer_with_angular_21.md +9 -9
- package/docs/vi/intlayer_with_nextjs_14.md +0 -25
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +70 -63
- package/docs/vi/intlayer_with_solid_start.md +1078 -0
- package/docs/vi/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/vi/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/vi/packages/vite-intlayer/exports.md +15 -0
- package/docs/vi/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/vi/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/vi/plugins/sync-json.md +6 -6
- package/docs/vi/releases/v9.md +12 -0
- package/docs/vi/self_hosting.md +61 -50
- package/docs/zh/CI_CD.md +4 -0
- package/docs/zh/analytics.md +222 -0
- package/docs/zh/autoFill.md +28 -9
- package/docs/zh/configuration.md +24 -8
- package/docs/zh/dictionary/file.md +2 -0
- package/docs/zh/dictionary/nesting.md +47 -30
- package/docs/zh/formatters.md +140 -188
- package/docs/zh/intlayer_CMS.md +164 -0
- package/docs/zh/intlayer_with_analog.md +193 -3
- package/docs/zh/intlayer_with_angular_19.md +272 -3
- package/docs/zh/intlayer_with_angular_21.md +7 -7
- package/docs/zh/intlayer_with_create_react_app.md +348 -26
- package/docs/zh/intlayer_with_lynx+react.md +263 -4
- package/docs/zh/intlayer_with_nextjs_14.md +1 -28
- package/docs/zh/intlayer_with_nextjs_15.md +1 -33
- package/docs/zh/intlayer_with_nextjs_no_locale_path.md +558 -1
- package/docs/zh/intlayer_with_nuxt.md +182 -7
- package/docs/zh/intlayer_with_react_router_v7.md +183 -25
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +306 -42
- package/docs/zh/intlayer_with_solid_start.md +1077 -0
- package/docs/zh/intlayer_with_storybook.md +260 -3
- package/docs/zh/intlayer_with_svelte_kit.md +428 -48
- package/docs/zh/intlayer_with_tanstack+solid.md +713 -13
- package/docs/zh/intlayer_with_tanstack.md +731 -20
- package/docs/zh/intlayer_with_vanilla.md +314 -4
- package/docs/zh/intlayer_with_vite+lit.md +465 -4
- package/docs/zh/intlayer_with_vite+preact.md +422 -116
- package/docs/zh/intlayer_with_vite+react.md +324 -45
- package/docs/zh/intlayer_with_vite+react_compiler.md +228 -13
- package/docs/zh/intlayer_with_vite+solid.md +462 -32
- package/docs/zh/intlayer_with_vite+vanilla.md +497 -4
- package/docs/zh/mcp_server.md +3 -9
- package/docs/zh/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/zh/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/zh/packages/vite-intlayer/exports.md +29 -0
- package/docs/zh/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/zh/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/zh/releases/v9.md +12 -0
- package/docs/zh/self_hosting.md +60 -50
- package/docs/zh-TW/intlayer_with_angular_21.md +7 -7
- package/package.json +6 -6
- package/src/generated/blog.entry.ts +27 -27
- package/src/generated/docs.entry.ts +234 -214
- package/src/generated/frequentQuestions.entry.ts +17 -17
- package/src/generated/legal.entry.ts +2 -2
package/docs/ar/formatters.md
CHANGED
|
@@ -46,34 +46,6 @@ author: aymericzip
|
|
|
46
46
|
|
|
47
47
|
يوفر Intlayer مجموعة من المساعدين الخفيفين المبنيين على واجهات برمجة التطبيقات الأصلية `Intl`، بالإضافة إلى غلاف `Intl` مخزن مؤقت لتجنب إنشاء أدوات تنسيق ثقيلة بشكل متكرر. هذه الأدوات مدركة تمامًا للغة ويمكن استخدامها من الحزمة الرئيسية `intlayer`.
|
|
48
48
|
|
|
49
|
-
### الاستيراد
|
|
50
|
-
|
|
51
|
-
```ts
|
|
52
|
-
import {
|
|
53
|
-
Intl,
|
|
54
|
-
number,
|
|
55
|
-
percentage,
|
|
56
|
-
currency,
|
|
57
|
-
date,
|
|
58
|
-
relativeTime,
|
|
59
|
-
units,
|
|
60
|
-
compact,
|
|
61
|
-
list,
|
|
62
|
-
getLocaleName,
|
|
63
|
-
getLocaleLang,
|
|
64
|
-
getLocaleFromPath,
|
|
65
|
-
getPathWithoutLocale,
|
|
66
|
-
getLocalizedUrl,
|
|
67
|
-
getHTMLTextDir,
|
|
68
|
-
getContent,
|
|
69
|
-
getTranslation,
|
|
70
|
-
getIntlayer,
|
|
71
|
-
getIntlayerAsync,
|
|
72
|
-
} from "intlayer";
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
إذا كنت تستخدم React، فإن الخطافات متاحة أيضًا؛ راجع `react-intlayer/format`.
|
|
76
|
-
|
|
77
49
|
## Intl المخزن مؤقتًا
|
|
78
50
|
|
|
79
51
|
الـ `Intl` المصدر هو غلاف رقيق مخزن مؤقت حول الـ `Intl` العالمي. يقوم بتخزين نسخ من `NumberFormat`، `DateTimeFormat`، `RelativeTimeFormat`، `ListFormat`، `DisplayNames`، `Collator`، و `PluralRules`، مما يتجنب إعادة بناء نفس أداة التنسيق مرارًا وتكرارًا.
|
|
@@ -110,86 +82,8 @@ pluralRules.select(1); // "واحد"
|
|
|
110
82
|
pluralRules.select(2); // "آخر"
|
|
111
83
|
```
|
|
112
84
|
|
|
113
|
-
## أدوات Intl إضافية
|
|
114
|
-
|
|
115
|
-
بعيدًا عن مساعدي التنسيق، يمكنك أيضًا استخدام الغلاف المؤقت لـ Intl مباشرةً لميزات Intl الأخرى:
|
|
116
|
-
|
|
117
|
-
### `Intl.DisplayNames`
|
|
118
|
-
|
|
119
|
-
لأسماء اللغات والمناطق والعملات والكتابات المحلية:
|
|
120
|
-
|
|
121
|
-
```ts
|
|
122
|
-
import { Intl } from "intlayer";
|
|
123
|
-
|
|
124
|
-
const languageNames = new Intl.DisplayNames("en", { type: "language" });
|
|
125
|
-
languageNames.of("fr"); // "French"
|
|
126
|
-
|
|
127
|
-
const regionNames = new Intl.DisplayNames("fr", { type: "region" });
|
|
128
|
-
regionNames.of("US"); // "États-Unis"
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### `Intl.Collator`
|
|
132
|
-
|
|
133
|
-
للمقارنة والفرز النصي المعتمد على اللغة:
|
|
134
|
-
|
|
135
|
-
```ts
|
|
136
|
-
import { Intl } from "intlayer";
|
|
137
|
-
|
|
138
|
-
const collator = new Intl.Collator("de", {
|
|
139
|
-
sensitivity: "base",
|
|
140
|
-
numeric: true,
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
const words = ["äpfel", "zebra", "100", "20"];
|
|
144
|
-
words.sort(collator.compare); // ["20", "100", "äpfel", "zebra"]
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### `Intl.PluralRules`
|
|
148
|
-
|
|
149
|
-
لتحديد أشكال الجمع في لغات مختلفة:
|
|
150
|
-
|
|
151
|
-
```ts
|
|
152
|
-
import { Intl } from "intlayer";
|
|
153
|
-
|
|
154
|
-
const pluralRules = new Intl.PluralRules("ar");
|
|
155
|
-
pluralRules.select(0); // "zero"
|
|
156
|
-
pluralRules.select(1); // "one"
|
|
157
|
-
pluralRules.select(2); // "two"
|
|
158
|
-
pluralRules.select(3); // "few"
|
|
159
|
-
pluralRules.select(11); // "many"
|
|
160
|
-
```
|
|
161
|
-
|
|
162
85
|
## أدوات اللغة
|
|
163
86
|
|
|
164
|
-
### `getLocaleName(displayLocale, targetLocale?)`
|
|
165
|
-
|
|
166
|
-
يحصل على الاسم المحلي للغة في لغة أخرى:
|
|
167
|
-
|
|
168
|
-
```ts
|
|
169
|
-
import { getLocaleName } from "intlayer";
|
|
170
|
-
|
|
171
|
-
getLocaleName("fr", "en"); // "French"
|
|
172
|
-
getLocaleName("en", "fr"); // "anglais"
|
|
173
|
-
getLocaleName("de", "es"); // "alemán"
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
- **displayLocale**: اللغة التي سيتم الحصول على اسمها
|
|
177
|
-
- **targetLocale**: اللغة التي سيتم عرض الاسم بها (افتراضيًا تكون نفس displayLocale)
|
|
178
|
-
|
|
179
|
-
### `getLocaleLang(locale?)`
|
|
180
|
-
|
|
181
|
-
يستخرج رمز اللغة من سلسلة اللغة:
|
|
182
|
-
|
|
183
|
-
```ts
|
|
184
|
-
import { getLocaleLang } from "intlayer";
|
|
185
|
-
|
|
186
|
-
getLocaleLang("en-US"); // "en"
|
|
187
|
-
getLocaleLang("fr-CA"); // "fr"
|
|
188
|
-
getLocaleLang("de"); // "de"
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
- **locale**: اللغة التي سيتم استخراج رمز اللغة منها (افتراضيًا اللغة الحالية)
|
|
192
|
-
|
|
193
87
|
### `getLocaleFromPath(inputUrl)`
|
|
194
88
|
|
|
195
89
|
يستخرج جزء اللغة من عنوان URL أو مسار:
|
|
@@ -330,9 +224,11 @@ const content = await getIntlayerAsync("common", "fr");
|
|
|
330
224
|
|
|
331
225
|
جميع الأدوات التالية مُصدرة من `intlayer`.
|
|
332
226
|
|
|
333
|
-
### `
|
|
227
|
+
### `percentage(value, options?)`
|
|
228
|
+
|
|
229
|
+
يقوم بتنسيق رقم كسلسلة نسبة مئوية.
|
|
334
230
|
|
|
335
|
-
|
|
231
|
+
السلوك: القيم الأكبر من 1 تُفسر كنسب مئوية كاملة ويتم تطبيعها (مثلاً، `25` → `25%`، `0.25` → `25%`).
|
|
336
232
|
|
|
337
233
|
- **value**: `number | string`
|
|
338
234
|
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
@@ -340,125 +236,196 @@ const content = await getIntlayerAsync("common", "fr");
|
|
|
340
236
|
أمثلة:
|
|
341
237
|
|
|
342
238
|
```ts
|
|
343
|
-
import {
|
|
239
|
+
import { percentage } from "intlayer";
|
|
344
240
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
241
|
+
percentage(0.25); // "25%"
|
|
242
|
+
percentage(25); // "25%"
|
|
243
|
+
percentage(0.237, { minimumFractionDigits: 1 }); // "23.7%"
|
|
348
244
|
```
|
|
349
245
|
|
|
350
|
-
###
|
|
246
|
+
### ميزات Intl إضافية
|
|
351
247
|
|
|
352
|
-
|
|
248
|
+
#### `number(value, options?)`
|
|
353
249
|
|
|
354
|
-
|
|
250
|
+
تنسيق قيمة رقمية باستخدام التجميع والفواصل العشرية الموجهة للغة.
|
|
355
251
|
|
|
356
252
|
- **value**: `number | string`
|
|
357
253
|
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
358
254
|
|
|
359
|
-
أمثلة:
|
|
360
|
-
|
|
361
255
|
```ts
|
|
362
|
-
|
|
256
|
+
number(123456.789); // "123,456.789" (in en-US)
|
|
257
|
+
number("1000000", { locale: "fr" }); // "1 000 000"
|
|
258
|
+
number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
#### `percentage(value, options?)`
|
|
262
|
+
|
|
263
|
+
تنسّق رقماً كسلسلة نسبة مئوية. يتم تطبيع القيم الأكبر من 1 (على سبيل المثال، `25` → `25%`، `0.25` → `25%`).
|
|
264
|
+
|
|
265
|
+
- **value**: `number | string`
|
|
266
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
363
267
|
|
|
268
|
+
```ts
|
|
364
269
|
percentage(0.25); // "25%"
|
|
365
270
|
percentage(25); // "25%"
|
|
366
271
|
percentage(0.237, { minimumFractionDigits: 1 }); // "23.7%"
|
|
367
272
|
```
|
|
368
273
|
|
|
369
|
-
|
|
274
|
+
#### `currency(value, options?)`
|
|
370
275
|
|
|
371
|
-
|
|
276
|
+
تنسيق قيمة كعملة محلية. القيمة الافتراضية هي `USD`.
|
|
372
277
|
|
|
373
278
|
- **value**: `number | string`
|
|
374
279
|
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
375
|
-
-
|
|
376
|
-
|
|
377
|
-
أمثلة:
|
|
280
|
+
- Common: `currency`, `currencyDisplay` (`"symbol" | "code" | "name"`)
|
|
378
281
|
|
|
379
282
|
```ts
|
|
380
|
-
import { currency } from "intlayer";
|
|
381
|
-
|
|
382
283
|
currency(1234.5, { currency: "EUR" }); // "€1,234.50"
|
|
383
284
|
currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
|
|
384
285
|
```
|
|
385
286
|
|
|
386
|
-
|
|
287
|
+
#### `date(date, optionsOrPreset?)`
|
|
387
288
|
|
|
388
|
-
|
|
289
|
+
تنسيق قيمة التاريخ/الوقت.
|
|
389
290
|
|
|
390
291
|
- **date**: `Date | string | number`
|
|
391
|
-
- **optionsOrPreset**: `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` أو
|
|
392
|
-
- الإعدادات المسبقة: `"short" | "long" | "dateOnly" | "timeOnly" | "full"`
|
|
393
|
-
|
|
394
|
-
أمثلة:
|
|
292
|
+
- **optionsOrPreset**: `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` أو preset: `"short" | "long" | "dateOnly" | "timeOnly" | "full"`
|
|
395
293
|
|
|
396
294
|
```ts
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
date(new Date(), "short"); // على سبيل المثال، "08/02/25, 14:30"
|
|
295
|
+
date(new Date(), "short"); // مثال، "08/02/25, 14:30"
|
|
400
296
|
date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); // "2 août"
|
|
401
297
|
```
|
|
402
298
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
### `relativeTime(from, to = new Date(), options?)`
|
|
299
|
+
#### `relativeTime(from, to?, options?)`
|
|
406
300
|
|
|
407
|
-
|
|
301
|
+
تنسيق الوقت النسبي بين لحظتين.
|
|
408
302
|
|
|
409
|
-
- مرر "now" كوسيط أول والهدف كوسيط ثاني للحصول على تعبير طبيعي.
|
|
410
303
|
- **from**: `Date | string | number`
|
|
411
|
-
- **to**: `Date | string | number` (
|
|
412
|
-
- **options**: `{ locale
|
|
413
|
-
- الوحدة الافتراضية `unit` هي `"second"`.
|
|
414
|
-
|
|
415
|
-
أمثلة:
|
|
304
|
+
- **to**: `Date | string | number` (الافتراضي `new Date()`)
|
|
305
|
+
- **options**: `{ locale?, unit?, numeric?, style? }`
|
|
416
306
|
|
|
417
307
|
```ts
|
|
418
|
-
import { relativeTime } from "intlayer";
|
|
419
|
-
|
|
420
308
|
const now = new Date();
|
|
421
309
|
const in3Days = new Date(now.getTime() + 3 * 864e5);
|
|
422
|
-
relativeTime(now, in3Days, { unit: "day" }); // "
|
|
310
|
+
relativeTime(now, in3Days, { unit: "day" }); // "خلال 3 أيام"
|
|
423
311
|
|
|
424
312
|
const twoHoursAgo = new Date(now.getTime() - 2 * 3600e3);
|
|
425
|
-
relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "
|
|
313
|
+
relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "قبل ساعتين"
|
|
426
314
|
```
|
|
427
315
|
|
|
428
|
-
|
|
316
|
+
#### `units(value, options?)`
|
|
429
317
|
|
|
430
|
-
|
|
318
|
+
تنسيق قيمة رقمية مع وحدة.
|
|
431
319
|
|
|
432
320
|
- **value**: `number | string`
|
|
433
321
|
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
434
|
-
-
|
|
435
|
-
- القيم الافتراضية: `unit: 'day'`، `unitDisplay: 'short'`، `useGrouping: false`
|
|
436
|
-
|
|
437
|
-
أمثلة:
|
|
322
|
+
- Common: `unit` (على سبيل المثال، `"kilometer"`، `"byte"`), `unitDisplay` (`"short" | "narrow" | "long"`)
|
|
438
323
|
|
|
439
324
|
```ts
|
|
440
|
-
import { units } from "intlayer";
|
|
441
|
-
|
|
442
325
|
units(5, { unit: "kilometer", unitDisplay: "long", locale: "en-GB" }); // "5 kilometers"
|
|
443
|
-
units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B"
|
|
326
|
+
units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B"
|
|
444
327
|
```
|
|
445
328
|
|
|
446
|
-
|
|
329
|
+
#### `compact(value, options?)`
|
|
447
330
|
|
|
448
|
-
|
|
331
|
+
تنسيق رقم باستخدام الترميز المضغوط.
|
|
449
332
|
|
|
450
333
|
- **value**: `number | string`
|
|
451
|
-
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
452
|
-
|
|
453
|
-
أمثلة:
|
|
334
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
454
335
|
|
|
455
336
|
```ts
|
|
456
|
-
import { compact } from "intlayer";
|
|
457
|
-
|
|
458
337
|
compact(1200); // "1.2K"
|
|
459
338
|
compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 million"
|
|
460
339
|
```
|
|
461
340
|
|
|
341
|
+
#### `list(values, options?)`
|
|
342
|
+
|
|
343
|
+
تنسيق مصفوفة إلى سلسلة قائمة محلية.
|
|
344
|
+
|
|
345
|
+
- **values**: `(string | number)[]`
|
|
346
|
+
- **options**: `Intl.ListFormatOptions & { locale?: LocalesValues }`
|
|
347
|
+
- Common: `type` (`"conjunction" | "disjunction" | "unit"`), `style` (`"long" | "short" | "narrow"`)
|
|
348
|
+
|
|
349
|
+
```ts
|
|
350
|
+
list(["apple", "banana", "orange"]); // "apple, banana, and orange"
|
|
351
|
+
list(["red", "green", "blue"], { locale: "fr", type: "disjunction" }); // "rouge, vert ou bleu"
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## Cached Intl
|
|
355
|
+
|
|
356
|
+
الـ `Intl` المُصدَّر من `intlayer` هو غلاف مُخزّن مؤقتاً حول الـ `Intl` العام. يقوم بحفظ نسخ من instances المُنسِّقات (`NumberFormat`، `DateTimeFormat`، إلخ.) لتجنب بنائها بشكل متكرر، مما يحسّن الأداء.
|
|
357
|
+
|
|
358
|
+
```ts
|
|
359
|
+
import { Intl } from "intlayer";
|
|
360
|
+
|
|
361
|
+
// تنسيق الأرقام
|
|
362
|
+
const numberFormat = new Intl.NumberFormat("en-GB", {
|
|
363
|
+
style: "currency",
|
|
364
|
+
currency: "GBP",
|
|
365
|
+
});
|
|
366
|
+
numberFormat.format(1234.5); // "£1,234.50"
|
|
367
|
+
|
|
368
|
+
// عرض الأسماء للغات والمناطق وما إلى ذلك
|
|
369
|
+
const displayNames = new Intl.DisplayNames("fr", { type: "language" });
|
|
370
|
+
displayNames.of("en"); // "anglais"
|
|
371
|
+
|
|
372
|
+
// المصادفة للفرز
|
|
373
|
+
const collator = new Intl.Collator("fr", { sensitivity: "base" });
|
|
374
|
+
collator.compare("é", "e"); // 0 (متساوية)
|
|
375
|
+
|
|
376
|
+
// قواعد الجمع
|
|
377
|
+
const pluralRules = new Intl.PluralRules("fr");
|
|
378
|
+
pluralRules.select(1); // "one"
|
|
379
|
+
pluralRules.select(2); // "other"
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### ميزات Intl إضافية
|
|
383
|
+
|
|
384
|
+
#### `Intl.DisplayNames`
|
|
385
|
+
|
|
386
|
+
للحصول على الأسماء المحلية للغات والمناطق والعملات والنصوص:
|
|
387
|
+
|
|
388
|
+
```ts
|
|
389
|
+
import { Intl } from "intlayer";
|
|
390
|
+
|
|
391
|
+
const languageNames = new Intl.DisplayNames("en", { type: "language" });
|
|
392
|
+
languageNames.of("fr"); // "French"
|
|
393
|
+
|
|
394
|
+
const regionNames = new Intl.DisplayNames("fr", { type: "region" });
|
|
395
|
+
regionNames.of("US"); // "États-Unis"
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
#### `Intl.Collator`
|
|
399
|
+
|
|
400
|
+
لمقارنة وترتيب السلاسل النصية مع الوعي بالإعدادات المحلية:
|
|
401
|
+
|
|
402
|
+
```ts
|
|
403
|
+
import { Intl } from "intlayer";
|
|
404
|
+
|
|
405
|
+
const collator = new Intl.Collator("de", {
|
|
406
|
+
sensitivity: "base",
|
|
407
|
+
numeric: true,
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
const words = ["äpfel", "zebra", "100", "20"];
|
|
411
|
+
words.sort(collator.compare); // ["20", "100", "äpfel", "zebra"]
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
#### `Intl.PluralRules`
|
|
415
|
+
|
|
416
|
+
لتحديد أشكال الجمع في لغات مختلفة:
|
|
417
|
+
|
|
418
|
+
```ts
|
|
419
|
+
import { Intl } from "intlayer";
|
|
420
|
+
|
|
421
|
+
const pluralRules = new Intl.PluralRules("ar");
|
|
422
|
+
pluralRules.select(0); // "zero"
|
|
423
|
+
pluralRules.select(1); // "one"
|
|
424
|
+
pluralRules.select(2); // "two"
|
|
425
|
+
pluralRules.select(3); // "few"
|
|
426
|
+
pluralRules.select(11); // "many"
|
|
427
|
+
```
|
|
428
|
+
|
|
462
429
|
## أدوات المناطق الإقليمية
|
|
463
430
|
|
|
464
431
|
### `list(values, options?)`
|
|
@@ -491,11 +458,17 @@ getLocaleLang("en-US"); // "en"
|
|
|
491
458
|
getLocaleLang("fr-CA"); // "fr"
|
|
492
459
|
```
|
|
493
460
|
|
|
494
|
-
|
|
461
|
+
### `getLocaleFromPath(inputUrl)`
|
|
495
462
|
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
463
|
+
استخراج جزء اللغة من عنوان URL أو مسار:
|
|
464
|
+
|
|
465
|
+
```ts
|
|
466
|
+
import { getLocaleFromPath } from "intlayer";
|
|
467
|
+
|
|
468
|
+
getLocaleFromPath("/en/dashboard"); // "en"
|
|
469
|
+
getLocaleFromPath("/fr/dashboard"); // "fr"
|
|
470
|
+
getLocaleFromPath("/dashboard"); // "en" (اللغة الافتراضية)
|
|
471
|
+
```
|
|
499
472
|
|
|
500
473
|
### `getPathWithoutLocale(inputUrl, locales?)`
|
|
501
474
|
|
|
@@ -519,34 +492,16 @@ getLocalizedUrl("/about", "fr", ["en", "fr"], "en", false); // "/fr/about"
|
|
|
519
492
|
getLocalizedUrl("/about", "en", ["en", "fr"], "en", false); // "/about"
|
|
520
493
|
```
|
|
521
494
|
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
تعيش أدوات التنسيق في الحزمة الأساسية ويتم إعادة تصديرها من الحزم الأعلى للحفاظ على سهولة الاستيراد عبر بيئات التشغيل المختلفة:
|
|
495
|
+
### `getHTMLTextDir(locale?)`
|
|
525
496
|
|
|
526
|
-
|
|
497
|
+
يعيد اتجاه النص للغة معينة:
|
|
527
498
|
|
|
528
499
|
```ts
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
relativeTime,
|
|
535
|
-
units,
|
|
536
|
-
compact,
|
|
537
|
-
list,
|
|
538
|
-
Intl,
|
|
539
|
-
getLocaleName,
|
|
540
|
-
getLocaleLang,
|
|
541
|
-
getLocaleFromPath,
|
|
542
|
-
getPathWithoutLocale,
|
|
543
|
-
getLocalizedUrl,
|
|
544
|
-
getHTMLTextDir,
|
|
545
|
-
getContent,
|
|
546
|
-
getTranslation,
|
|
547
|
-
getIntlayer,
|
|
548
|
-
getIntlayerAsync,
|
|
549
|
-
} from "intlayer";
|
|
500
|
+
import { getHTMLTextDir } from "intlayer";
|
|
501
|
+
|
|
502
|
+
getHTMLTextDir("en-US"); // "ltr"
|
|
503
|
+
getHTMLTextDir("ar"); // "rtl"
|
|
504
|
+
getHTMLTextDir("he"); // "rtl"
|
|
550
505
|
```
|
|
551
506
|
|
|
552
507
|
## أدوات معالجة المحتوى
|
package/docs/ar/intlayer_CMS.md
CHANGED
|
@@ -247,6 +247,158 @@ bun x intlayer dictionary push -d my-first-dictionary-key --env production
|
|
|
247
247
|
|
|
248
248
|
بعد ذلك، ستتمكن من رؤية وإدارة قاموسك في [نظام إدارة محتوى Intlayer](https://app.intlayer.org/content).
|
|
249
249
|
|
|
250
|
+
## الوصول البرمجي باستخدام SDK `@intlayer/api`
|
|
251
|
+
|
|
252
|
+
بالإضافة إلى واجهة سطر الأوامر والمحرر المرئي، يأتي Intlayer مع SDK مكتوب بشكل آمن من حيث النوع في حزمة [`@intlayer/api`](https://www.npmjs.com/package/@intlayer/api). يتيح لك التعامل مع نظام إدارة المحتوى كـ **قاعدة بيانات محتوى بدون رأس**: يمكنك جلب المشاريع وجلب القواميس، وتحديثها مباشرة من تطبيقك الخاص أو البرامج النصية أو خط أنابيب CI.
|
|
253
|
+
|
|
254
|
+
يتعامل SDK مع المصادقة من أجلك. طالما أن `clientId` و `clientSecret` متاحة (في تكوين Intlayer أو البيئة)، فإنه يحصل على رمز OAuth2 للوصول وينعشه تلقائياً ويوقع كل طلب.
|
|
255
|
+
|
|
256
|
+
### التثبيت
|
|
257
|
+
|
|
258
|
+
```bash packageManager="npm"
|
|
259
|
+
npm install @intlayer/api
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
```bash packageManager="yarn"
|
|
263
|
+
yarn add @intlayer/api
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
```bash packageManager="pnpm"
|
|
267
|
+
pnpm add @intlayer/api
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
```bash packageManager="bun"
|
|
271
|
+
bun add @intlayer/api
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### كيفية عملها: المصادق + نقاط النهاية
|
|
275
|
+
|
|
276
|
+
تم تقسيم SDK إلى **استيرادين منفصلين** عن قصد، للحفاظ على حجم حزمتك صغيرًا:
|
|
277
|
+
|
|
278
|
+
1. `createIntlayerCMS` — ينشئ **مصادقًا** خفيف الوزن. يحمل فقط بيانات الاعتماد والرمز المميز للوصول المُدار؛ لا يعرف شيئًا عن أي مجال محدد.
|
|
279
|
+
2. `dictionaryEndpoint`, `projectEndpoint`, … — **محررات نقاط النهاية** لكل مجال، يتم استيراد كل منها من مسارها الخاص (`@intlayer/api/dictionary`, `@intlayer/api/project`, …). تمرر المصادق إلى نقطة النهاية التي تحتاجها.
|
|
280
|
+
|
|
281
|
+
لأن كل نقطة نهاية يتم استيرادها بشكل منفصل، تتضمن حزمتك فقط المجالات التي تستخدمها فعليًا — استيراد `dictionaryEndpoint` لا يسحب أبدًا المشروع أو الذكاء الاصطناعي أو أي عميل مجال آخر.
|
|
282
|
+
|
|
283
|
+
```typescript fileName="cms.ts" codeFormat="typescript"
|
|
284
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
285
|
+
|
|
286
|
+
// التكوين اختياري: عند حذفه، يتم قراءة بيانات الاعتماد من
|
|
287
|
+
// `@intlayer/config/built`، الذي يحل متغيرات البيئة INTLAYER_CLIENT_ID و
|
|
288
|
+
// INTLAYER_CLIENT_SECRET.
|
|
289
|
+
export const cmsAuthenticator = createIntlayerCMS();
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
> [!WARNING]
|
|
293
|
+
> بيانات اعتماد CMS (`clientId` / `clientSecret`) تمنح **حق الوصول للكتابة** إلى محتواك. لا تنشئ المصادق أبدًا إلا على **الجانب الخادم** (إجراءات الخادم، معالجات المسارات، البرامج النصية، CI). لا تستورده أبدًا في الكود من جانب العميل أو تعرض بيانات اعتمادك للمتصفح.
|
|
294
|
+
|
|
295
|
+
إذا فضلت عدم الاعتماد على تكوين وقت البناء، مرر بيانات الاعتماد بشكل صريح:
|
|
296
|
+
|
|
297
|
+
```typescript fileName="cms.ts" codeFormat="typescript"
|
|
298
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
299
|
+
|
|
300
|
+
export const cmsAuthenticator = createIntlayerCMS({
|
|
301
|
+
editor: {
|
|
302
|
+
clientId: process.env.INTLAYER_CLIENT_ID,
|
|
303
|
+
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
304
|
+
// اختياري، للخوادم الذاتية الاستضافة:
|
|
305
|
+
// backendURL: process.env.INTLAYER_BACKEND_URL,
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
> احصل على بيانات اعتمادك بإنشاء مفتاح وصول جديد في [لوحة معلومات Intlayer - المشاريع](https://app.intlayer.org/projects).
|
|
311
|
+
|
|
312
|
+
### جلب المشاريع
|
|
313
|
+
|
|
314
|
+
```typescript fileName="projects.ts" codeFormat="typescript"
|
|
315
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
316
|
+
import { projectEndpoint } from "@intlayer/api/project";
|
|
317
|
+
|
|
318
|
+
const cmsAuthenticator = createIntlayerCMS();
|
|
319
|
+
|
|
320
|
+
// قائمة المشاريع التي يمكن الوصول إليها باستخدام بيانات اعتمادك
|
|
321
|
+
const { data: projects } =
|
|
322
|
+
await projectEndpoint(cmsAuthenticator).getProjects();
|
|
323
|
+
|
|
324
|
+
// قراءة رؤى التوطين المجمعة للمشروع المحدد
|
|
325
|
+
const { data: insights } =
|
|
326
|
+
await projectEndpoint(cmsAuthenticator).getProjectInsights();
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### جلب القواميیس
|
|
330
|
+
|
|
331
|
+
```typescript fileName="read-dictionaries.ts" codeFormat="typescript"
|
|
332
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
333
|
+
import { dictionaryEndpoint } from "@intlayer/api/dictionary";
|
|
334
|
+
|
|
335
|
+
const cmsAuthenticator = createIntlayerCMS();
|
|
336
|
+
|
|
337
|
+
// قائمة بكل قاموس بعید من المشروع
|
|
338
|
+
const { data: dictionaries } =
|
|
339
|
+
await dictionaryEndpoint(cmsAuthenticator).getDictionaries();
|
|
340
|
+
|
|
341
|
+
// أو الحصول على قاموس واحد حسب المفتاح
|
|
342
|
+
const { data: dictionary } = await dictionaryEndpoint(
|
|
343
|
+
cmsAuthenticator
|
|
344
|
+
).getDictionary("my-first-dictionary-key");
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### دفع وتحديث القواميس
|
|
348
|
+
|
|
349
|
+
استخدم نظام إدارة المحتوى (CMS) كقاعدة بيانات لكتابة المحتوى مرة أخرى:
|
|
350
|
+
|
|
351
|
+
```typescript fileName="write-dictionaries.ts" codeFormat="typescript"
|
|
352
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
353
|
+
import { dictionaryEndpoint } from "@intlayer/api/dictionary";
|
|
354
|
+
|
|
355
|
+
const cmsAuthenticator = createIntlayerCMS();
|
|
356
|
+
|
|
357
|
+
// إنشاء قاموس جديد
|
|
358
|
+
await dictionaryEndpoint(cmsAuthenticator).addDictionary({
|
|
359
|
+
key: "my-first-dictionary-key",
|
|
360
|
+
content: { title: "Hello world" },
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
// Upsert مجموعة من القواميس (إنشاء أو تحديثها في استدعاء واحد)
|
|
364
|
+
await dictionaryEndpoint(cmsAuthenticator).pushDictionaries([
|
|
365
|
+
{ key: "home", content: { title: "Home" } },
|
|
366
|
+
{ key: "about", content: { title: "About" } },
|
|
367
|
+
]);
|
|
368
|
+
|
|
369
|
+
// تحديث قاموس موجود
|
|
370
|
+
await dictionaryEndpoint(cmsAuthenticator).updateDictionary({
|
|
371
|
+
id: "<dictionary-id>",
|
|
372
|
+
key: "home",
|
|
373
|
+
content: { title: "Updated title" },
|
|
374
|
+
});
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
> نصيحة: أعد استخدام نقطة النهاية المرتبطة لتجنب تكرار نفسك:
|
|
378
|
+
>
|
|
379
|
+
> ```typescript codeFormat="typescript"
|
|
380
|
+
> const dictionary = dictionaryEndpoint(cmsAuthenticator);
|
|
381
|
+
> await dictionary.pushDictionaries([myDictionary]);
|
|
382
|
+
> const { data } = await dictionary.getDictionaries();
|
|
383
|
+
> ```
|
|
384
|
+
|
|
385
|
+
### استخراج طريقة واحدة
|
|
386
|
+
|
|
387
|
+
كل طريقة endpoint مصادق عليها بالفعل وقائمة بذاتها (تحمل معالجة الرمز الخاص بها)، لذا يمكنك استخراج واحدة وتمريرها حوله — على سبيل المثال لحقنها كتبعية:
|
|
388
|
+
|
|
389
|
+
```typescript fileName="push.ts" codeFormat="typescript"
|
|
390
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
391
|
+
import { dictionaryEndpoint } from "@intlayer/api/dictionary";
|
|
392
|
+
|
|
393
|
+
const dictionary = dictionaryEndpoint(createIntlayerCMS());
|
|
394
|
+
|
|
395
|
+
// مصادق عليه بالفعل — ينعش الرمز تلقائياً في كل استدعاء
|
|
396
|
+
export const pushDictionaries = dictionary.pushDictionaries;
|
|
397
|
+
|
|
398
|
+
// الاستخدام
|
|
399
|
+
await pushDictionaries([{ key: "home", content: { title: "Home" } }]);
|
|
400
|
+
```
|
|
401
|
+
|
|
250
402
|
## التزامن الحي
|
|
251
403
|
|
|
252
404
|
يتيح التزامن الحي لتطبيقك عكس تغييرات محتوى نظام إدارة المحتوى أثناء وقت التشغيل. لا حاجة لإعادة البناء أو إعادة النشر. عند التمكين، يتم بث التحديثات إلى خادم التزامن الحي الذي يقوم بتحديث القواميس التي يقرأها تطبيقك.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
3
|
updatedAt: 2026-05-31
|
|
4
|
-
title: "تدويل Angular
|
|
5
|
-
description: "لا مزيد من i18next. دليل 2026 لبناء تطبيق Angular
|
|
4
|
+
title: "تدويل Angular 22 - الدليل الكامل لترجمة تطبيقك"
|
|
5
|
+
description: "لا مزيد من i18next. دليل 2026 لبناء تطبيق Angular 22 متعدد اللغات (i18n). ترجم باستخدام وكلاء الذكاء الاصطناعي وحسّن حجم الحزمة وتحسين محركات البحث والأداء."
|
|
6
6
|
keywords:
|
|
7
7
|
- تدويل
|
|
8
8
|
- وثائق
|
|
@@ -13,8 +13,8 @@ slugs:
|
|
|
13
13
|
- doc
|
|
14
14
|
- environment
|
|
15
15
|
- angular
|
|
16
|
-
applicationTemplate: https://github.com/aymericzip/intlayer-angular-
|
|
17
|
-
applicationShowcase: https://intlayer-angular-
|
|
16
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-angular-22-template
|
|
17
|
+
applicationShowcase: https://intlayer-angular-22-template.vercel.app/
|
|
18
18
|
history:
|
|
19
19
|
- version: 8.9.0
|
|
20
20
|
date: 2026-05-04
|
|
@@ -31,7 +31,7 @@ history:
|
|
|
31
31
|
author: aymericzip
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
-
# ترجم موقع Angular
|
|
34
|
+
# ترجم موقع Angular 22 (Vite) الخاص بك باستخدام Intlayer | التدويل (i18n)
|
|
35
35
|
|
|
36
36
|
## جدول المحتويات
|
|
37
37
|
|
|
@@ -77,7 +77,7 @@ author: aymericzip
|
|
|
77
77
|
<Tab label="الرمز" value="code">
|
|
78
78
|
|
|
79
79
|
<iframe
|
|
80
|
-
src="https://ide.intlayer.org/aymericzip/intlayer-angular-
|
|
80
|
+
src="https://ide.intlayer.org/aymericzip/intlayer-angular-22-template?file=intlayer.config.ts"
|
|
81
81
|
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
82
82
|
title="Demo CodeSandbox - كيفية تدويل تطبيقك باستخدام Intlayer"
|
|
83
83
|
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
@@ -88,7 +88,7 @@ author: aymericzip
|
|
|
88
88
|
<Tab label="عرض تجريبي" value="demo">
|
|
89
89
|
|
|
90
90
|
<iframe
|
|
91
|
-
src="https://intlayer-angular-
|
|
91
|
+
src="https://intlayer-angular-22-template.vercel.app/"
|
|
92
92
|
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
93
93
|
title="Demo - intlayer-angular-template"
|
|
94
94
|
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
@@ -98,7 +98,7 @@ author: aymericzip
|
|
|
98
98
|
</Tab>
|
|
99
99
|
</Tabs>
|
|
100
100
|
|
|
101
|
-
راجع [قالب التطبيق](https://github.com/aymericzip/intlayer-angular-
|
|
101
|
+
راجع [قالب التطبيق](https://github.com/aymericzip/intlayer-angular-22-template) على GitHub.
|
|
102
102
|
|
|
103
103
|
<Steps>
|
|
104
104
|
|
|
@@ -186,7 +186,7 @@ export default config;
|
|
|
186
186
|
|
|
187
187
|
<Step number={3} title="دمج Intlayer في تكوين Angular الخاص بك">
|
|
188
188
|
|
|
189
|
-
لدمج Intlayer مع Angular CLI، تحتاج إلى استخدام باني مخصص (custom builder). يفترض هذا الدليل أنك تستخدم Vite/esbuild (الافتراضي لمشاريع Angular
|
|
189
|
+
لدمج Intlayer مع Angular CLI، تحتاج إلى استخدام باني مخصص (custom builder). يفترض هذا الدليل أنك تستخدم Vite/esbuild (الافتراضي لمشاريع Angular 22).
|
|
190
190
|
|
|
191
191
|
أولاً، قم بتعديل `angular.json` الخاص بك لاستخدام باني esbuild المخصص. قم بتحديث تكوينات `build` و `serve`:
|
|
192
192
|
|