@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
|
@@ -24,26 +24,9 @@ history:
|
|
|
24
24
|
author: aymericzip
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
# Документація Hook useDictionary
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
```tsx fileName="./ComponentExample.tsx" codeFormat={["typescript", "esm"]}
|
|
32
|
-
import type { FC } from "react";
|
|
33
|
-
import { useDictionary } from "react-intlayer";
|
|
34
|
-
import componentContent from "./component.content";
|
|
35
|
-
|
|
36
|
-
const ComponentExample: FC = () => {
|
|
37
|
-
const { title, content } = useDictionary(componentContent);
|
|
38
|
-
|
|
39
|
-
return (
|
|
40
|
-
<div>
|
|
41
|
-
<h1>{title}</h1>
|
|
42
|
-
<p>{content}</p>
|
|
43
|
-
</div>
|
|
44
|
-
);
|
|
45
|
-
};
|
|
46
|
-
```
|
|
29
|
+
Hook `useDictionary` дозволяє обробляти об'єкт, який виглядає як словник (містить ключі та вміст) та обробляти переклади, перелічення тощо всередині нього. На відміну від `useIntlayer`, який призначений для роботи з генерованими деклараціями словників, `useDictionary` є більш гнучким і може використовуватися з будь-яким об'єктом, що відповідає структурі словника.
|
|
47
30
|
|
|
48
31
|
## Інтеграція на сервері
|
|
49
32
|
|
|
@@ -48,3 +48,18 @@ import "vite-intlayer";
|
|
|
48
48
|
| `intlayerProxy` | Плагін middleware для розробки, що обробляє визначення локалі та маршрутизацію. | - |
|
|
49
49
|
| `intlayerMiddleware` | (**Застарілий**) Аліас для `intlayerProxy`. | - |
|
|
50
50
|
| `intlayerPrune` | Плагін для tree-shake та видалення невикористаних словників під час збірки. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/packages/vite-intlayer/intlayerPrune.md) |
|
|
51
|
+
|
|
52
|
+
### Утиліти
|
|
53
|
+
|
|
54
|
+
| Export | Опис | Пов'язана документація |
|
|
55
|
+
| ---------------------------- | -------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| `createIntlayerProxyHandler` | Повертає framework-agnostic Node.js `(req, res, next)` middleware з логікою маршрутизації локалей. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/packages/vite-intlayer/intlayerProxy.md) |
|
|
57
|
+
|
|
58
|
+
### Типи
|
|
59
|
+
|
|
60
|
+
| Export | Опис |
|
|
61
|
+
| ---------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
|
62
|
+
| `IntlayerPluginOptions` | Параметри, прийняті `intlayer()`. Розширює `GetConfigurationOptions` за допомогою `compatCallers` та `proxy`. |
|
|
63
|
+
| `IntlayerProxyPluginOptions` | Параметри, прийняті `intlayerProxy()` та `createIntlayerProxyHandler()`. Включає `ignore` та `configOptions`. |
|
|
64
|
+
| `IntlayerCompilerOptions` | Параметри, прийняті `intlayerCompiler()`. Включає `configOptions` та `compilerConfig`. |
|
|
65
|
+
| `CompatCallerConfig` | Re-export з `@intlayer/babel`. Описує compat-adapter caller pattern для аналізу field-usage. |
|
|
@@ -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
|
+
#### З користувацьким шляхом до файлу конфігурації
|
|
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 callers
|
|
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. Module aliases
|
|
111
|
+
|
|
112
|
+
Плагін додає Vite resolve aliases, щоб `import { myDict } from 'intlayer/dictionaries/my-dict'` розв'язувався до скомпільованого JSON файлу на диску. SSR builds використовують `ssr.noExternal`, щоб забезпечити, що всі пакети `@intlayer/*` об'єднані з застосованими aliases.
|
|
113
|
+
|
|
114
|
+
### 3. Dev-server watcher
|
|
115
|
+
|
|
116
|
+
У режимі розробки запускається `chokidar` watcher. Коли змінюється файл `.content.ts`, словники перекомпілюються, а Vite's HMR поширює оновлення на браузер.
|
|
117
|
+
|
|
118
|
+
### 4. Bundled locale-routing proxy (v9+)
|
|
119
|
+
|
|
120
|
+
З версії Intlayer v9 middleware `intlayerProxy` реєструється автоматично всередині `intlayer()`. Він обробляє:
|
|
121
|
+
|
|
122
|
+
- Визначення локалі за префіксом URL, cookies та заголовком `Accept-Language`.
|
|
123
|
+
- 301 переспрямування, коли визначена локаль не відповідає поточному URL.
|
|
124
|
+
- Внутрішні переписування URL, щоб framework бачив правильний параметр маршруту `[locale]`.
|
|
125
|
+
|
|
126
|
+
Proxy керується параметром `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
|
+
Щоб налаштувати поведінку proxy без окремого виклику `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/uk/packages/vite-intlayer/intlayerProxy.md) для повного довідника поведінки маршрутизації.
|
|
144
|
+
|
|
145
|
+
### 5. Bundled compiler (v9+)
|
|
146
|
+
|
|
147
|
+
Коли `compiler.enabled` має значення `true` **та** `compiler.output` встановлено у вашій конфігурації Intlayer, `intlayer()` автоматично реєструє `intlayerCompiler`. Компілятор витягує вбудовані декларації контенту, написані безпосередньо у файлах компонентів, і записує їх у словники під час трансформації. Дивіться [документацію intlayerCompiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/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,89 @@ author: aymericzip
|
|
|
30
30
|
|
|
31
31
|
## Використання
|
|
32
32
|
|
|
33
|
+
### У складі `intlayer()` (рекомендовано)
|
|
34
|
+
|
|
35
|
+
Увімкніть pruning через конфіг Intlayer, і основний плагін буде керувати всім:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
// intlayer.config.ts
|
|
39
|
+
import { defineConfig } from "intlayer";
|
|
40
|
+
|
|
41
|
+
export default defineConfig({
|
|
42
|
+
build: {
|
|
43
|
+
optimize: true, // вмикає як pruning, так і minify
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
// vite.config.ts
|
|
50
|
+
import { defineConfig } from "vite";
|
|
51
|
+
import { intlayer } from "vite-intlayer";
|
|
52
|
+
|
|
53
|
+
export default defineConfig({
|
|
54
|
+
plugins: [intlayer()],
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Standalone
|
|
59
|
+
|
|
60
|
+
Якщо ви вручну складаєте стек плагінів, `intlayerPrune` та `intlayerMinify` спільно використовують об'єкт `PruneContext`, який має бути створений один раз і передан обом:
|
|
61
|
+
|
|
33
62
|
```ts
|
|
34
63
|
// vite.config.ts
|
|
35
64
|
import { defineConfig } from "vite";
|
|
36
|
-
import {
|
|
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();
|
|
37
71
|
|
|
38
72
|
export default defineConfig({
|
|
39
|
-
plugins: [
|
|
73
|
+
plugins: [
|
|
74
|
+
intlayerPrune(intlayerConfig, pruneContext),
|
|
75
|
+
intlayerMinify(intlayerConfig, pruneContext), // опціональний, читає з того ж контексту
|
|
76
|
+
],
|
|
40
77
|
});
|
|
41
78
|
```
|
|
42
79
|
|
|
43
|
-
##
|
|
80
|
+
## Як це працює
|
|
81
|
+
|
|
82
|
+
### 1. Аналіз використання (buildStart)
|
|
83
|
+
|
|
84
|
+
Під час `buildStart` плагін `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 pruning (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
|
+
Коли pruning успішно завершується, `intlayerPrune` також записує `pruneContext.dictionaryKeyToFieldRenameMap` — відображення оригінальних назв полів на короткі псевдоніми. `intlayerMinify` читає цю карту для перейменування полів у вихідному JSON, а pass перейменування Babel в `intlayerOptimize` оновлює доступи до властивостей у вихідних файлах відповідно.
|
|
109
|
+
|
|
110
|
+
## Умови активації
|
|
111
|
+
|
|
112
|
+
`intlayerPrune` активний **лише** коли всі наступні умови виконані:
|
|
113
|
+
|
|
114
|
+
1. Команда Vite — `build`.
|
|
115
|
+
2. `build.optimize` має значення `true` (або `undefined`, що за замовчуванням дорівнює `true` для збірок).
|
|
116
|
+
3. `build.purge` має значення `true` у вашій конфігурації Intlayer.
|
|
44
117
|
|
|
45
|
-
|
|
118
|
+
Він автоматично **вимикається**, коли `editor.enabled` має значення `true`, оскільки редактору потрібна повна змістова частина словника.
|
package/docs/uk/releases/v9.md
CHANGED
|
@@ -373,21 +373,6 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
373
373
|
|
|
374
374
|
Встановлювач завантажує `docker-compose.yml` та `.env`, автоматично генерує необхідні секрети та запускає `docker compose up -d`. Все — дашборд, API, база даних, сховище об'єктів та транзакційна електронна пошта — працює локально у контейнерах.
|
|
375
375
|
|
|
376
|
-
### Включені сервіси
|
|
377
|
-
|
|
378
|
-
| Сервіс | Призначення |
|
|
379
|
-
| ----------------------------------------- | ------------------------------------------------------------------------------ |
|
|
380
|
-
| **app** (TanStack Start) | UI дашборду на порту `3000` |
|
|
381
|
-
| **backend** (Fastify/Bun) | REST API на порту `3100` |
|
|
382
|
-
| **MongoDB 7** (одновузловий набір реплік) | Основна база даних |
|
|
383
|
-
| **Redis 7** | Черги завдань та кешування |
|
|
384
|
-
| **MinIO** | S3-сумісне сховище об'єктів (аватари, знімки екрана) |
|
|
385
|
-
| **Mailpit** | Локальний SMTP-приймач + веб-інтерфейс для транзакційної пошти на порту `8025` |
|
|
386
|
-
|
|
387
|
-
Chromium (що використовується для генерації знімків екрана через Puppeteer) вбудований у образ бекенду — додатковий контейнер не потрібен.
|
|
388
|
-
|
|
389
|
-
---
|
|
390
|
-
|
|
391
376
|
## Примітки щодо міграції з v8
|
|
392
377
|
|
|
393
378
|
Якщо ви оновлюєтеся з v8, зверніть увагу, що v9 не містить критичних змін (breaking changes). Проте ось ключові зміни:
|
package/docs/uk/self_hosting.md
CHANGED
|
@@ -64,6 +64,32 @@ Chromium (використовується для генерації скрін
|
|
|
64
64
|
|
|
65
65
|
## Швидкий старт
|
|
66
66
|
|
|
67
|
+
Витягніть і запустіть опубліковану image, надавши ваші облікові дані та секрети MongoDB Atlas:
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
docker run -d --name intlayer \
|
|
71
|
+
-p 3000:3000 \
|
|
72
|
+
-p 3100:3100 \
|
|
73
|
+
-p 9000:9000 \
|
|
74
|
+
-p 9001:9001 \
|
|
75
|
+
-v intlayer-data:/data \
|
|
76
|
+
-e DB_ID="<atlas-user>" \
|
|
77
|
+
-e DB_MDP="<atlas-password>" \
|
|
78
|
+
-e DB_CLUSTER="<cluster>.xxxxx.mongodb.net" \
|
|
79
|
+
-e BETTER_AUTH_SECRET="$(openssl rand -hex 32)" \
|
|
80
|
+
-e S3_SECRET_ACCESS_KEY="$(openssl rand -hex 16)" \
|
|
81
|
+
-e RESEND_API_KEY="<your-resend-key>" \
|
|
82
|
+
aymericzip/intlayer-selfhost
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Потім відкрийте **http://localhost:3000**.
|
|
86
|
+
|
|
87
|
+
> Dashboard доступний на `localhost`. Див. [Обмеження](#limitations) — користувацькі домени не підтримуються опублікованою image.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Швидкий старт
|
|
92
|
+
|
|
67
93
|
```sh
|
|
68
94
|
curl -fsSL https://intlayer.org/install.sh | sh
|
|
69
95
|
```
|
|
@@ -99,7 +125,16 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
99
125
|
|
|
100
126
|
## Змінні середовища
|
|
101
127
|
|
|
102
|
-
|
|
128
|
+
### Обов'язково
|
|
129
|
+
|
|
130
|
+
| Variable | Example | Description |
|
|
131
|
+
| ---------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
132
|
+
| `DB_ID` | `intlayer` | MongoDB Atlas користувач |
|
|
133
|
+
| `DB_MDP` | _(ваш пароль)_ | MongoDB Atlas пароль |
|
|
134
|
+
| `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | MongoDB Atlas cluster хост (використовується в URI `mongodb+srv://`) |
|
|
135
|
+
| `BETTER_AUTH_SECRET` | _(згенерований)_ | 32-байтовий secret для підписання сеансу |
|
|
136
|
+
| `S3_SECRET_ACCESS_KEY` | _(згенерований)_ | Secret для bundled MinIO |
|
|
137
|
+
| `RESEND_API_KEY` | _(ваш ключ)_ | Transactional email через Resend. Обов'язково для першого запуску, якщо ви не налаштуєте глобальний SMTP mailer (див. [Global mailer](#global-mailer)) |
|
|
103
138
|
|
|
104
139
|
### Обов'язкові (автоматично генеруються або запитуються)
|
|
105
140
|
|
|
@@ -141,6 +176,26 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
141
176
|
|
|
142
177
|
---
|
|
143
178
|
|
|
179
|
+
### Глобальний поштовик
|
|
180
|
+
|
|
181
|
+
За замовчуванням усі транзакційні електронні листи відправляються через Resend з використанням `RESEND_API_KEY`. Самостійно розгорнуті розгортання можуть натомість маршрутизувати **кожну** електронну пошту — включаючи не-організаційні листи, такі як скидання паролів і магічні посилання — через глобальний поштовик, налаштований за допомогою змінних середовища.
|
|
182
|
+
|
|
183
|
+
Встановіть `MAIL_PROVIDER`, щоб активувати це. Коли не встановлено, використовується поштовик за замовчуванням Resend.
|
|
184
|
+
|
|
185
|
+
| Змінна | Приклад | Опис |
|
|
186
|
+
| -------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------- |
|
|
187
|
+
| `MAIL_PROVIDER` | `smtp` | Глобальний транспорт: `smtp` або `resend`. Залиште не встановленим для використання за замовчуванням |
|
|
188
|
+
| `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | Заголовок відправника. Приймає просту адресу або формат `Name <email>` |
|
|
189
|
+
| `MAIL_SMTP_HOST` | `smtp.acme.com` | Хост SMTP (обов'язково, коли `MAIL_PROVIDER=smtp`) |
|
|
190
|
+
| `MAIL_SMTP_PORT` | `587` | Порт SMTP (за замовчуванням `587`) |
|
|
191
|
+
| `MAIL_SMTP_SECURE` | `false` | Неявний TLS. Встановіть `true` для порту `465` |
|
|
192
|
+
| `MAIL_SMTP_USER` | _(ваш користувач)_ | Ім'я користувача SMTP (необов'язково; пропустіть для незаповнених реле) |
|
|
193
|
+
| `MAIL_SMTP_PASSWORD` | _(ваш пароль)_ | Пароль SMTP |
|
|
194
|
+
|
|
195
|
+
> Пріоритет: власний поштовик організації (налаштований з панелі керування **Organization**) має пріоритет над глобальним поштовиком, який у свою чергу має пріоритет над ключем Resend за замовчуванням.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
144
199
|
## Підключення вашого проекту Intlayer
|
|
145
200
|
|
|
146
201
|
Після запуску стека направте свій проект на самостійно розгорнутий бекенд та дашборд замість `intlayer.org`.
|
|
@@ -259,47 +314,11 @@ docker run --rm \
|
|
|
259
314
|
|
|
260
315
|
---
|
|
261
316
|
|
|
262
|
-
##
|
|
263
|
-
|
|
264
|
-
Для виробничих розгортань розмістіть зворотний проксі перед контейнерами застосунку та бекенду замість прямого їх виставлення.
|
|
265
|
-
|
|
266
|
-
### Приклад Nginx
|
|
267
|
-
|
|
268
|
-
```nginx
|
|
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
|
-
}
|
|
317
|
+
## Обмеження
|
|
279
318
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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`) або використовувати ін'єкцію конфігурації під час виконання.
|
|
319
|
+
- **MongoDB має бути зовнішньою (Atlas).** Backend підключається лише через `mongodb+srv://` (побудований на основі `DB_ID` / `DB_MDP` / `DB_CLUSTER`), тому звичайний `mongodb://host:27017` — включаючи вбудований `mongod` контейнера — не може бути використаний. Надайте кластер MongoDB Atlas.
|
|
320
|
+
- **Немає користувацького домену.** Усі `VITE_*` URL-адреси, видимі браузером, вбудовуються в додаток під час збирання, а опублікований образ поставляється зі значеннями `localhost`. Доступ до панелі керування має здійснюватися через `http://localhost:3000`; обслуговування її на публічному домені потребувало б перебудови образу з цільовими URL-адресами вбудованими та не підтримується з коробки.
|
|
321
|
+
- **Email вимагає працюючого mailer.** Перша установка примушує перевірку електронної пошти, тому має бути налаштований або `RESEND_API_KEY`, або [глобальний SMTP mailer](#global-mailer) (`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`). Після того як перший адміністратор увійде, кожна організація також може налаштувати власний SMTP або Resend mailer з панелі керування.
|
|
303
322
|
|
|
304
323
|
---
|
|
305
324
|
|
|
@@ -315,15 +334,6 @@ docker compose logs mongo
|
|
|
315
334
|
docker compose logs redis
|
|
316
335
|
```
|
|
317
336
|
|
|
318
|
-
### Дашборд не може дістатися до API
|
|
319
|
-
|
|
320
|
-
Переконайтеся, що `VITE_BACKEND_URL` відповідає URL-адресі, за якою бекенд доступний з **браузера** (не мережі Docker). Якщо ви змінили порт бекенду або додали зворотний проксі, перезіберіть образ дашборду:
|
|
321
|
-
|
|
322
|
-
```sh
|
|
323
|
-
docker compose build app
|
|
324
|
-
docker compose up -d app
|
|
325
|
-
```
|
|
326
|
-
|
|
327
337
|
### Електронні листи не надсилаються
|
|
328
338
|
|
|
329
339
|
За замовчуванням усі вихідні електронні листи захоплюються Mailpit. Відкрийте `http://localhost:8025`, щоб побачити надіслані повідомлення. Щоб надсилати реальні електронні листи, встановіть `MAIL_PROVIDER=resend` та `RESEND_API_KEY=<ваш-ключ>` у `.env`, а потім перезапустіть бекенд:
|
package/docs/ur/configuration.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-13
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-08-06
|
|
4
4
|
title: ترتیب (Configuration)
|
|
5
5
|
description: سیکھیں کہ اپنی ایپلیکیشن کے لیے Intlayer کو کیسے ترتیب دینا ہے۔ اپنی ضروریات کے مطابق Intlayer کو اپنی مرضی کے مطابق بنانے کے لیے دستیاب مختلف ترتیبات اور اختیارات کو سمجھیں۔
|
|
6
6
|
keywords:
|
|
@@ -16,6 +16,9 @@ slugs:
|
|
|
16
16
|
- concept
|
|
17
17
|
- configuration
|
|
18
18
|
history:
|
|
19
|
+
- version: 9.1.3
|
|
20
|
+
date: 2026-08-06
|
|
21
|
+
changes: "`routing.enableProxy` کو تین حالتوں والا بنایا گیا: غیر مقرر (auto)، `true`، `false`"
|
|
19
22
|
- version: 9.0.0
|
|
20
23
|
date: 2026-07-11
|
|
21
24
|
changes: "`analytics` کنفیگریشن شامل کی گئی"
|
|
@@ -237,6 +240,19 @@ const config: IntlayerConfig = {
|
|
|
237
240
|
*/
|
|
238
241
|
mode: "prefix-no-default",
|
|
239
242
|
|
|
243
|
+
/**
|
|
244
|
+
* Intlayer لوکیل-روٹنگ پراکسی (مڈل ویئر) کو فعال کرتا ہے۔
|
|
245
|
+
* dev، preview اور SSR میں لوکیل کی شناخت، ری ڈائریکٹ اور ری رائٹ سنبھالتا ہے۔
|
|
246
|
+
* - غیر مقرر (auto): dev اور preview سرورز کوکیز اور ہیڈرز میں محفوظ لوکیل کو
|
|
247
|
+
* نظر انداز کرتے ہوئے روٹنگ کو URL پر مبنی رکھتے ہیں۔ پریفکس اب بھی حل ہوتے ہیں،
|
|
248
|
+
* لوکیل اب بھی محفوظ ہوتا ہے، اور Accept-Language کی شناخت اب بھی لاگو ہوتی ہے۔
|
|
249
|
+
* پروڈکشن میں یہ `true` کی طرح برتاؤ کرتا ہے۔
|
|
250
|
+
* - true: ہر ماحول میں مکمل برتاؤ۔
|
|
251
|
+
* - false: کوئی لوکیل روٹنگ نہیں۔
|
|
252
|
+
* ڈیفالٹ: undefined (auto)
|
|
253
|
+
*/
|
|
254
|
+
enableProxy: undefined,
|
|
255
|
+
|
|
240
256
|
/**
|
|
241
257
|
* صارف کے منتخب کردہ لوکل کو کہاں محفوظ کرنا ہے۔
|
|
242
258
|
* اختیارات: 'cookie', 'localStorage', 'sessionStorage', 'header'، یا ان کا مجموعہ۔
|
|
@@ -715,13 +731,14 @@ Intlayer اینالیٹکس سے متعلق ترتیبات کی وضاحت کر
|
|
|
715
731
|
|
|
716
732
|
ترتیبات جو راؤٹنگ کے رویے کو کنٹرول کرتی ہیں، بشمول URL کا ڈھانچہ، لوکل اسٹوریج، اور مڈل ویئر ہینڈلنگ۔
|
|
717
733
|
|
|
718
|
-
| فیلڈ
|
|
719
|
-
|
|
|
720
|
-
| `mode`
|
|
721
|
-
| `
|
|
722
|
-
| `
|
|
723
|
-
| `
|
|
724
|
-
| `
|
|
734
|
+
| فیلڈ | وضاحت | قسم | ڈیفالٹ | مثال | نوٹ |
|
|
735
|
+
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
736
|
+
| `mode` | لوکل ہینڈلنگ کے لیے URL راؤٹنگ موڈ۔ | `'prefix-no-default'` | <br/> `'prefix-all'` | <br/> `'no-prefix'` | <br/> `'search-params'` | `'prefix-no-default'` | `'prefix-no-default'`: `/dashboard` (en) یا `/fr/dashboard` (fr). `'prefix-all'`: `/en/dashboard`. `'no-prefix'`: لوکل دوسرے ذرائع سے ہینڈل کیا جاتا ہے۔ `'search-params'`: `/dashboard?locale=fr` | کوکی یا لوکل اسٹوریج مینجمنٹ پر اثر انداز نہیں ہوتا۔ |
|
|
737
|
+
| `enableProxy` | Intlayer لوکیل-روٹنگ پراکسی (مڈل ویئر) کو فعال کرتا ہے۔ | `boolean` | <br/> `undefined` | `undefined` (auto) | `true` | • غیر مقرر (auto): dev اور preview سرورز کوکیز/ہیڈرز میں محفوظ لوکیل کو ری ڈائریکٹ کے ماخذ کے طور پر نظر انداز کرتے ہیں؛ پریفکس، محفوظ کرنا اور `Accept-Language` کی شناخت اب بھی لاگو ہوتی ہے۔ پروڈکشن میں `true` کی طرح۔<br/>• `true`: ہر جگہ مکمل برتاؤ۔<br/>• `false`: کوئی لوکیل روٹنگ نہیں۔ Next.js میں `intlayerProxy` مڈل ویئر پاس-تھرو بن جاتا ہے۔ |
|
|
738
|
+
| `storage` | کلائنٹ میں لوکل محفوظ کرنے کی کنفیگریشن۔ | `false` | <br/> `'cookie'` | <br/> `'localStorage'` | <br/> `'sessionStorage'` | <br/> `'header'` | <br/> `CookiesAttributes` | <br/> `StorageAttributes` | <br/> `Array` | `['cookie', 'header']` | `'localStorage'` <br/> `[{ type: 'cookie', name: 'custom-locale', secure: true }]` | نیچے اسٹوریج کے اختیارات والا ٹیبل دیکھیں۔ |
|
|
739
|
+
| `basePath` | ایپلیکیشن URLs کے لیے بنیادی راستہ۔ | `string` | `''` | `'/my-app'` | اگر ایپ `https://example.com/my-app` پر ہے، تو basePath `'/my-app'` ہے اور URLs `https://example.com/my-app/en` بن جاتے ہیں۔ |
|
|
740
|
+
| `rewrite` | کسٹم URL رائٹنگ کے قواعد جو مخصوص راستوں کے لیے ڈیفالٹ راؤٹنگ موڈ کو اوور رائڈ کرتے ہیں۔ `[param]` متحرک پیرامیٹرز کی سپورٹ۔ | `Record<string, StrictModeLocaleMap<string>>` | `undefined` | نیچے دی گئی مثال دیکھیں | • ری رائٹ رولز `mode` پر فوقیت رکھتے ہیں۔<br/>• Next.js اور Vite کے ساتھ کام کرتا ہے۔<br/>• `getLocalizedUrl()` خودکار طور پر مماثل رولز لاگو کرتا ہے۔<br/>• [کسٹم URL ری رائٹس](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/custom_url_rewrites.md) دیکھیں۔ |
|
|
741
|
+
| `domains` | ڈومین پر مبنی راؤٹنگ کے لیے لوکلز کو ڈومین ہوسٹ نیمز کے ساتھ میپ کرتا ہے۔ جب سیٹ کیا جائے تو اس لوکل کے URLs اس ڈومین کو بطور بنیاد (مطلق URL) استعمال کرتے ہیں اور پاتھ میں کوئی لوکل سابقہ شامل نہیں کیا جاتا۔ | `Partial<Record<Locale, string>>` | `undefined` | `{ zh: 'intlayer.zh', fr: 'intlayer.org' }` | • اگر ہوسٹ نیم میں شامل نہ ہو تو ڈیفالٹ پروٹوکول `https://` ہے۔<br/>• ڈومین خود لوکل کی شناخت کرتا ہے، اس لیے کوئی `/zh/` سابقہ شامل نہیں کیا جاتا۔<br/>• `getLocalizedUrl('/', 'zh')` واپسی دیتا ہے `https://intlayer.zh/`۔ |
|
|
725
742
|
|
|
726
743
|
**`rewrite` کی مثال**:
|
|
727
744
|
|
|
@@ -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 i18n - اپنی ایپ کو ترجمہ کرنے کا مکمل گائیڈ"
|
|
5
|
+
description: "اب i18next کی ضرورت نہیں۔ 2026 میں Angular 22 ایپ کو کثیر لسانی (i18n) بنانے کا گائیڈ۔ AI ایجنٹس سے ترجمہ کریں اور بنڈل سائز، SEO اور پرفارمنس بہتر بنائیں۔"
|
|
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
|
-
# Intlayer کا استعمال کرتے ہوئے اپنی Angular
|
|
34
|
+
# Intlayer کا استعمال کرتے ہوئے اپنی Angular 22 (Vite) ویب سائٹ کا ترجمہ کریں | بین الاقوامی بنانا (i18n)
|
|
35
35
|
|
|
36
36
|
## فہرست
|
|
37
37
|
|
|
@@ -56,7 +56,7 @@ Intlayer کے ساتھ، آپ کر سکتے ہیں:
|
|
|
56
56
|
<Tab label="کوڈ" value="code">
|
|
57
57
|
|
|
58
58
|
<iframe
|
|
59
|
-
src="https://ide.intlayer.org/aymericzip/intlayer-angular-
|
|
59
|
+
src="https://ide.intlayer.org/aymericzip/intlayer-angular-22-template?file=intlayer.config.ts"
|
|
60
60
|
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
61
61
|
title="Demo CodeSandbox - Intlayer کا استعمال کرتے ہوئے اپنی ایپلی کیشن کو کیسے بین الاقوامی بنائیں"
|
|
62
62
|
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
@@ -67,7 +67,7 @@ Intlayer کے ساتھ، آپ کر سکتے ہیں:
|
|
|
67
67
|
<Tab label="ڈیمو" value="demo">
|
|
68
68
|
|
|
69
69
|
<iframe
|
|
70
|
-
src="https://intlayer-angular-
|
|
70
|
+
src="https://intlayer-angular-22-template.vercel.app/"
|
|
71
71
|
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
72
72
|
title="Demo - intlayer-angular-template"
|
|
73
73
|
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
@@ -77,7 +77,7 @@ Intlayer کے ساتھ، آپ کر سکتے ہیں:
|
|
|
77
77
|
</Tab>
|
|
78
78
|
</Tabs>
|
|
79
79
|
|
|
80
|
-
GitHub پر [ایپلیکیشن ٹیمپلیٹ](https://github.com/aymericzip/intlayer-angular-
|
|
80
|
+
GitHub پر [ایپلیکیشن ٹیمپلیٹ](https://github.com/aymericzip/intlayer-angular-22-template) دیکھیں۔
|
|
81
81
|
|
|
82
82
|
<Steps>
|
|
83
83
|
|
|
@@ -165,7 +165,7 @@ export default config;
|
|
|
165
165
|
|
|
166
166
|
<Step number={3} title="اپنی Angular کنفیگریشن میں Intlayer کو شامل کریں">
|
|
167
167
|
|
|
168
|
-
Intlayer کو Angular CLI کے ساتھ مربوط کرنے کے لیے، آپ کو ایک کسٹم بلڈر استعمال کرنے کی ضرورت ہے۔ یہ گائیڈ فرض کرتی ہے کہ آپ Vite/esbuild (Angular
|
|
168
|
+
Intlayer کو Angular CLI کے ساتھ مربوط کرنے کے لیے، آپ کو ایک کسٹم بلڈر استعمال کرنے کی ضرورت ہے۔ یہ گائیڈ فرض کرتی ہے کہ آپ Vite/esbuild (Angular 22 پروجیکٹس کے لیے ڈیفالٹ) استعمال کر رہے ہیں۔
|
|
169
169
|
|
|
170
170
|
پہلے، کسٹم esbuild بلڈر استعمال کرنے کے لیے اپنے `angular.json` میں ترمیم کریں۔ `build` اور `serve` کی کنفیگریشن کو اپ ڈیٹ کریں:
|
|
171
171
|
|