@intlayer/docs 9.1.3 → 9.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blog/ar/index.md +1 -1
- package/blog/ar/rag_powered_documentation_assistant.md +7 -0
- package/blog/de/index.md +1 -1
- package/blog/de/rag_powered_documentation_assistant.md +6 -0
- package/blog/en/index.md +1 -1
- package/blog/en-GB/index.md +1 -1
- package/blog/en-GB/rag_powered_documentation_assistant.md +6 -0
- package/blog/es/index.md +1 -1
- package/blog/es/rag_powered_documentation_assistant.md +7 -0
- package/blog/fr/i18n_meaning.md +7 -1
- package/blog/fr/index.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/angular.md +5 -1
- package/blog/fr/rag_powered_documentation_assistant.md +6 -0
- package/blog/hi/index.md +1 -1
- package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +119 -42
- package/blog/hi/rag_powered_documentation_assistant.md +7 -0
- package/blog/id/index.md +1 -1
- package/blog/id/rag_powered_documentation_assistant.md +6 -0
- package/blog/it/index.md +1 -1
- package/blog/it/rag_powered_documentation_assistant.md +6 -0
- package/blog/ja/index.md +1 -1
- package/blog/ja/rag_powered_documentation_assistant.md +7 -0
- package/blog/ko/index.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/react.md +7 -7
- package/blog/ko/rag_powered_documentation_assistant.md +6 -0
- package/blog/pl/index.md +1 -1
- package/blog/pl/rag_powered_documentation_assistant.md +6 -0
- package/blog/pt/index.md +1 -1
- package/blog/pt/rag_powered_documentation_assistant.md +6 -0
- package/blog/ru/index.md +1 -1
- package/blog/ru/rag_powered_documentation_assistant.md +7 -0
- package/blog/tr/intlayer_with_react-intl.md +3 -1
- package/blog/tr/next-i18next_vs_next-intl_vs_intlayer.md +175 -42
- package/blog/tr/rag_powered_documentation_assistant.md +6 -0
- package/blog/uk/index.md +1 -1
- package/blog/uk/rag_powered_documentation_assistant.md +6 -0
- package/blog/vi/index.md +1 -1
- package/blog/vi/rag_powered_documentation_assistant.md +6 -0
- package/blog/zh/index.md +1 -1
- package/blog/zh/intlayer_with_i18next.md +87 -28
- package/blog/zh/intlayer_with_next-i18next.md +86 -29
- package/blog/zh/intlayer_with_next-intl.md +88 -28
- package/blog/zh/intlayer_with_react-i18next.md +87 -28
- package/blog/zh/intlayer_with_react-intl.md +88 -27
- package/blog/zh/intlayer_with_vue-i18n.md +117 -8
- package/blog/zh/rag_powered_documentation_assistant.md +6 -0
- package/dist/cjs/common.cjs +24 -1
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +58 -31
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +265 -218
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +48 -21
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +33 -6
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/common.mjs +24 -1
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +58 -31
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +265 -218
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +48 -21
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +33 -6
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/docs/ar/analytics.md +222 -0
- package/docs/ar/autoFill.md +28 -9
- package/docs/ar/bundle_optimization.md +58 -25
- package/docs/ar/configuration.md +25 -8
- package/docs/ar/dictionary/file.md +3 -1
- package/docs/ar/dictionary/nesting.md +47 -30
- package/docs/ar/formatters.md +148 -193
- package/docs/ar/intlayer_CMS.md +152 -0
- package/docs/ar/intlayer_with_angular_21.md +9 -9
- package/docs/ar/intlayer_with_nextjs_14.md +1 -28
- package/docs/ar/intlayer_with_nextjs_15.md +1 -33
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +40 -83
- package/docs/ar/intlayer_with_solid_start.md +1078 -0
- package/docs/ar/intlayer_with_vite+vue.md +1 -3
- package/docs/ar/live-sync.md +4 -0
- package/docs/ar/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ar/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ar/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/ar/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/ar/packages/vite-intlayer/exports.md +15 -0
- package/docs/ar/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ar/packages/vite-intlayer/intlayerPrune.md +70 -3
- package/docs/ar/releases/v9.md +0 -37
- package/docs/ar/self_hosting.md +46 -49
- package/docs/bn/bundle_optimization.md +58 -25
- package/docs/bn/configuration.md +25 -8
- package/docs/bn/intlayer_with_angular_21.md +9 -9
- package/docs/cs/bundle_optimization.md +58 -25
- package/docs/cs/configuration.md +25 -8
- package/docs/cs/intlayer_with_angular_21.md +9 -9
- package/docs/de/analytics.md +222 -0
- package/docs/de/autoFill.md +28 -9
- package/docs/de/bundle_optimization.md +58 -25
- package/docs/de/configuration.md +25 -8
- package/docs/de/dictionary/file.md +3 -1
- package/docs/de/dictionary/nesting.md +47 -31
- package/docs/de/formatters.md +208 -334
- package/docs/de/intlayer_CMS.md +66 -15
- package/docs/de/intlayer_with_angular_21.md +9 -9
- package/docs/de/intlayer_with_nestjs.md +11 -7
- package/docs/de/intlayer_with_nextjs_14.md +1 -28
- package/docs/de/intlayer_with_nextjs_15.md +1 -33
- package/docs/de/intlayer_with_solid_start.md +1078 -0
- package/docs/de/intlayer_with_vite+vue.md +1 -3
- package/docs/de/live-sync.md +4 -0
- package/docs/de/packages/intlayer/getLocalizedUrl.md +33 -25
- package/docs/de/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/de/packages/react-intlayer/useDictionary.md +2 -5
- package/docs/de/packages/vite-intlayer/exports.md +15 -0
- package/docs/de/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/de/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/de/releases/v9.md +0 -15
- package/docs/de/self_hosting.md +46 -50
- package/docs/en/bundle_optimization.md +51 -23
- package/docs/en/cli/doc-review.md +13 -2
- package/docs/en/configuration.md +24 -15
- package/docs/en/intlayer_with_angular_21.md +9 -9
- package/docs/en/intlayer_with_solid_start.md +1091 -0
- package/docs/en/intlayer_with_vite+solid.md +12 -0
- package/docs/en/live-sync.md +4 -0
- package/docs/en-GB/analytics.md +222 -0
- package/docs/en-GB/autoFill.md +26 -7
- package/docs/en-GB/bundle_optimization.md +58 -25
- package/docs/en-GB/configuration.md +25 -8
- package/docs/en-GB/dictionary/file.md +2 -0
- package/docs/en-GB/dictionary/nesting.md +64 -205
- package/docs/en-GB/formatters.md +146 -181
- package/docs/en-GB/intlayer_CMS.md +152 -0
- package/docs/en-GB/intlayer_with_angular_21.md +9 -9
- package/docs/en-GB/intlayer_with_nestjs.md +6 -2
- package/docs/en-GB/intlayer_with_nextjs_14.md +0 -27
- package/docs/en-GB/intlayer_with_nextjs_15.md +1 -33
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +40 -82
- package/docs/en-GB/intlayer_with_solid_start.md +1078 -0
- package/docs/en-GB/intlayer_with_vite+vue.md +1 -3
- package/docs/en-GB/live-sync.md +4 -0
- package/docs/en-GB/packages/intlayer/getLocalizedUrl.md +30 -22
- package/docs/en-GB/packages/intlayer/getMultilingualUrls.md +16 -48
- package/docs/en-GB/packages/vite-intlayer/exports.md +15 -0
- package/docs/en-GB/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/en-GB/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/en-GB/self_hosting.md +60 -49
- package/docs/es/analytics.md +222 -0
- package/docs/es/autoFill.md +28 -9
- package/docs/es/bundle_optimization.md +58 -25
- package/docs/es/configuration.md +24 -7
- package/docs/es/dictionary/file.md +3 -1
- package/docs/es/dictionary/nesting.md +47 -30
- package/docs/es/formatters.md +114 -168
- package/docs/es/intlayer_CMS.md +35 -10
- package/docs/es/intlayer_with_angular_21.md +9 -9
- package/docs/es/intlayer_with_nextjs_14.md +1 -28
- package/docs/es/intlayer_with_nextjs_15.md +1 -33
- package/docs/es/intlayer_with_solid_start.md +1078 -0
- package/docs/es/live-sync.md +4 -0
- package/docs/es/packages/intlayer/getLocalizedUrl.md +31 -23
- package/docs/es/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/es/packages/vite-intlayer/exports.md +15 -0
- package/docs/es/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/es/packages/vite-intlayer/intlayerPrune.md +69 -2
- package/docs/es/releases/v9.md +0 -15
- package/docs/es/self_hosting.md +46 -49
- package/docs/fr/analytics.md +222 -0
- package/docs/fr/autoFill.md +27 -8
- package/docs/fr/bundle_optimization.md +58 -25
- package/docs/fr/configuration.md +25 -8
- package/docs/fr/dictionary/file.md +2 -0
- package/docs/fr/dictionary/nesting.md +37 -184
- package/docs/fr/formatters.md +95 -236
- package/docs/fr/intlayer_CMS.md +66 -15
- package/docs/fr/intlayer_with_angular_21.md +9 -9
- package/docs/fr/intlayer_with_nextjs_14.md +1 -28
- package/docs/fr/intlayer_with_nextjs_15.md +1 -33
- package/docs/fr/intlayer_with_solid_start.md +1078 -0
- package/docs/fr/live-sync.md +4 -0
- package/docs/fr/packages/intlayer/getLocalizedUrl.md +37 -27
- package/docs/fr/packages/intlayer/getMultilingualUrls.md +18 -20
- package/docs/fr/packages/vite-intlayer/exports.md +15 -0
- package/docs/fr/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/fr/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/fr/releases/v9.md +0 -15
- package/docs/fr/self_hosting.md +46 -49
- package/docs/hi/analytics.md +222 -0
- package/docs/hi/autoFill.md +28 -9
- package/docs/hi/bundle_optimization.md +58 -25
- package/docs/hi/configuration.md +25 -8
- package/docs/hi/dictionary/file.md +3 -1
- package/docs/hi/dictionary/nesting.md +47 -30
- package/docs/hi/formatters.md +233 -334
- package/docs/hi/how_works_intlayer.md +3 -1
- package/docs/hi/intlayer_CMS.md +152 -0
- package/docs/hi/intlayer_with_angular_21.md +9 -9
- package/docs/hi/intlayer_with_nestjs.md +11 -7
- package/docs/hi/intlayer_with_nextjs_14.md +1 -28
- package/docs/hi/intlayer_with_nextjs_15.md +1 -33
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +40 -83
- package/docs/hi/intlayer_with_solid_start.md +1077 -0
- package/docs/hi/intlayer_with_vite+preact.md +56 -49
- package/docs/hi/intlayer_with_vite+react.md +48 -41
- package/docs/hi/intlayer_with_vite+solid.md +32 -41
- package/docs/hi/intlayer_with_vite+vue.md +49 -44
- package/docs/hi/live-sync.md +4 -0
- package/docs/hi/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/hi/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/hi/packages/next-intlayer/t.md +33 -1
- package/docs/hi/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/hi/packages/vite-intlayer/exports.md +15 -0
- package/docs/hi/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/hi/packages/vite-intlayer/intlayerPrune.md +78 -5
- package/docs/hi/plugins/sync-json.md +9 -9
- package/docs/hi/releases/v9.md +0 -15
- package/docs/hi/self_hosting.md +38 -51
- package/docs/id/analytics.md +223 -0
- package/docs/id/bundle_optimization.md +58 -25
- package/docs/id/configuration.md +25 -8
- package/docs/id/dictionary/nesting.md +37 -184
- package/docs/id/formatters.md +208 -305
- package/docs/id/intlayer_CMS.md +164 -0
- package/docs/id/intlayer_with_angular_21.md +9 -9
- package/docs/id/intlayer_with_nextjs_14.md +1 -26
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +70 -63
- package/docs/id/intlayer_with_solid_start.md +1078 -0
- package/docs/id/live-sync.md +4 -0
- package/docs/id/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/id/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/id/packages/vite-intlayer/exports.md +15 -0
- package/docs/id/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/id/packages/vite-intlayer/intlayerPrune.md +78 -5
- package/docs/id/releases/v9.md +12 -0
- package/docs/id/self_hosting.md +61 -50
- package/docs/it/analytics.md +222 -0
- package/docs/it/autoFill.md +27 -8
- package/docs/it/bundle_optimization.md +58 -25
- package/docs/it/configuration.md +25 -8
- package/docs/it/dictionary/file.md +3 -1
- package/docs/it/dictionary/nesting.md +47 -30
- package/docs/it/formatters.md +114 -168
- package/docs/it/intlayer_CMS.md +66 -15
- package/docs/it/intlayer_with_angular_21.md +9 -9
- package/docs/it/intlayer_with_nestjs.md +11 -7
- package/docs/it/intlayer_with_nextjs_14.md +1 -28
- package/docs/it/intlayer_with_nextjs_15.md +1 -33
- package/docs/it/intlayer_with_solid_start.md +1078 -0
- package/docs/it/intlayer_with_vite+vue.md +1 -3
- package/docs/it/live-sync.md +4 -0
- package/docs/it/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/it/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/it/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/it/packages/vite-intlayer/exports.md +15 -0
- package/docs/it/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/it/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/it/releases/v9.md +0 -15
- package/docs/it/self_hosting.md +60 -49
- package/docs/ja/analytics.md +222 -0
- package/docs/ja/autoFill.md +28 -9
- package/docs/ja/bundle_optimization.md +58 -25
- package/docs/ja/configuration.md +25 -8
- package/docs/ja/dictionary/content_file.md +15 -7
- package/docs/ja/dictionary/file.md +3 -1
- package/docs/ja/dictionary/nesting.md +47 -30
- package/docs/ja/formatters.md +133 -187
- package/docs/ja/intlayer_visual_editor.md +3 -1
- package/docs/ja/intlayer_with_angular_21.md +6 -6
- package/docs/ja/intlayer_with_nestjs.md +2 -12
- package/docs/ja/intlayer_with_nextjs_14.md +1 -28
- package/docs/ja/intlayer_with_nextjs_15.md +1 -33
- package/docs/ja/intlayer_with_react_router_v7.md +456 -20
- package/docs/ja/intlayer_with_solid_start.md +1078 -0
- package/docs/ja/intlayer_with_vite+preact.md +73 -41
- package/docs/ja/intlayer_with_vite+vue.md +1 -3
- package/docs/ja/live-sync.md +4 -0
- package/docs/ja/mcp_server.md +3 -9
- package/docs/ja/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ja/packages/intlayer/getMultilingualUrls.md +3 -17
- package/docs/ja/packages/vite-intlayer/exports.md +15 -0
- package/docs/ja/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ja/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/ja/releases/v9.md +12 -0
- package/docs/ja/self_hosting.md +46 -50
- package/docs/ko/analytics.md +222 -0
- package/docs/ko/autoFill.md +28 -9
- package/docs/ko/bundle_optimization.md +58 -25
- package/docs/ko/configuration.md +25 -8
- package/docs/ko/dictionary/file.md +3 -1
- package/docs/ko/dictionary/nesting.md +47 -30
- package/docs/ko/formatters.md +133 -187
- package/docs/ko/intlayer_with_angular_21.md +9 -9
- package/docs/ko/intlayer_with_lynx+react.md +133 -39
- package/docs/ko/intlayer_with_nextjs_14.md +1 -28
- package/docs/ko/intlayer_with_nextjs_15.md +1 -33
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +40 -188
- package/docs/ko/intlayer_with_solid_start.md +1078 -0
- package/docs/ko/intlayer_with_vite+preact.md +57 -23
- package/docs/ko/intlayer_with_vite+vue.md +1 -3
- package/docs/ko/live-sync.md +4 -0
- package/docs/ko/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/ko/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ko/packages/vite-intlayer/exports.md +15 -0
- package/docs/ko/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ko/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/ko/releases/v9.md +12 -0
- package/docs/ko/self_hosting.md +60 -49
- package/docs/nl/bundle_optimization.md +58 -25
- package/docs/nl/configuration.md +25 -8
- package/docs/nl/intlayer_with_angular_21.md +9 -9
- package/docs/pl/analytics.md +220 -0
- package/docs/pl/bundle_optimization.md +58 -25
- package/docs/pl/configuration.md +25 -8
- package/docs/pl/dictionary/nesting.md +47 -30
- package/docs/pl/formatters.md +208 -305
- package/docs/pl/intlayer_CMS.md +152 -0
- package/docs/pl/intlayer_with_angular_21.md +9 -9
- package/docs/pl/intlayer_with_nextjs_14.md +1 -26
- package/docs/pl/intlayer_with_solid_start.md +1078 -0
- package/docs/pl/live-sync.md +4 -0
- package/docs/pl/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/pl/packages/react-intlayer/useDictionary.md +2 -19
- package/docs/pl/packages/vite-intlayer/exports.md +15 -0
- package/docs/pl/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/pl/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/pl/releases/v9.md +0 -15
- package/docs/pl/self_hosting.md +60 -49
- package/docs/pt/analytics.md +222 -0
- package/docs/pt/bundle_optimization.md +58 -24
- package/docs/pt/configuration.md +25 -8
- package/docs/pt/dictionary/file.md +3 -1
- package/docs/pt/dictionary/nesting.md +47 -30
- package/docs/pt/formatters.md +112 -168
- package/docs/pt/intlayer_CMS.md +66 -15
- package/docs/pt/intlayer_with_angular_21.md +9 -9
- package/docs/pt/intlayer_with_astro_lit.md +26 -1
- package/docs/pt/intlayer_with_nextjs_14.md +1 -28
- package/docs/pt/intlayer_with_nextjs_15.md +1 -33
- package/docs/pt/intlayer_with_solid_start.md +1078 -0
- package/docs/pt/intlayer_with_vite+vue.md +1 -3
- package/docs/pt/live-sync.md +4 -0
- package/docs/pt/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/pt/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/pt/packages/vite-intlayer/exports.md +15 -0
- package/docs/pt/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/pt/packages/vite-intlayer/intlayerPrune.md +78 -6
- package/docs/pt/releases/v9.md +0 -15
- package/docs/pt/self_hosting.md +60 -49
- package/docs/ru/analytics.md +222 -0
- package/docs/ru/autoFill.md +27 -8
- package/docs/ru/bundle_optimization.md +58 -25
- package/docs/ru/configuration.md +25 -8
- package/docs/ru/dictionary/file.md +3 -1
- package/docs/ru/dictionary/nesting.md +64 -205
- package/docs/ru/formatters.md +108 -128
- package/docs/ru/intlayer_with_angular_21.md +9 -9
- package/docs/ru/intlayer_with_nextjs_14.md +1 -28
- package/docs/ru/intlayer_with_nextjs_15.md +1 -33
- package/docs/ru/intlayer_with_solid_start.md +1078 -0
- package/docs/ru/intlayer_with_vite+vue.md +1 -3
- package/docs/ru/live-sync.md +4 -0
- package/docs/ru/packages/intlayer/getLocalizedUrl.md +34 -26
- package/docs/ru/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/ru/packages/react-intlayer/useDictionary.md +4 -21
- package/docs/ru/packages/vite-intlayer/exports.md +15 -0
- package/docs/ru/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/ru/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/ru/releases/v9.md +0 -15
- package/docs/ru/self_hosting.md +60 -49
- package/docs/tr/analytics.md +222 -0
- package/docs/tr/autoFill.md +28 -9
- package/docs/tr/bundle_optimization.md +58 -25
- package/docs/tr/configuration.md +25 -8
- package/docs/tr/dictionary/file.md +2 -0
- package/docs/tr/dictionary/nesting.md +47 -30
- package/docs/tr/formatters.md +144 -190
- package/docs/tr/intlayer_CMS.md +152 -0
- package/docs/tr/intlayer_with_angular_21.md +9 -9
- package/docs/tr/intlayer_with_nestjs.md +2 -12
- package/docs/tr/intlayer_with_nextjs_15.md +1 -33
- package/docs/tr/intlayer_with_solid_start.md +1078 -0
- package/docs/tr/intlayer_with_vite+vue.md +1 -3
- package/docs/tr/live-sync.md +4 -0
- package/docs/tr/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/tr/packages/vite-intlayer/exports.md +15 -0
- package/docs/tr/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/tr/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/tr/self_hosting.md +47 -50
- package/docs/uk/analytics.md +222 -0
- package/docs/uk/bundle_optimization.md +58 -25
- package/docs/uk/configuration.md +25 -8
- package/docs/uk/dictionary/nesting.md +47 -30
- package/docs/uk/formatters.md +128 -185
- package/docs/uk/intlayer_CMS.md +152 -0
- package/docs/uk/intlayer_with_angular_21.md +9 -9
- package/docs/uk/intlayer_with_nextjs_14.md +1 -26
- package/docs/uk/intlayer_with_solid_start.md +1078 -0
- package/docs/uk/live-sync.md +4 -0
- package/docs/uk/packages/react-intlayer/useDictionary.md +2 -19
- package/docs/uk/packages/vite-intlayer/exports.md +15 -0
- package/docs/uk/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/uk/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/uk/releases/v9.md +0 -15
- package/docs/uk/self_hosting.md +60 -50
- package/docs/ur/bundle_optimization.md +58 -25
- package/docs/ur/configuration.md +25 -8
- package/docs/ur/intlayer_with_angular_21.md +9 -9
- package/docs/vi/analytics.md +222 -0
- package/docs/vi/bundle_optimization.md +58 -25
- package/docs/vi/configuration.md +24 -8
- package/docs/vi/dictionary/nesting.md +37 -184
- package/docs/vi/formatters.md +208 -309
- package/docs/vi/intlayer_CMS.md +164 -0
- package/docs/vi/intlayer_with_angular_21.md +9 -9
- package/docs/vi/intlayer_with_nextjs_14.md +0 -25
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +70 -63
- package/docs/vi/intlayer_with_solid_start.md +1078 -0
- package/docs/vi/live-sync.md +4 -0
- package/docs/vi/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/vi/packages/react-intlayer/useIntlayer.md +2 -2
- package/docs/vi/packages/vite-intlayer/exports.md +15 -0
- package/docs/vi/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/vi/packages/vite-intlayer/intlayerPrune.md +77 -4
- package/docs/vi/plugins/sync-json.md +6 -6
- package/docs/vi/releases/v9.md +12 -0
- package/docs/vi/self_hosting.md +61 -50
- package/docs/zh/CI_CD.md +4 -0
- package/docs/zh/analytics.md +222 -0
- package/docs/zh/autoFill.md +28 -9
- package/docs/zh/bundle_optimization.md +58 -25
- package/docs/zh/configuration.md +24 -8
- package/docs/zh/dictionary/file.md +2 -0
- package/docs/zh/dictionary/nesting.md +47 -30
- package/docs/zh/formatters.md +140 -188
- package/docs/zh/intlayer_CMS.md +164 -0
- package/docs/zh/intlayer_with_analog.md +193 -3
- package/docs/zh/intlayer_with_angular_19.md +272 -3
- package/docs/zh/intlayer_with_angular_21.md +7 -7
- package/docs/zh/intlayer_with_create_react_app.md +348 -26
- package/docs/zh/intlayer_with_lynx+react.md +263 -4
- package/docs/zh/intlayer_with_nextjs_14.md +1 -28
- package/docs/zh/intlayer_with_nextjs_15.md +1 -33
- package/docs/zh/intlayer_with_nextjs_no_locale_path.md +558 -1
- package/docs/zh/intlayer_with_nuxt.md +182 -7
- package/docs/zh/intlayer_with_react_router_v7.md +183 -25
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +306 -42
- package/docs/zh/intlayer_with_solid_start.md +1077 -0
- package/docs/zh/intlayer_with_storybook.md +260 -3
- package/docs/zh/intlayer_with_svelte_kit.md +428 -48
- package/docs/zh/intlayer_with_tanstack+solid.md +713 -13
- package/docs/zh/intlayer_with_tanstack.md +731 -20
- package/docs/zh/intlayer_with_vanilla.md +314 -4
- package/docs/zh/intlayer_with_vite+lit.md +465 -4
- package/docs/zh/intlayer_with_vite+preact.md +422 -116
- package/docs/zh/intlayer_with_vite+react.md +324 -45
- package/docs/zh/intlayer_with_vite+react_compiler.md +228 -13
- package/docs/zh/intlayer_with_vite+solid.md +462 -32
- package/docs/zh/intlayer_with_vite+vanilla.md +497 -4
- package/docs/zh/live-sync.md +4 -0
- package/docs/zh/mcp_server.md +3 -9
- package/docs/zh/packages/intlayer/getLocalizedUrl.md +26 -24
- package/docs/zh/packages/intlayer/getMultilingualUrls.md +4 -18
- package/docs/zh/packages/vite-intlayer/exports.md +29 -0
- package/docs/zh/packages/vite-intlayer/intlayer.md +121 -6
- package/docs/zh/packages/vite-intlayer/intlayerPrune.md +79 -6
- package/docs/zh/releases/v9.md +12 -0
- package/docs/zh/self_hosting.md +60 -50
- package/docs/zh-TW/bundle_optimization.md +58 -25
- package/docs/zh-TW/intlayer_with_angular_21.md +7 -7
- package/package.json +7 -7
- package/src/common.ts +39 -2
- package/src/generated/blog.entry.ts +66 -34
- package/src/generated/docs.entry.ts +273 -221
- package/src/generated/frequentQuestions.entry.ts +56 -24
- package/src/generated/legal.entry.ts +41 -9
|
@@ -30,9 +30,7 @@ history:
|
|
|
30
30
|
author: aymericzip
|
|
31
31
|
---
|
|
32
32
|
|
|
33
|
-
# Переведите ваш Vite
|
|
34
|
-
|
|
35
|
-
Смотрите [Шаблон приложения](https://github.com/aymericzip/intlayer-vite-vue-template) на GitHub.
|
|
33
|
+
# Переведите ваш сайт Vite и Vue с помощью Intlayer | Интернационализация (i18n)
|
|
36
34
|
|
|
37
35
|
## Оглавление
|
|
38
36
|
|
package/docs/ru/live-sync.md
CHANGED
|
@@ -59,36 +59,44 @@ getLocalizedUrl(
|
|
|
59
59
|
|
|
60
60
|
## Параметры
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
Функция `getLocalizedUrl` генерирует локализованный URL, добавляя в начало заданного URL указанный локаль. Она обрабатывает как абсолютные, так и относительные URL, обеспечивая применение правильного префикса локали в соответствии с конфигурацией.
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Параметры
|
|
62
|
+
### Обязательные параметры
|
|
69
63
|
|
|
70
64
|
- `url: string`
|
|
71
|
-
-
|
|
72
|
-
-
|
|
65
|
+
- **Description**: Исходная строка URL, которая должна быть дополнена локалью.
|
|
66
|
+
- **Type**: `string`
|
|
67
|
+
- **Required**: Yes
|
|
73
68
|
|
|
74
69
|
- `currentLocale: Locales`
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
-
|
|
70
|
+
- **Description**: Текущая локаль, для которой выполняется локализация URL.
|
|
71
|
+
- **Type**: `Locales`
|
|
72
|
+
- **Required**: Yes
|
|
73
|
+
|
|
74
|
+
### Дополнительные параметры
|
|
75
|
+
|
|
76
|
+
- `options?: object`
|
|
77
|
+
- **Description**: Объект конфигурации для поведения локализации URL.
|
|
78
|
+
- **Type**: `object`
|
|
79
|
+
- **Required**: No (Optional)
|
|
80
|
+
|
|
81
|
+
- `options.locales?: Locales[]`
|
|
82
|
+
- **Description**: Массив поддерживаемых локалей. Если не предоставлен, использует настроенные локали из конфигурации вашего проекта.
|
|
83
|
+
- **Type**: `Locales[]`
|
|
84
|
+
- **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md#middleware)
|
|
85
|
+
|
|
86
|
+
- `options.defaultLocale?: Locales`
|
|
87
|
+
- **Description**: Локаль по умолчанию для приложения. Если не предоставлена, использует настроенную локаль по умолчанию из конфигурации вашего проекта.
|
|
88
|
+
- **Type**: `Locales`
|
|
89
|
+
- **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md#middleware)
|
|
90
|
+
|
|
91
|
+
- `options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
|
|
92
|
+
- **Description**: Режим маршрутизации URL для обработки локалей. Если не предоставлен, использует настроенный режим из конфигурации вашего проекта.
|
|
93
|
+
- **Type**: `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
|
|
94
|
+
- **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md#middleware)
|
|
95
|
+
- **Modes**:
|
|
96
|
+
- `prefix-no-default`: Без префикса для локали по умолчанию, с префиксом для всех остальных
|
|
97
|
+
- `prefix-all`: Префикс для всех локалей, включая локаль по умолчанию
|
|
98
|
+
- `no-prefix`: Без префикса локали в URL
|
|
99
|
+
- `search-params`: Использование параметров запроса для локали (например, `?locale=fr`)
|
|
92
100
|
|
|
93
101
|
### Возвращает
|
|
94
102
|
|
|
@@ -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
|
+
# Документация хука useDictionary
|
|
28
|
+
|
|
29
|
+
Хук `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` для определения ваших словарей, чтобы обеспечить типобезопасность.
|
|
@@ -48,3 +48,18 @@ import "vite-intlayer";
|
|
|
48
48
|
| `intlayerProxy` | Плагин middleware для разработки, отвечающий за определение локали и маршрутизацию. | - |
|
|
49
49
|
| `intlayerMiddleware` | (**Устаревший**) Псевдоним для `intlayerProxy`. | - |
|
|
50
50
|
| `intlayerPrune` | Плагин для tree-shaking и удаления неиспользуемых словарей во время сборки (build time). | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/vite-intlayer/intlayerPrune.md) |
|
|
51
|
+
|
|
52
|
+
### Утилиты
|
|
53
|
+
|
|
54
|
+
| Export | Description | Related Doc |
|
|
55
|
+
| ---------------------------- | ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| `createIntlayerProxyHandler` | Возвращает фреймворк-независимый Node.js `(req, res, next)` middleware с логикой маршрутизации локалей. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/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` | Переэкспорт из `@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
|
+
#### С пользовательским путем к файлу конфигурации
|
|
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. Aliases модулей
|
|
111
|
+
|
|
112
|
+
Плагин добавляет aliases разрешения Vite, так чтобы `import { myDict } from 'intlayer/dictionaries/my-dict'` разрешался в скомпилированный JSON файл на диске. SSR сборки используют `ssr.noExternal` для обеспечения того, чтобы все пакеты `@intlayer/*` были объединены с применёнными aliases.
|
|
113
|
+
|
|
114
|
+
### 3. Dev-server watcher
|
|
115
|
+
|
|
116
|
+
В режиме разработки запускается `chokidar` watcher. Когда `.content.ts` файл изменяется, словари перекомпилируются и Vite's HMR распространяет обновление на браузер.
|
|
117
|
+
|
|
118
|
+
### 4. Встроенный прокси маршрутизации локалей (v9+)
|
|
119
|
+
|
|
120
|
+
С Intlayer v9 промежуточное ПО `intlayerProxy` регистрируется автоматически внутри `intlayer()`. Оно обрабатывает:
|
|
121
|
+
|
|
122
|
+
- Обнаружение локали из префикса URL, cookies и заголовка `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/ru/packages/vite-intlayer/intlayerProxy.md).
|
|
144
|
+
|
|
145
|
+
### 5. Встроенный компилятор (v9+)
|
|
146
|
+
|
|
147
|
+
Когда `compiler.enabled` установлено на `true` **и** `compiler.output` указан в вашей конфигурации Intlayer, `intlayer()` автоматически регистрирует `intlayerCompiler`. Компилятор извлекает встроенные объявления контента, написанные непосредственно в файлах компонентов, и записывает их в словари во время трансформации. See [intlayerCompiler documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/packages/vite-intlayer/intlayerCompiler.md).
|
|
148
|
+
|
|
149
|
+
### 6. Оптимизация сборки
|
|
150
|
+
|
|
151
|
+
Во время production сборки плагин добавляет:
|
|
152
|
+
|
|
153
|
+
- **intlayerOptimize** – Babel трансформация, которая переписывает `useIntlayer('key')` → `useDictionary(hash)` и внедряет прямой импорт JSON.
|
|
154
|
+
- **intlayerPrune** – удаляет неиспользуемые поля содержимого из dictionary JSON.
|
|
155
|
+
- **intlayerMinify** – компактирует dictionary 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
|
+
### As part of `intlayer()` (recommended)
|
|
34
|
+
|
|
35
|
+
Enable pruning through your Intlayer config and the main plugin handles everything:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
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
|
|
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
|
+
- **Static dictionaries** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`. Поля обрезаются по локали внутри `translation`.
|
|
100
|
+
- **Dynamic (per-locale) dictionaries** — плоская структура `{ fieldA: ..., fieldB: ... }`. Поля обрезаются на верхнем уровне.
|
|
101
|
+
|
|
102
|
+
### 3. Граничные случаи
|
|
103
|
+
|
|
104
|
+
Если структура контента словаря не может быть распознана (например, необычная вложенная форма), она добавляется в `pruneContext.dictionariesWithEdgeCases` и **остается без изменений**. Записывается предупреждение. `intlayerMinify` также пропускает эти словари.
|
|
105
|
+
|
|
106
|
+
### 4. Field-rename map
|
|
107
|
+
|
|
108
|
+
При успешном завершении pruning `intlayerPrune` также записывает `pruneContext.dictionaryKeyToFieldRenameMap` — отображение исходных имен полей на короткие псевдонимы. `intlayerMinify` читает эту карту для переименования полей в выходном JSON, а Babel rename pass `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/ru/releases/v9.md
CHANGED
|
@@ -374,21 +374,6 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
374
374
|
|
|
375
375
|
Установщик загружает `docker-compose.yml` и `.env`, автоматически генерирует необходимые секреты и запускает `docker compose up -d`. Всё — дашборд, API, база данных, хранилище объектов и транзакционная электронная почта — работает локально в контейнерах.
|
|
376
376
|
|
|
377
|
-
### Включённые сервисы
|
|
378
|
-
|
|
379
|
-
| Сервис | Назначение |
|
|
380
|
-
| ---------------------------------------- | -------------------------------------------------------------------------------- |
|
|
381
|
-
| **app** (TanStack Start) | Дашборд UI на порту `3000` |
|
|
382
|
-
| **backend** (Fastify/Bun) | REST API на порту `3100` |
|
|
383
|
-
| **MongoDB 7** (одноузловой набор реплик) | Основная база данных |
|
|
384
|
-
| **Redis 7** | Очереди задач и кэширование |
|
|
385
|
-
| **MinIO** | S3-совместимое хранилище объектов (аватары, скриншоты) |
|
|
386
|
-
| **Mailpit** | Локальный SMTP-приёмник + веб-интерфейс для транзакционной почты на порту `8025` |
|
|
387
|
-
|
|
388
|
-
Chromium (используемый для генерации скриншотов через Puppeteer) встроен в образ бэкенда — дополнительный контейнер не требуется.
|
|
389
|
-
|
|
390
|
-
---
|
|
391
|
-
|
|
392
377
|
## Примечания по миграции с v8
|
|
393
378
|
|
|
394
379
|
Если вы обновляетесь с v8, обратите внимание, что v9 не содержит ломающих изменений (breaking changes). Однако вот ключевые изменения:
|
package/docs/ru/self_hosting.md
CHANGED
|
@@ -64,6 +64,32 @@ Chromium (используемый для генерации скриншото
|
|
|
64
64
|
|
|
65
65
|
## Быстрый старт
|
|
66
66
|
|
|
67
|
+
Извлеките и запустите опубликованный образ, указав учетные данные и секреты 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) — опубликованный образ не поддерживает пользовательские домены.
|
|
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
|
+
| Переменная | Пример | Описание |
|
|
131
|
+
| ---------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
132
|
+
| `DB_ID` | `intlayer` | Пользователь MongoDB Atlas |
|
|
133
|
+
| `DB_MDP` | _(ваш пароль)_ | Пароль MongoDB Atlas |
|
|
134
|
+
| `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | Хост кластера MongoDB Atlas (используется в URI `mongodb+srv://`) |
|
|
135
|
+
| `BETTER_AUTH_SECRET` | _(сгенерировано)_ | 32-байтовый секрет для подписания сессии |
|
|
136
|
+
| `S3_SECRET_ACCESS_KEY` | _(сгенерировано)_ | Секрет для встроенного MinIO |
|
|
137
|
+
| `RESEND_API_KEY` | _(ваш ключ)_ | Транзакционные письма через 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
|
-
Для production развертываний разместите обратный прокси перед контейнерами приложения и бэкенда вместо того, чтобы открывать их напрямую.
|
|
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`) или использовать инъекцию runtime-конфигурации.
|
|
319
|
+
- **MongoDB должна быть внешней (Atlas).** Backend подключается только через `mongodb+srv://` (собирается из `DB_ID` / `DB_MDP` / `DB_CLUSTER`), поэтому обычный `mongodb://host:27017` — включая встроенный `mongod` контейнера — не может быть использован. Предоставьте кластер MongoDB Atlas.
|
|
320
|
+
- **Нет пользовательского домена.** Все URL-адреса `VITE_*`, обращенные к браузеру, встраиваются в приложение во время сборки, и опубликованный образ поставляется со значениями `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
|
|
|
@@ -324,14 +343,6 @@ docker compose build app
|
|
|
324
343
|
docker compose up -d app
|
|
325
344
|
```
|
|
326
345
|
|
|
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
346
|
### Отсутствует корзина MinIO
|
|
336
347
|
|
|
337
348
|
Если одноразовый сервис `minio-init` не запустился (или запустился до того, как MinIO был готов), создайте корзину вручную:
|