@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
|
@@ -30,9 +30,7 @@ history:
|
|
|
30
30
|
author: aymericzip
|
|
31
31
|
---
|
|
32
32
|
|
|
33
|
-
#
|
|
34
|
-
|
|
35
|
-
راجع [قالب التطبيق](https://github.com/aymericzip/intlayer-vite-vue-template) على GitHub.
|
|
33
|
+
# ترجمة موقع Vite و Vue الخاص بك باستخدام Intlayer | Internationalization (i18n)
|
|
36
34
|
|
|
37
35
|
## جدول المحتويات
|
|
38
36
|
|
|
@@ -63,30 +63,32 @@ getLocalizedUrl(
|
|
|
63
63
|
- **Type**: `Locales`
|
|
64
64
|
- **Required**: Yes
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
- `
|
|
69
|
-
- **الوصف**:
|
|
70
|
-
- **النوع**: `
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
- `
|
|
77
|
-
|
|
78
|
-
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
- `
|
|
82
|
-
|
|
83
|
-
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
- `
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
66
|
+
### المعاملات الاختيارية
|
|
67
|
+
|
|
68
|
+
- `options?: object`
|
|
69
|
+
- **الوصف**: كائن التكوين لسلوك تحديد موقع عناوين URL.
|
|
70
|
+
- **النوع**: `object`
|
|
71
|
+
- **مطلوب**: لا (اختياري)
|
|
72
|
+
|
|
73
|
+
- `options.locales?: Locales[]`
|
|
74
|
+
- **الوصف**: مصفوفة اللغات المدعومة. إذا لم يتم توفيرها، فسيتم استخدام اللغات المكونة من تكوين مشروعك.
|
|
75
|
+
- **النوع**: `Locales[]`
|
|
76
|
+
- **القيمة الافتراضية**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md#middleware)
|
|
77
|
+
|
|
78
|
+
- `options.defaultLocale?: Locales`
|
|
79
|
+
- **الوصف**: اللغة الافتراضية للتطبيق. إذا لم يتم توفيرها، فسيتم استخدام اللغة الافتراضية المكونة من تكوين مشروعك.
|
|
80
|
+
- **النوع**: `Locales`
|
|
81
|
+
- **القيمة الافتراضية**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md#middleware)
|
|
82
|
+
|
|
83
|
+
- `options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
|
|
84
|
+
- **الوصف**: وضع التوجيه للعنوان لمعالجة اللغة. إذا لم يتم توفيره، فسيتم استخدام الوضع المكون من تكوين مشروعك.
|
|
85
|
+
- **النوع**: `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
|
|
86
|
+
- **القيمة الافتراضية**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/configuration.md#middleware)
|
|
87
|
+
- **الأوضاع**:
|
|
88
|
+
- `prefix-no-default`: بدون بادئة للغة الافتراضية، بادئة لجميع اللغات الأخرى
|
|
89
|
+
- `prefix-all`: بادئة لجميع اللغات بما في ذلك اللغة الافتراضية
|
|
90
|
+
- `no-prefix`: بدون بادئة لغة في العنوان
|
|
91
|
+
- `search-params`: استخدام معاملات الاستعلام للغة (مثل `?locale=fr`)
|
|
90
92
|
|
|
91
93
|
### الإرجاع
|
|
92
94
|
|
|
@@ -49,26 +49,12 @@ author: aymericzip
|
|
|
49
49
|
|
|
50
50
|
## المعاملات
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
### المعاملات المطلوبة
|
|
53
53
|
|
|
54
54
|
- `url: string`
|
|
55
|
-
-
|
|
56
|
-
-
|
|
57
|
-
|
|
58
|
-
- `locales: Locales[]`
|
|
59
|
-
- **الوصف**: مصفوفة اختيارية من اللغات المدعومة. القيمة الافتراضية هي اللغات المعرفة في المشروع.
|
|
60
|
-
- **النوع**: `Locales[]`
|
|
61
|
-
- **الافتراضي**: `localesDefault`
|
|
62
|
-
|
|
63
|
-
- `defaultLocale: Locales`
|
|
64
|
-
- **الوصف**: اللغة الافتراضية للتطبيق. القيمة الافتراضية هي اللغة الافتراضية المعرفة في المشروع.
|
|
65
|
-
- **النوع**: `Locales`
|
|
66
|
-
- **الافتراضي**: `defaultLocaleDefault`
|
|
67
|
-
|
|
68
|
-
- `prefixDefault: boolean`
|
|
69
|
-
- **الوصف**: ما إذا كان يجب إضافة بادئة للغة الافتراضية. القيمة الافتراضية هي القيمة المعرفة في المشروع.
|
|
70
|
-
- **النوع**: `boolean`
|
|
71
|
-
- **الافتراضي**: `prefixDefaultDefault`
|
|
55
|
+
- **Description**: سلسلة URL الأصلية التي سيتم إضافة البادئة لها باستخدام اللغات.
|
|
56
|
+
- **Type**: `string`
|
|
57
|
+
- **Required**: نعم
|
|
72
58
|
|
|
73
59
|
### المعاملات الاختيارية
|
|
74
60
|
|
|
@@ -24,6 +24,10 @@ history:
|
|
|
24
24
|
author: aymericzip
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
+
# توثيق Hook useDictionary
|
|
28
|
+
|
|
29
|
+
يسمح hook `useDictionary` بمعالجة كائن يشبه القاموس (يحتوي على مفاتيح ومحتوى) والتعامل مع الترجمات والتعددات وما إلى ذلك بداخله. بخلاف `useIntlayer`، الذي تم تصميمه للعمل مع إعلانات القاموس المُنشأة، فإن `useDictionary` أكثر مرونة ويمكن استخدامه مع أي كائن يتبع هيكل القاموس.
|
|
30
|
+
|
|
27
31
|
## مثال على الاستخدام في React
|
|
28
32
|
|
|
29
33
|
فيما يلي مثال على كيفية استخدام الخطاف `useDictionary` في مكون React:
|
|
@@ -45,27 +49,6 @@ const ComponentExample: FC = () => {
|
|
|
45
49
|
};
|
|
46
50
|
```
|
|
47
51
|
|
|
48
|
-
## التكامل مع الخادم
|
|
49
|
-
|
|
50
|
-
إذا كنت تستخدم الخطاف `useDictionary` خارج `IntlayerProvider`، يجب توفير اللغة صراحة كمعامل عند عرض المكون:
|
|
51
|
-
|
|
52
|
-
```tsx fileName="./ServerComponentExample.tsx" codeFormat={["typescript", "esm"]}
|
|
53
|
-
import type { FC } from "react";
|
|
54
|
-
import { useDictionary } from "react-intlayer/server";
|
|
55
|
-
import clientComponentExampleContent from "./component.content";
|
|
56
|
-
|
|
57
|
-
const ServerComponentExample: FC<{ locale: string }> = ({ locale }) => {
|
|
58
|
-
const { content } = useDictionary(clientComponentExampleContent, locale);
|
|
59
|
-
|
|
60
|
-
return (
|
|
61
|
-
<div>
|
|
62
|
-
<h1>{content.title}</h1>
|
|
63
|
-
<p>{content.content}</p>
|
|
64
|
-
</div>
|
|
65
|
-
);
|
|
66
|
-
};
|
|
67
|
-
```
|
|
68
|
-
|
|
69
52
|
## نصائح إضافية
|
|
70
53
|
|
|
71
54
|
- **سلامة النوع**: استخدم دائمًا `Dictionary` لتعريف القواميس الخاصة بك لضمان سلامة النوع.
|
|
@@ -21,9 +21,9 @@ slugs:
|
|
|
21
21
|
author: aymericzip
|
|
22
22
|
---
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
# توثيق خطاف useIntlayer
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
يسمح خطاف `useIntlayer` بالحصول على محتوى محلي من قاموس باستخدام مفتاحه. وهو يعتمد على `useDictionary` لكنه يحقن تلقائياً نسخة محسّنة من القاموس من التصريحات المُنشأة.
|
|
27
27
|
|
|
28
28
|
## مثال على الاستخدام في React
|
|
29
29
|
|
|
@@ -48,3 +48,18 @@ import "vite-intlayer";
|
|
|
48
48
|
| `intlayerProxy` | مكوّن إضافي أثناء التطوير للتعامل مع اكتشاف اللغة والتوجيه. | - |
|
|
49
49
|
| `intlayerMiddleware` | (**مهمل**) مرادف لـ `intlayerProxy`. | - |
|
|
50
50
|
| `intlayerPrune` | ملحق لإجراء tree-shake وتقليم القواميس غير المستخدمة أثناء عملية البناء. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/vite-intlayer/intlayerPrune.md) |
|
|
51
|
+
|
|
52
|
+
### الأدوات
|
|
53
|
+
|
|
54
|
+
| التصدير | الوصف | المستند ذو الصلة |
|
|
55
|
+
| ---------------------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| `createIntlayerProxyHandler` | إرجاع middleware لـ Node.js `(req, res, next)` غير متعلق بأي framework مع منطق توجيه locale. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/vite-intlayer/intlayerProxy.md) |
|
|
57
|
+
|
|
58
|
+
### الأنواع
|
|
59
|
+
|
|
60
|
+
| التصدير | الوصف |
|
|
61
|
+
| ---------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
62
|
+
| `IntlayerPluginOptions` | الخيارات المقبولة بواسطة `intlayer()`. تمتد `GetConfigurationOptions` مع `compatCallers` و `proxy`. |
|
|
63
|
+
| `IntlayerProxyPluginOptions` | الخيارات المقبولة بواسطة `intlayerProxy()` و `createIntlayerProxyHandler()`. تتضمن `ignore` و `configOptions`. |
|
|
64
|
+
| `IntlayerCompilerOptions` | الخيارات المقبولة بواسطة `intlayerCompiler()`. تتضمن `configOptions` و `compilerConfig`. |
|
|
65
|
+
| `CompatCallerConfig` | إعادة تصدير من `@intlayer/babel`. يصف نمط compat-adapter caller لتحليل استخدام الحقول. |
|
|
@@ -39,11 +39,126 @@ export default defineConfig({
|
|
|
39
39
|
});
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
##
|
|
42
|
+
## الخيارات
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
```ts
|
|
45
|
+
import type { IntlayerPluginOptions } from "vite-intlayer";
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`IntlayerPluginOptions` يوسع `GetConfigurationOptions` (انظر `@intlayer/config`) مع الحقول الإضافية التالية:
|
|
49
|
+
|
|
50
|
+
| الخيار | النوع | القيمة الافتراضية | الوصف |
|
|
51
|
+
| --------------- | ------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
52
|
+
| `compatCallers` | `CompatCallerConfig[]` | `[]` | أنماط استدعاء إضافية لحزم compat-adapter (مثل `@intlayer/react-i18next`). يتم تمريرها إلى محلل استخدام الحقول في وقت البناء. |
|
|
53
|
+
| `proxy` | `{ ignore?: (req) => boolean }` | `undefined` | خيارات يتم تمريرها إلى وكيل توجيه المنطقة المرفقة. استخدم `ignore` لاستبعاد المسارات المحددة (مثل مسارات API) من توجيه المنطقة. |
|
|
54
|
+
|
|
55
|
+
يتم تمرير جميع الخيارات الأخرى (`override`, `configFile`, …) مباشرة إلى `getConfiguration()`.
|
|
56
|
+
|
|
57
|
+
### أمثلة
|
|
58
|
+
|
|
59
|
+
#### تجاهل مسارات API من توجيه اللغة
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
// vite.config.ts
|
|
63
|
+
import { defineConfig } from "vite";
|
|
64
|
+
import { intlayer } from "vite-intlayer";
|
|
65
|
+
|
|
66
|
+
export default defineConfig({
|
|
67
|
+
plugins: [
|
|
68
|
+
intlayer({
|
|
69
|
+
proxy: {
|
|
70
|
+
ignore: (req) => req.url?.startsWith("/api"),
|
|
71
|
+
},
|
|
72
|
+
}),
|
|
73
|
+
],
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### مع مسار ملف config مخصص
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
export default defineConfig({
|
|
81
|
+
plugins: [
|
|
82
|
+
intlayer({
|
|
83
|
+
configFile: "./config/intlayer.config.ts",
|
|
84
|
+
}),
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### مع استدعاءات compat-adapter
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
import { intlayer } from "vite-intlayer";
|
|
93
|
+
import { reactI18nextCallerConfig } from "@intlayer/react-i18next/plugin";
|
|
94
|
+
|
|
95
|
+
export default defineConfig({
|
|
96
|
+
plugins: [
|
|
97
|
+
intlayer({
|
|
98
|
+
compatCallers: [reactI18nextCallerConfig],
|
|
99
|
+
}),
|
|
100
|
+
],
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## ما يفعله البرنامج الإضافي
|
|
105
|
+
|
|
106
|
+
### 1. تحضير القاموس
|
|
107
|
+
|
|
108
|
+
قبل بدء البناء (وكل ساعة واحدة في بيئة التطوير)، يستدعي `intlayer` الدالة `prepareIntlayer` لترجمة جميع ملفات `.content.ts` إلى قواميس JSON محسنة مخزنة في `.intlayer/`.
|
|
109
|
+
|
|
110
|
+
### 2. أسماء مستعارة للوحدات
|
|
111
|
+
|
|
112
|
+
يضيف البرنامج الإضافي أسماء مستعارة لحل Vite بحيث يتم حل `import { myDict } from 'intlayer/dictionaries/my-dict'` إلى ملف JSON مترجم على القرص. تستخدم عمليات بناء SSR `ssr.noExternal` للتأكد من أن جميع حزم `@intlayer/*` موجودة مع تطبيق الأسماء المستعارة.
|
|
113
|
+
|
|
114
|
+
### 3. مراقب خادم التطوير
|
|
115
|
+
|
|
116
|
+
في وضع التطوير، يتم بدء مراقب `chokidar`. عند تغيير ملف `.content.ts`، يتم إعادة تجميع القواميس وينتشر تحديث Vite's HMR إلى المتصفح.
|
|
117
|
+
|
|
118
|
+
### 4. وسيط توجيه المنطقة المدمج (v9+)
|
|
119
|
+
|
|
120
|
+
منذ إصدار Intlayer v9، يتم تسجيل middleware `intlayerProxy` تلقائياً داخل `intlayer()`. يتعامل مع:
|
|
121
|
+
|
|
122
|
+
- كشف المنطقة من بادئة URL والكوكيز ورأس `Accept-Language`.
|
|
123
|
+
- إعادة توجيه 301 عندما لا تتطابق المنطقة المكتشفة مع عنوان URL الحالي.
|
|
124
|
+
- إعادة كتابة URL داخلية بحيث يرى الإطار معامل المسار `[locale]` الصحيح.
|
|
125
|
+
|
|
126
|
+
يتم التحكم في الوسيط بواسطة `routing.enableProxy` (الافتراضي `true`) في إعدادات Intlayer الخاصة بك. لتعطيله بالكامل:
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
// intlayer.config.ts
|
|
130
|
+
import { defineConfig } from "intlayer";
|
|
131
|
+
|
|
132
|
+
export default defineConfig({
|
|
133
|
+
routing: { enableProxy: false },
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
لتخصيص سلوك الوسيط دون استدعاء `intlayerProxy()` منفصل، مرر خيارات `proxy` إلى المكون الإضافي الرئيسي:
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api") } });
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
راجع [وثائق intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/vite-intlayer/intlayerProxy.md) للحصول على مرجع سلوك التوجيه الكامل.
|
|
144
|
+
|
|
145
|
+
### 5. مجمِّع مرفق (v9+)
|
|
146
|
+
|
|
147
|
+
عندما يكون `compiler.enabled` هو `true` **و** يتم تعيين `compiler.output` في إعدادات Intlayer الخاصة بك، يسجل `intlayer()` `intlayerCompiler` تلقائياً. يستخرج المجمِّع إعلانات المحتوى المضمنة المكتوبة مباشرة داخل ملفات المكونات ويكتبها إلى القواميس في وقت التحويل. انظر [وثائق intlayerCompiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/packages/vite-intlayer/intlayerCompiler.md).
|
|
148
|
+
|
|
149
|
+
### 6. تحسينات البناء
|
|
150
|
+
|
|
151
|
+
أثناء بناء الإنتاج، تضيف الإضافة:
|
|
152
|
+
|
|
153
|
+
- **intlayerOptimize** – تحويل Babel الذي يعيد كتابة `useIntlayer('key')` → `useDictionary(hash)` وحقن واردات JSON المباشرة.
|
|
154
|
+
- **intlayerPrune** – يزيل حقول المحتوى غير المستخدمة من قاموس JSON.
|
|
155
|
+
- **intlayerMinify** – يضغط قاموس JSON ويمكن أن يعيد تسمية أسماء الحقول اختياريًا.
|
|
156
|
+
|
|
157
|
+
هذه غير نشطة في وضع التطوير.
|
|
158
|
+
|
|
159
|
+
## الأسماء المستعارة المهجورة
|
|
45
160
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
161
|
+
| الصادرات المهجورة | البديل |
|
|
162
|
+
| ----------------- | ---------- |
|
|
163
|
+
| `intlayerPlugin` | `intlayer` |
|
|
164
|
+
| `intLayerPlugin` | `intlayer` |
|
|
@@ -30,16 +30,83 @@ author: aymericzip
|
|
|
30
30
|
|
|
31
31
|
## الاستخدام
|
|
32
32
|
|
|
33
|
+
### كجزء من `intlayer()` (موصى به)
|
|
34
|
+
|
|
35
|
+
قم بتفعيل التنقية من خلال إعدادات Intlayer والمكون الرئيسي يتعامل مع كل شيء:
|
|
36
|
+
|
|
33
37
|
```ts
|
|
34
|
-
//
|
|
38
|
+
// intlayer.config.ts
|
|
39
|
+
import { defineConfig } from "intlayer";
|
|
40
|
+
|
|
41
|
+
export default defineConfig({
|
|
42
|
+
build: {
|
|
43
|
+
optimize: true, // تفعيل كل من التنقية والضغط
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
// vite.config.ts
|
|
35
50
|
import { defineConfig } from "vite";
|
|
36
|
-
import { intlayer
|
|
51
|
+
import { intlayer } from "vite-intlayer";
|
|
37
52
|
|
|
38
53
|
export default defineConfig({
|
|
39
|
-
plugins: [intlayer()
|
|
54
|
+
plugins: [intlayer()],
|
|
40
55
|
});
|
|
41
56
|
```
|
|
42
57
|
|
|
58
|
+
### مستقل
|
|
59
|
+
|
|
60
|
+
إذا كنت تؤلف مكدس المكونات الإضافية يدويًا، فإن `intlayerPrune` و `intlayerMinify` يشتركان في كائن `PruneContext` يجب إنشاؤه مرة واحدة وتمريره إلى كليهما:
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
// vite.config.ts
|
|
64
|
+
import { defineConfig } from "vite";
|
|
65
|
+
import { intlayerPrune, intlayerMinify } from "vite-intlayer";
|
|
66
|
+
import { createPruneContext } from "@intlayer/babel";
|
|
67
|
+
import { getConfiguration } from "@intlayer/config/node";
|
|
68
|
+
|
|
69
|
+
const intlayerConfig = getConfiguration();
|
|
70
|
+
const pruneContext = createPruneContext();
|
|
71
|
+
|
|
72
|
+
export default defineConfig({
|
|
73
|
+
plugins: [
|
|
74
|
+
intlayerPrune(intlayerConfig, pruneContext),
|
|
75
|
+
intlayerMinify(intlayerConfig, pruneContext), // اختياري، يقرأ من نفس السياق
|
|
76
|
+
],
|
|
77
|
+
});
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## كيف يعمل
|
|
81
|
+
|
|
82
|
+
### 1. تحليل الاستخدام (buildStart)
|
|
83
|
+
|
|
84
|
+
أثناء `buildStart`، يقوم plugin `intlayerOptimize` (وهو أيضًا جزء من `intlayer()`) بفحص كل ملف مصدر مكون مدرج في `build.filesList`. لكل استدعاء `useIntlayer('key')` أو `getIntlayer('key')`، يسجل بالضبط الحقول التي تم الوصول إليها، على سبيل المثال:
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
const { title, description } = useIntlayer("myDict");
|
|
88
|
+
// السجل: myDict → { title, description }
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
وهذا يبني `pruneContext.fieldUsageMap` قبل تشغيل أي استدعاءات `transform`.
|
|
92
|
+
|
|
93
|
+
### 2. تقليص JSON (transform, enforce: 'pre')
|
|
94
|
+
|
|
95
|
+
عندما تعالج Vite ملف قاموس JSON مُترجَم، يعترض `intlayerPrune` عملية التحويل قبل تحويل JSON → ESM المدمج في Vite. يقرأ خريطة استخدام الحقول من `pruneContext` ويزيل أي حقل محتوى غير مسجل في مجموعة الاستخدام.
|
|
96
|
+
|
|
97
|
+
تُدعم شكلان من المحتوى:
|
|
98
|
+
|
|
99
|
+
- **القواميیس الثابتة** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`. يتم تقليص الحقول لكل لغة داخل `translation`.
|
|
100
|
+
- **القواموس الديناميكية (لكل لغة)** — `{ fieldA: ..., fieldB: ... }` مسطحة. يتم تقليص الحقول على المستوى الأعلى.
|
|
101
|
+
|
|
102
|
+
### 3. حالات خاصة
|
|
103
|
+
|
|
104
|
+
إذا لم يتمكن النظام من التعرف على هيكل محتوى القاموس (على سبيل المثال، شكل متداخل غير عادي)، يتم إضافته إلى `pruneContext.dictionariesWithEdgeCases` و**تركه دون تعديل**. يتم تسجيل تحذير. يتخطى `intlayerMinify` أيضاً هذه القواميس.
|
|
105
|
+
|
|
106
|
+
### 4. خريطة إعادة تسمية الحقول
|
|
107
|
+
|
|
108
|
+
عند نجاح التقليص، يكتب `intlayerPrune` أيضًا `pruneContext.dictionaryKeyToFieldRenameMap` — وهي خريطة من أسماء الحقول الأصلية إلى اسم مستعار قصير. يقرأ `intlayerMinify` هذه الخريطة لإعادة تسمية الحقول في JSON الناتج، وتحديث Babel الخاص بـ `intlayerOptimize` يحدّث عمليات الوصول إلى الخصائص في ملفات المصدر وفقًا لذلك.
|
|
109
|
+
|
|
43
110
|
## الوصف
|
|
44
111
|
|
|
45
112
|
يقوم المكوّن الإضافي بتحليل شفرة المصدر الخاصة بك لتحديد مفاتيح القواميس المستخدمة فعليًا. ثم يزيل أي محتوى غير مستخدم من ملفات القواميس المدرجة في الحزمة (bundle). يكون هذا مفيدًا بشكل خاص للمشاريع الكبيرة التي تحتوي على العديد من القواميس حيث يُستخدم جزء فقط منها في صفحات أو مكونات محددة.
|
package/docs/ar/releases/v9.md
CHANGED
|
@@ -335,28 +335,6 @@ npm install intlayer react-native-intlayer
|
|
|
335
335
|
|
|
336
336
|
---
|
|
337
337
|
|
|
338
|
-
## React Native: استيراد من حزمة واحدة
|
|
339
|
-
|
|
340
|
-
في تطبيق React Native أو Expo، لم تعد بحاجة إلى التوفيق بين `react-intlayer` و `react-native-intlayer`. تقوم حزمة `react-native-intlayer` الآن **بإعادة تصدير واجهة برمجة تطبيقات `react-intlayer` بالكامل** (الخطافات "hooks"، والأدوات، والمسارات الفرعية `/format` و `/html` و `/markdown`)، ويقوم `IntlayerProvider` الخاص بها بتطبيق polyfills الخاصة بـ React Native تلقائيًا.
|
|
341
|
-
|
|
342
|
-
قم باستيراد كل شيء من حزمة `react-native-intlayer` الفردية:
|
|
343
|
-
|
|
344
|
-
```tsx
|
|
345
|
-
import {
|
|
346
|
-
IntlayerProvider,
|
|
347
|
-
useIntlayer,
|
|
348
|
-
useLocale,
|
|
349
|
-
} from "react-native-intlayer";
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
```bash
|
|
353
|
-
npm install intlayer react-native-intlayer
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
> الاستيراد من `react-intlayer` يظل يعمل، ولكن `react-native-intlayer` هي الآن نقطة الدخول الفردية الموصى بها لـ React Native — حيث يوفر المزود الخاص بها polyfills التي لا يوفرها المزود الموجه للويب `react-intlayer`.
|
|
357
|
-
|
|
358
|
-
---
|
|
359
|
-
|
|
360
338
|
## CMS SDK: استخدم Intlayer كقاعدة بيانات محتوى headless
|
|
361
339
|
|
|
362
340
|
يأتي Intlayer v9 مع SDK نظيف وذاتي المصادقة في `@intlayer/api` للتفاعل مع نظام إدارة المحتوى (CMS) برمجيًا — جلب المشاريع، وجلب القواميس، ودفعها أو تحديثها من خادمك أو سكربتاتك أو CI الخاص بك. تتم المصادقة (OAuth2 `client_credentials`) وتجديدها نيابةً عنك.
|
|
@@ -395,21 +373,6 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
395
373
|
|
|
396
374
|
يقوم المثبّت بتنزيل ملف `docker-compose.yml` وملف `.env`، ويولّد الأسرار المطلوبة تلقائياً، ويشغّل `docker compose up -d`. كل شيء — لوحة التحكم، وواجهة برمجة التطبيقات، وقاعدة البيانات، وتخزين الكائنات، والبريد الإلكتروني التفاعلي — يعمل محلياً داخل حاويات.
|
|
397
375
|
|
|
398
|
-
### الخدمات المتضمنة
|
|
399
|
-
|
|
400
|
-
| الخدمة | الغرض |
|
|
401
|
-
| ------------------------------------------------ | ----------------------------------------------------------------------- |
|
|
402
|
-
| **app** (TanStack Start) | واجهة لوحة التحكم على المنفذ `3000` |
|
|
403
|
-
| **backend** (Fastify/Bun) | واجهة برمجة تطبيقات REST على المنفذ `3100` |
|
|
404
|
-
| **MongoDB 7** (مجموعة نسخ متماثلة أحادية العقدة) | قاعدة البيانات الرئيسية |
|
|
405
|
-
| **Redis 7** | قوائم انتظار المهام والتخزين المؤقت |
|
|
406
|
-
| **MinIO** | تخزين كائنات متوافق مع S3 (الصور الرمزية، لقطات الشاشة) |
|
|
407
|
-
| **Mailpit** | خادم SMTP محلي + واجهة ويب للبريد الإلكتروني التفاعلي على المنفذ `8025` |
|
|
408
|
-
|
|
409
|
-
يتم تضمين Chromium (المستخدم لتوليد لقطات الشاشة عبر Puppeteer) داخل صورة الخادم الخلفي — دون الحاجة إلى حاوية إضافية.
|
|
410
|
-
|
|
411
|
-
---
|
|
412
|
-
|
|
413
376
|
## ملاحظات الترحيل من الإصدار 8
|
|
414
377
|
|
|
415
378
|
إذا كنت تقوم بالترقية من الإصدار 8، لاحظ أن الإصدار 9 لا يتضمن تغييرات جذرية (breaking changes). ولكن إليك التغييرات الرئيسية:
|
package/docs/ar/self_hosting.md
CHANGED
|
@@ -80,6 +80,18 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
80
80
|
|
|
81
81
|
---
|
|
82
82
|
|
|
83
|
+
## إعداد التشغيل الأول
|
|
84
|
+
|
|
85
|
+
على نسخة جديدة (قاعدة بيانات فارغة)، يعيد فتح لوحة التحكم توجيهك إلى صفحة **`/init`**:
|
|
86
|
+
|
|
87
|
+
1. أنشئ الحساب الأول. نظراً لأن مجموعة المستخدمين فارغة، يتم ترقية هذا الحساب تلقائياً إلى **super admin**.
|
|
88
|
+
2. يتم إرسال بريد إلكتروني للتحقق (عبر Resend). التحقق من البريد الإلكتروني **إلزامي** — وهذا هو السبب في أنه يجب تعيين `RESEND_API_KEY` قبل أن تبدأ.
|
|
89
|
+
3. انقر على الرابط في البريد الإلكتروني، ثم قم بتسجيل الدخول.
|
|
90
|
+
|
|
91
|
+
بمجرد وجود admin، يعيد `/init` التوجيه إلى صفحة تسجيل الدخول القياسية.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
83
95
|
## الخدمات
|
|
84
96
|
|
|
85
97
|
| الخدمة | الصورة | المنفذ (المضيف) | الغرض |
|
|
@@ -99,7 +111,16 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
99
111
|
|
|
100
112
|
## متغيرات البيئة
|
|
101
113
|
|
|
102
|
-
|
|
114
|
+
### مطلوب
|
|
115
|
+
|
|
116
|
+
| المتغير | مثال | الوصف |
|
|
117
|
+
| ---------------------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
118
|
+
| `DB_ID` | `intlayer` | مستخدم MongoDB Atlas |
|
|
119
|
+
| `DB_MDP` | _(كلمة المرور الخاصة بك)_ | كلمة مرور MongoDB Atlas |
|
|
120
|
+
| `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | مضيف مجموعة MongoDB Atlas (المستخدم في URI `mongodb+srv://`) |
|
|
121
|
+
| `BETTER_AUTH_SECRET` | _(تم إنشاؤها)_ | سر بحجم 32 بايت لتوقيع الجلسة |
|
|
122
|
+
| `S3_SECRET_ACCESS_KEY` | _(تم إنشاؤها)_ | السر الخاص بـ MinIO المضمن |
|
|
123
|
+
| `RESEND_API_KEY` | _(مفتاحك)_ | البريد الإلكتروني المعاملاتي عبر Resend. مطلوب لإعداد التشغيل الأول إلا إذا قمت بتكوين mailer SMTP عام (انظر [Global mailer](#global-mailer)) |
|
|
103
124
|
|
|
104
125
|
### المطلوبة (مولّدة تلقائياً أو مطلوبة)
|
|
105
126
|
|
|
@@ -141,6 +162,26 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
141
162
|
|
|
142
163
|
---
|
|
143
164
|
|
|
165
|
+
### بريد عام
|
|
166
|
+
|
|
167
|
+
بشكل افتراضي، يتم إرسال جميع رسائل البريد الإلكترونية للمعاملات عبر Resend باستخدام `RESEND_API_KEY`. يمكن للنشرات ذاتية الاستضافة بدلاً من ذلك توجيه **كل** بريد إلكتروني — بما في ذلك رسائل البريد الإلكترونية غير المتعلقة بالمنظمة مثل إعادة تعيين كلمات المرور والروابط السحرية — عبر بريد عام مُعد باستخدام متغيرات البيئة.
|
|
168
|
+
|
|
169
|
+
عيّن `MAIL_PROVIDER` لتفعيله. عند عدم التعيين، يتم استخدام بريد Resend الافتراضي.
|
|
170
|
+
|
|
171
|
+
| المتغير | مثال | الوصف |
|
|
172
|
+
| -------------------- | ------------------------------ | ------------------------------------------------------------------------------ |
|
|
173
|
+
| `MAIL_PROVIDER` | `smtp` | النقل العام: `smtp` أو `resend`. اترك بدون تعيين لاستخدام الإعدادات الافتراضية |
|
|
174
|
+
| `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | رأس المُرسل. يقبل عنوان مجرد أو تنسيق `Name <email>` |
|
|
175
|
+
| `MAIL_SMTP_HOST` | `smtp.acme.com` | مضيف SMTP (مطلوب عند `MAIL_PROVIDER=smtp`) |
|
|
176
|
+
| `MAIL_SMTP_PORT` | `587` | منفذ SMTP (الافتراضي `587`) |
|
|
177
|
+
| `MAIL_SMTP_SECURE` | `false` | TLS ضمني. عيّن `true` للمنفذ `465` |
|
|
178
|
+
| `MAIL_SMTP_USER` | _(اسم المستخدم الخاص بك)_ | اسم مستخدم SMTP (اختياري؛ تجاهل للمرحلات غير المصرح بها) |
|
|
179
|
+
| `MAIL_SMTP_PASSWORD` | _(كلمة المرور الخاصة بك)_ | كلمة مرور SMTP |
|
|
180
|
+
|
|
181
|
+
> الأولوية: بريد المنظمة الخاص بها (المُعد من لوحة المعلومات **Organization**) له الأولوية على البريد العام، والذي له بدوره الأولوية على مفتاح Resend الافتراضي.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
144
185
|
## ربط مشروعك بـ Intlayer
|
|
145
186
|
|
|
146
187
|
بمجرد تشغيل المكدس، وجّه مشروعك نحو الخادم الخلفي ولوحة التحكم المستضافَين ذاتياً بدلاً من `intlayer.org`.
|
|
@@ -259,47 +300,11 @@ docker run --rm \
|
|
|
259
300
|
|
|
260
301
|
---
|
|
261
302
|
|
|
262
|
-
##
|
|
263
|
-
|
|
264
|
-
للنشر في الإنتاج، ضع وكيلاً عكسياً أمام حاويات التطبيق والخادم الخلفي بدلاً من كشفها مباشرة.
|
|
303
|
+
## القيود
|
|
265
304
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
server {
|
|
270
|
-
listen 80;
|
|
271
|
-
server_name cms.example.com;
|
|
272
|
-
|
|
273
|
-
location / {
|
|
274
|
-
proxy_pass http://localhost:3000;
|
|
275
|
-
proxy_set_header Host $host;
|
|
276
|
-
proxy_set_header X-Real-IP $remote_addr;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
server {
|
|
281
|
-
listen 80;
|
|
282
|
-
server_name api.example.com;
|
|
283
|
-
|
|
284
|
-
location / {
|
|
285
|
-
proxy_pass http://localhost:3100;
|
|
286
|
-
proxy_set_header Host $host;
|
|
287
|
-
proxy_set_header X-Real-IP $remote_addr;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
حدّث متغيرات البيئة التالية في `.env` لتتناسب مع نطاقاتك العامة:
|
|
293
|
-
|
|
294
|
-
```sh
|
|
295
|
-
BACKEND_URL=https://api.example.com
|
|
296
|
-
APP_URL=https://cms.example.com
|
|
297
|
-
DOMAIN=example.com
|
|
298
|
-
VITE_BACKEND_URL=https://api.example.com
|
|
299
|
-
VITE_DOMAIN=example.com
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
> تُخبز متغيرات `VITE_*` في صورة لوحة التحكم عند وقت البناء. إذا غيّرتها بعد بناء الصورة، ستحتاج إلى إعادة بناء صورة `app` (`docker compose build app`) أو استخدام حقن التهيئة في وقت التشغيل.
|
|
305
|
+
- **MongoDB يجب أن يكون خارجياً (Atlas).** يتصل الخادم الخلفي فقط عبر `mongodb+srv://` (مبني من `DB_ID` / `DB_MDP` / `DB_CLUSTER`)، لذا لا يمكن استخدام `mongodb://host:27017` العادي — بما في ذلك `mongod` المدمج في الحاوية الخاصة — لا يمكن استخدامه. قدم مجموعة MongoDB Atlas.
|
|
306
|
+
- **لا توجد نطاقات مخصصة.** جميع عناوين URL الموجهة للمتصفح `VITE_*` مدرجة مباشرة في التطبيق وقت البناء، والصورة المنشورة تأتي مع قيم `localhost`. يجب الوصول إلى لوحة التحكم على `http://localhost:3000`؛ تقديمها على نطاق عام سيتطلب إعادة بناء الصورة مع عناوين URL المستهدفة المدمجة فيها وليس مدعوماً بشكل افتراضي.
|
|
307
|
+
- **البريد الإلكتروني يتطلب خادم بريد يعمل.** إعداد التشغيل الأول يفرض التحقق من البريد الإلكتروني، لذا يجب تكوين إما `RESEND_API_KEY` أو [خادم SMTP عام](#global-mailer) (`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`). بعد دخول المسؤول الأول، يمكن لكل منظمة أيضاً تكوين خادم SMTP أو Resend الخاص بها من لوحة التحكم.
|
|
303
308
|
|
|
304
309
|
---
|
|
305
310
|
|
|
@@ -324,14 +329,6 @@ docker compose build app
|
|
|
324
329
|
docker compose up -d app
|
|
325
330
|
```
|
|
326
331
|
|
|
327
|
-
### البريد الإلكتروني لا يُرسل
|
|
328
|
-
|
|
329
|
-
افتراضياً، يتم التقاط جميع البريد الصادر بواسطة Mailpit. افتح `http://localhost:8025` لرؤية الرسائل المرسلة. لإرسال بريد إلكتروني حقيقي، اضبط `MAIL_PROVIDER=resend` و`RESEND_API_KEY=<your-key>` في `.env`، ثم أعد تشغيل الخادم الخلفي:
|
|
330
|
-
|
|
331
|
-
```sh
|
|
332
|
-
docker compose restart backend
|
|
333
|
-
```
|
|
334
|
-
|
|
335
332
|
### دلو MinIO مفقود
|
|
336
333
|
|
|
337
334
|
إذا لم تُشغَّل خدمة `minio-init` المؤقتة (أو شُغّلت قبل أن يكون MinIO جاهزاً)، أنشئ الدلو يدوياً:
|