@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
|
@@ -27,9 +27,7 @@ history:
|
|
|
27
27
|
author: aymericzip
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
# Traduci
|
|
31
|
-
|
|
32
|
-
Consulta il [Template dell'Applicazione](https://github.com/aymericzip/intlayer-vite-vue-template) su GitHub.
|
|
30
|
+
# Traduci il tuo sito web Vite e Vue utilizzando Intlayer | Internazionalizzazione (i18n)
|
|
33
31
|
|
|
34
32
|
## Tabella dei Contenuti
|
|
35
33
|
|
package/docs/it/live-sync.md
CHANGED
|
@@ -59,36 +59,44 @@ getLocalizedUrl(
|
|
|
59
59
|
|
|
60
60
|
## Parametri
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
La funzione `getLocalizedUrl` genera un URL localizzato anteponendo all'URL fornito la locale specificata. Gestisce sia URL assoluti che relativi, assicurando che il prefisso della locale corretta venga applicato in base alla configurazione.
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Parametri
|
|
62
|
+
### Parametri Obbligatori
|
|
69
63
|
|
|
70
64
|
- `url: string`
|
|
71
|
-
- **
|
|
72
|
-
- **
|
|
65
|
+
- **Description**: La stringa URL originale da prefissare con una locale.
|
|
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**: La locale corrente per cui l'URL è in corso di localizzazione.
|
|
71
|
+
- **Type**: `Locales`
|
|
72
|
+
- **Required**: Yes
|
|
73
|
+
|
|
74
|
+
### Parametri Opzionali
|
|
75
|
+
|
|
76
|
+
- `options?: object`
|
|
77
|
+
- **Description**: Oggetto di configurazione per il comportamento della localizzazione degli URL.
|
|
78
|
+
- **Type**: `object`
|
|
79
|
+
- **Required**: No (Opzionale)
|
|
80
|
+
|
|
81
|
+
- `options.locales?: Locales[]`
|
|
82
|
+
- **Description**: Array di locale supportate. Se non fornito, utilizza le locale configurate dalla configurazione del tuo progetto.
|
|
83
|
+
- **Type**: `Locales[]`
|
|
84
|
+
- **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/configuration.md#middleware)
|
|
85
|
+
|
|
86
|
+
- `options.defaultLocale?: Locales`
|
|
87
|
+
- **Description**: La locale predefinita per l'applicazione. Se non fornito, utilizza la locale predefinita configurata dalla configurazione del tuo progetto.
|
|
88
|
+
- **Type**: `Locales`
|
|
89
|
+
- **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/configuration.md#middleware)
|
|
90
|
+
|
|
91
|
+
- `options.mode?: 'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
|
|
92
|
+
- **Description**: La modalità di routing degli URL per la gestione delle locale. Se non fornito, utilizza la modalità configurata dalla configurazione del tuo progetto.
|
|
93
|
+
- **Type**: `'prefix-no-default' | 'prefix-all' | 'no-prefix' | 'search-params'`
|
|
94
|
+
- **Default**: [`Project Configuration`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/configuration.md#middleware)
|
|
95
|
+
- **Modes**:
|
|
96
|
+
- `prefix-no-default`: Nessun prefisso per la locale predefinita, prefisso per tutte le altre
|
|
97
|
+
- `prefix-all`: Prefisso per tutte le locale inclusa quella predefinita
|
|
98
|
+
- `no-prefix`: Nessun prefisso di locale nell'URL
|
|
99
|
+
- `search-params`: Utilizza i parametri di query per la locale (es. `?locale=fr`)
|
|
92
100
|
|
|
93
101
|
### Ritorna
|
|
94
102
|
|
|
@@ -50,26 +50,12 @@ getMultilingualUrls(
|
|
|
50
50
|
|
|
51
51
|
## Parametri
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
### Parametri Richiesti
|
|
54
54
|
|
|
55
55
|
- `url: string`
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
|
|
59
|
-
- `locales: Locales[]`
|
|
60
|
-
- **Descrizione**: Array opzionale delle lingue supportate. Di default utilizza le lingue configurate nel progetto.
|
|
61
|
-
- **Tipo**: `Locales[]`
|
|
62
|
-
- **Predefinito**: `localesDefault`
|
|
63
|
-
|
|
64
|
-
- `defaultLocale: Locales`
|
|
65
|
-
- **Descrizione**: La lingua predefinita per l'applicazione. Di default utilizza la lingua predefinita configurata nel progetto.
|
|
66
|
-
- **Tipo**: `Locales`
|
|
67
|
-
- **Predefinito**: `defaultLocaleDefault`
|
|
68
|
-
|
|
69
|
-
- `prefixDefault: boolean`
|
|
70
|
-
- **Descrizione**: Se aggiungere il prefisso per la lingua predefinita. Di default utilizza il valore configurato nel progetto.
|
|
71
|
-
- **Tipo**: `boolean`
|
|
72
|
-
- **Predefinito**: `prefixDefaultDefault`
|
|
56
|
+
- **Description**: La stringa URL originale da prefissare con i locale.
|
|
57
|
+
- **Type**: `string`
|
|
58
|
+
- **Required**: Yes
|
|
73
59
|
|
|
74
60
|
### Parametri Opzionali
|
|
75
61
|
|
|
@@ -24,6 +24,10 @@ history:
|
|
|
24
24
|
author: aymericzip
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
+
# Documentazione dell'Hook useDictionary
|
|
28
|
+
|
|
29
|
+
L'hook `useDictionary` ti consente di elaborare un oggetto che assomiglia a un dizionario (contenente chiavi e contenuto) e gestire traduzioni, enumerazioni, ecc., al suo interno. A differenza di `useIntlayer`, che è progettato per funzionare con dichiarazioni di dizionario generate, `useDictionary` è più flessibile e può essere utilizzato con qualsiasi oggetto che segue la struttura del dizionario.
|
|
30
|
+
|
|
27
31
|
## Esempio di utilizzo in React
|
|
28
32
|
|
|
29
33
|
Di seguito un esempio di come utilizzare l'hook `useDictionary` in un componente React:
|
|
@@ -45,27 +49,6 @@ const ComponentExample: FC = () => {
|
|
|
45
49
|
};
|
|
46
50
|
```
|
|
47
51
|
|
|
48
|
-
## Integrazione lato server
|
|
49
|
-
|
|
50
|
-
Se si utilizza l'hook `useDictionary` al di fuori di `IntlayerProvider`, la localizzazione deve essere fornita esplicitamente come parametro durante il rendering del componente:
|
|
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
|
## Suggerimenti Aggiuntivi
|
|
70
53
|
|
|
71
54
|
- **Sicurezza del Tipo**: Usa sempre `Dictionary` per definire i tuoi dizionari per garantire la sicurezza del tipo.
|
|
@@ -48,3 +48,18 @@ import "vite-intlayer";
|
|
|
48
48
|
| `intlayerProxy` | Plugin middleware per lo sviluppo che gestisce il rilevamento della locale e il routing. | - |
|
|
49
49
|
| `intlayerMiddleware` | (**Deprecato**) Alias per `intlayerProxy`. | - |
|
|
50
50
|
| `intlayerPrune` | Plugin per eseguire il tree-shaking e potare i dizionari non utilizzati durante la build. | [intlayerPrune](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/packages/vite-intlayer/intlayerPrune.md) |
|
|
51
|
+
|
|
52
|
+
### Utilities
|
|
53
|
+
|
|
54
|
+
| Export | Description | Related Doc |
|
|
55
|
+
| ---------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| `createIntlayerProxyHandler` | Restituisce un middleware Node.js `(req, res, next)` agnostico del framework con logica di routing locale. | [intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/packages/vite-intlayer/intlayerProxy.md) |
|
|
57
|
+
|
|
58
|
+
### Types
|
|
59
|
+
|
|
60
|
+
| Export | Description |
|
|
61
|
+
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
62
|
+
| `IntlayerPluginOptions` | Opzioni accettate da `intlayer()`. Estende `GetConfigurationOptions` con `compatCallers` e `proxy`. |
|
|
63
|
+
| `IntlayerProxyPluginOptions` | Opzioni accettate da `intlayerProxy()` e `createIntlayerProxyHandler()`. Include `ignore` e `configOptions`. |
|
|
64
|
+
| `IntlayerCompilerOptions` | Opzioni accettate da `intlayerCompiler()`. Include `configOptions` e `compilerConfig`. |
|
|
65
|
+
| `CompatCallerConfig` | Re-export da `@intlayer/babel`. Descrive un pattern di caller compat-adapter per l'analisi dell'utilizzo dei campi. |
|
|
@@ -40,11 +40,126 @@ export default defineConfig({
|
|
|
40
40
|
});
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
##
|
|
43
|
+
## Opzioni
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
```ts
|
|
46
|
+
import type { IntlayerPluginOptions } from "vite-intlayer";
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`IntlayerPluginOptions` estende `GetConfigurationOptions` (vedi `@intlayer/config`) con i seguenti campi aggiuntivi:
|
|
50
|
+
|
|
51
|
+
| Opzione | Tipo | Default | Descrizione |
|
|
52
|
+
| --------------- | ------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
53
|
+
| `compatCallers` | `CompatCallerConfig[]` | `[]` | Pattern di caller aggiuntivi per i package compat-adapter (es. `@intlayer/react-i18next`). Passati all'analizzatore di utilizzo dei campi al momento della build. |
|
|
54
|
+
| `proxy` | `{ ignore?: (req) => boolean }` | `undefined` | Opzioni inoltrate al proxy di locale-routing incluso. Usa `ignore` per escludere percorsi specifici (es. rotte API) dal locale routing. |
|
|
55
|
+
|
|
56
|
+
Tutte le altre opzioni (`override`, `configFile`, …) sono inoltrate direttamente a `getConfiguration()`.
|
|
57
|
+
|
|
58
|
+
### Esempi
|
|
59
|
+
|
|
60
|
+
#### Ignora le rotte API dal routing locale
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
// vite.config.ts
|
|
64
|
+
import { defineConfig } from "vite";
|
|
65
|
+
import { intlayer } from "vite-intlayer";
|
|
66
|
+
|
|
67
|
+
export default defineConfig({
|
|
68
|
+
plugins: [
|
|
69
|
+
intlayer({
|
|
70
|
+
proxy: {
|
|
71
|
+
ignore: (req) => req.url?.startsWith("/api"),
|
|
72
|
+
},
|
|
73
|
+
}),
|
|
74
|
+
],
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
#### Con un percorso file di configurazione personalizzato
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
export default defineConfig({
|
|
82
|
+
plugins: [
|
|
83
|
+
intlayer({
|
|
84
|
+
configFile: "./config/intlayer.config.ts",
|
|
85
|
+
}),
|
|
86
|
+
],
|
|
87
|
+
});
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
#### Con caller compat-adapter
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
import { intlayer } from "vite-intlayer";
|
|
94
|
+
import { reactI18nextCallerConfig } from "@intlayer/react-i18next/plugin";
|
|
95
|
+
|
|
96
|
+
export default defineConfig({
|
|
97
|
+
plugins: [
|
|
98
|
+
intlayer({
|
|
99
|
+
compatCallers: [reactI18nextCallerConfig],
|
|
100
|
+
}),
|
|
101
|
+
],
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Cosa fa il plugin
|
|
106
|
+
|
|
107
|
+
### 1. Preparazione del dizionario
|
|
108
|
+
|
|
109
|
+
Prima che il build inizi (e una volta all'ora in dev), `intlayer` chiama `prepareIntlayer` per compilare tutti i file `.content.ts` in dizionari JSON ottimizzati memorizzati in `.intlayer/`.
|
|
110
|
+
|
|
111
|
+
### 2. Alias di moduli
|
|
112
|
+
|
|
113
|
+
Il plugin aggiunge alias di risoluzione Vite in modo che `import { myDict } from 'intlayer/dictionaries/my-dict'` si risolva nel file JSON compilato su disco. Le build SSR utilizzano `ssr.noExternal` per assicurare che tutti i pacchetti `@intlayer/*` siano raggruppati con gli alias applicati.
|
|
114
|
+
|
|
115
|
+
### 3. Dev-server watcher
|
|
116
|
+
|
|
117
|
+
In development mode a `chokidar` watcher is started. When a `.content.ts` file changes the dictionaries are recompiled and Vite's HMR propagates the update to the browser.
|
|
118
|
+
|
|
119
|
+
### 4. Proxy di routing delle locale bundled (v9+)
|
|
120
|
+
|
|
121
|
+
Da Intlayer v9 il middleware `intlayerProxy` viene registrato automaticamente all'interno di `intlayer()`. Gestisce:
|
|
122
|
+
|
|
123
|
+
- Rilevamento della locale dal prefisso URL, dai cookie e dall'header `Accept-Language`.
|
|
124
|
+
- Reindirizzamenti 301 quando la locale rilevata non corrisponde all'URL corrente.
|
|
125
|
+
- Riscritture URL interne in modo che il framework veda il corretto parametro di route `[locale]`.
|
|
126
|
+
|
|
127
|
+
Il proxy è controllato da `routing.enableProxy` (valore predefinito `true`) nella tua configurazione Intlayer. Per disabilitarlo completamente:
|
|
128
|
+
|
|
129
|
+
```ts
|
|
130
|
+
// intlayer.config.ts
|
|
131
|
+
import { defineConfig } from "intlayer";
|
|
132
|
+
|
|
133
|
+
export default defineConfig({
|
|
134
|
+
routing: { enableProxy: false },
|
|
135
|
+
});
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Per personalizzare il comportamento del proxy senza una chiamata `intlayerProxy()` separata, passa le opzioni `proxy` al plugin principale:
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
intlayer({ proxy: { ignore: (req) => req.url?.startsWith("/api") } });
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Consulta la [documentazione intlayerProxy](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/packages/vite-intlayer/intlayerProxy.md) per il riferimento completo del comportamento di routing.
|
|
145
|
+
|
|
146
|
+
### 5. Compiler integrato (v9+)
|
|
147
|
+
|
|
148
|
+
Quando `compiler.enabled` è `true` **e** `compiler.output` è impostato nella configurazione di Intlayer, `intlayer()` registra `intlayerCompiler` automaticamente. Il compiler estrae le dichiarazioni di contenuto inline scritte direttamente nei file dei componenti e le scrive nei dizionari durante la trasformazione. Vedi la [documentazione di intlayerCompiler](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/packages/vite-intlayer/intlayerCompiler.md).
|
|
149
|
+
|
|
150
|
+
### 6. Ottimizzazioni della build
|
|
151
|
+
|
|
152
|
+
Durante una build di produzione il plugin aggiunge:
|
|
153
|
+
|
|
154
|
+
- **intlayerOptimize** – trasformazione Babel che riscrive `useIntlayer('key')` → `useDictionary(hash)` e inietta importazioni JSON dirette.
|
|
155
|
+
- **intlayerPrune** – rimuove i campi di contenuto inutilizzati dal JSON del dizionario.
|
|
156
|
+
- **intlayerMinify** – compatta il JSON del dizionario e facoltativamente offusca i nomi dei campi.
|
|
157
|
+
|
|
158
|
+
Questi sono inattivi in modalità di sviluppo.
|
|
159
|
+
|
|
160
|
+
## Alias deprecati
|
|
46
161
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
162
|
+
| Esportazione deprecata | Sostituzione |
|
|
163
|
+
| ---------------------- | ------------ |
|
|
164
|
+
| `intlayerPlugin` | `intlayer` |
|
|
165
|
+
| `intLayerPlugin` | `intlayer` |
|
|
@@ -30,16 +30,89 @@ Il plugin Vite `intlayerPrune` viene utilizzato per eseguire tree-shaking ed eli
|
|
|
30
30
|
|
|
31
31
|
## Utilizzo
|
|
32
32
|
|
|
33
|
+
### As part of `intlayer()` (recommended)
|
|
34
|
+
|
|
35
|
+
Abilita il pruning tramite la configurazione di Intlayer e il plugin principale gestisce tutto:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
// intlayer.config.ts
|
|
39
|
+
import { defineConfig } from "intlayer";
|
|
40
|
+
|
|
41
|
+
export default defineConfig({
|
|
42
|
+
build: {
|
|
43
|
+
optimize: true, // abilita sia prune che 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
|
+
Se stai componendo lo stack di plugin manualmente, `intlayerPrune` e `intlayerMinify` condividono un oggetto `PruneContext` che deve essere creato una sola volta e passato a entrambi:
|
|
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), // opzionale, legge dallo stesso contesto
|
|
76
|
+
],
|
|
40
77
|
});
|
|
41
78
|
```
|
|
42
79
|
|
|
43
|
-
##
|
|
80
|
+
## Come funziona
|
|
81
|
+
|
|
82
|
+
### 1. Analisi dell'utilizzo (buildStart)
|
|
83
|
+
|
|
84
|
+
Durante `buildStart`, il plugin `intlayerOptimize` (anche parte di `intlayer()`) scansiona ogni file sorgente del componente elencato in `build.filesList`. Per ogni chiamata `useIntlayer('key')` o `getIntlayer('key')`, registra esattamente quali campi sono accessibili, ad es.:
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
const { title, description } = useIntlayer("myDict");
|
|
88
|
+
// registra: myDict → { title, description }
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Questo costruisce `pruneContext.fieldUsageMap` prima che vengano eseguite le chiamate `transform`.
|
|
92
|
+
|
|
93
|
+
### 2. JSON pruning (transform, enforce: 'pre')
|
|
94
|
+
|
|
95
|
+
When Vite processes a compiled dictionary JSON file, `intlayerPrune` intercepts it before Vite's built-in JSON → ESM conversion. It reads the field-usage map from `pruneContext` and removes any content field that is not in the recorded usage set.
|
|
96
|
+
|
|
97
|
+
Two content shapes are supported:
|
|
98
|
+
|
|
99
|
+
- **Static dictionaries** — `{ nodeType: "translation", translation: { en: {...}, fr: {...} } }`. Fields are pruned per-locale inside `translation`.
|
|
100
|
+
- **Dynamic (per-locale) dictionaries** — flat `{ fieldA: ..., fieldB: ... }`. Fields are pruned at the top level.
|
|
101
|
+
|
|
102
|
+
### 3. Edge cases
|
|
103
|
+
|
|
104
|
+
Se la struttura del contenuto di un dizionario non può essere riconosciuta (ad esempio, una forma nidificata inusuale), viene aggiunta a `pruneContext.dictionariesWithEdgeCases` e **lasciata intatta**. Un avviso viene registrato. `intlayerMinify` salta anche questi dizionari.
|
|
105
|
+
|
|
106
|
+
### 4. Field-rename map
|
|
107
|
+
|
|
108
|
+
Quando la potatura ha successo, `intlayerPrune` scrive anche `pruneContext.dictionaryKeyToFieldRenameMap` — una mappatura dai nomi di campo originali agli alias brevi. `intlayerMinify` legge questa mappa per rinominare i campi nel JSON di output, e il pass di ridenominazione Babel di `intlayerOptimize` aggiorna gli accessi alle proprietà nei file sorgente di conseguenza.
|
|
109
|
+
|
|
110
|
+
## Condizioni di attivazione
|
|
111
|
+
|
|
112
|
+
`intlayerPrune` è attivo **solo** quando tutte le seguenti condizioni sono vere:
|
|
113
|
+
|
|
114
|
+
1. Il comando Vite è `build`.
|
|
115
|
+
2. `build.optimize` è `true` (oppure `undefined`, che di default è `true` per i build).
|
|
116
|
+
3. `build.purge` è `true` nella tua configurazione Intlayer.
|
|
44
117
|
|
|
45
|
-
|
|
118
|
+
È automaticamente **disabilitato** quando `editor.enabled` è `true` perché l'editor necessita del contenuto completo del dizionario.
|
package/docs/it/releases/v9.md
CHANGED
|
@@ -374,21 +374,6 @@ curl -fsSL https://intlayer.org/install.sh | sh
|
|
|
374
374
|
|
|
375
375
|
Il programma di installazione scarica un `docker-compose.yml` e un `.env`, genera automaticamente i secret necessari ed esegue `docker compose up -d`. Tutto — il dashboard, l'API, il database, l'archiviazione di oggetti e le email transazionali — viene eseguito localmente nei container.
|
|
376
376
|
|
|
377
|
-
### Servizi inclusi
|
|
378
|
-
|
|
379
|
-
| Servizio | Scopo |
|
|
380
|
-
| --------------------------------------- | ----------------------------------------------------------------------------- |
|
|
381
|
-
| **app** (TanStack Start) | Interfaccia del dashboard sulla porta `3000` |
|
|
382
|
-
| **backend** (Fastify/Bun) | API REST sulla porta `3100` |
|
|
383
|
-
| **MongoDB 7** (single-node replica set) | Database principale |
|
|
384
|
-
| **Redis 7** | Code di lavori e caching |
|
|
385
|
-
| **MinIO** | Archiviazione di oggetti compatibile S3 (avatar, screenshot) |
|
|
386
|
-
| **Mailpit** | Sink SMTP locale + interfaccia web per email transazionali sulla porta `8025` |
|
|
387
|
-
|
|
388
|
-
Chromium (utilizzato per la generazione di screenshot con Puppeteer) è incluso nell'immagine del backend — nessun container aggiuntivo necessario.
|
|
389
|
-
|
|
390
|
-
---
|
|
391
|
-
|
|
392
377
|
## Note di migrazione da v8
|
|
393
378
|
|
|
394
379
|
Se stai eseguendo l'aggiornamento da v8, nota che la v9 non include breaking changes. Ma ecco le modifiche chiave:
|
package/docs/it/self_hosting.md
CHANGED
|
@@ -64,6 +64,32 @@ Chromium (utilizzato per la generazione di screenshot con Puppeteer) è incluso
|
|
|
64
64
|
|
|
65
65
|
## Avvio rapido
|
|
66
66
|
|
|
67
|
+
Scarica ed esegui l'immagine pubblicata, fornendo le tue credenziali e i segreti di 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
|
+
Quindi apri **http://localhost:3000**.
|
|
86
|
+
|
|
87
|
+
> La dashboard è servita su `localhost`. Vedi [Limitazioni](#limitations) — i domini personalizzati non sono supportati dall'immagine pubblicata.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Avvio rapido
|
|
92
|
+
|
|
67
93
|
```sh
|
|
68
94
|
curl -fsSL https://intlayer.org/install.sh | sh
|
|
69
95
|
```
|
|
@@ -99,7 +125,16 @@ Le porte interne (mongo, redis) non sono esposte all'host per impostazione prede
|
|
|
99
125
|
|
|
100
126
|
## Variabili d'ambiente
|
|
101
127
|
|
|
102
|
-
|
|
128
|
+
### Obbligatorio
|
|
129
|
+
|
|
130
|
+
| Variabile | Esempio | Descrizione |
|
|
131
|
+
| ---------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
132
|
+
| `DB_ID` | `intlayer` | Utente MongoDB Atlas |
|
|
133
|
+
| `DB_MDP` | _(la tua password)_ | Password MongoDB Atlas |
|
|
134
|
+
| `DB_CLUSTER` | `cluster0.xxxxx.mongodb.net` | Host del cluster MongoDB Atlas (utilizzato nell'URI `mongodb+srv://`) |
|
|
135
|
+
| `BETTER_AUTH_SECRET` | _(generato)_ | Secret a 32 byte per la firma delle sessioni |
|
|
136
|
+
| `S3_SECRET_ACCESS_KEY` | _(generato)_ | Secret per il MinIO bundle |
|
|
137
|
+
| `RESEND_API_KEY` | _(la tua chiave)_ | Email transazionale via Resend. Obbligatorio per la configurazione iniziale a meno che non configuri un mailer SMTP globale (vedi [Mailer globale](#global-mailer)) |
|
|
103
138
|
|
|
104
139
|
### Obbligatorie (generate automaticamente o richieste)
|
|
105
140
|
|
|
@@ -141,6 +176,26 @@ L'installer genera un `.env` pronto all'uso. La tabella seguente descrive ogni v
|
|
|
141
176
|
|
|
142
177
|
---
|
|
143
178
|
|
|
179
|
+
### Mailer globale
|
|
180
|
+
|
|
181
|
+
Per impostazione predefinita, tutti i messaggi email transazionali vengono inviati tramite Resend utilizzando `RESEND_API_KEY`. I deploy self-hosted possono invece instradare **ogni** email — incluse le email non organizzative come i reset delle password e i magic link — attraverso un mailer globale configurato con variabili di ambiente.
|
|
182
|
+
|
|
183
|
+
Imposta `MAIL_PROVIDER` per attivarlo. Quando non impostato, viene utilizzato il mailer predefinito di Resend.
|
|
184
|
+
|
|
185
|
+
| Variabile | Esempio | Descrizione |
|
|
186
|
+
| -------------------- | ------------------------------ | -------------------------------------------------------------------------------- |
|
|
187
|
+
| `MAIL_PROVIDER` | `smtp` | Trasporto globale: `smtp` o `resend`. Lascia non impostato per usare i default |
|
|
188
|
+
| `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | Intestazione del mittente. Accetta un indirizzo bare o il formato `Name <email>` |
|
|
189
|
+
| `MAIL_SMTP_HOST` | `smtp.acme.com` | Host SMTP (obbligatorio quando `MAIL_PROVIDER=smtp`) |
|
|
190
|
+
| `MAIL_SMTP_PORT` | `587` | Porta SMTP (per impostazione predefinita `587`) |
|
|
191
|
+
| `MAIL_SMTP_SECURE` | `false` | TLS implicito. Imposta `true` per la porta `465` |
|
|
192
|
+
| `MAIL_SMTP_USER` | _(il tuo utente)_ | Nome utente SMTP (opzionale; ometti per relay non autenticati) |
|
|
193
|
+
| `MAIL_SMTP_PASSWORD` | _(la tua password)_ | Password SMTP |
|
|
194
|
+
|
|
195
|
+
> Precedenza: il mailer personalizzato di un'organizzazione (configurato dal dashboard **Organization**) ha priorità rispetto al mailer globale, che a sua volta ha priorità rispetto alla chiave Resend predefinita.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
144
199
|
## Collegamento del tuo progetto Intlayer
|
|
145
200
|
|
|
146
201
|
Una volta che lo stack è in esecuzione, punta il tuo progetto al backend e alla dashboard self-hosted invece di `intlayer.org`.
|
|
@@ -259,47 +314,11 @@ docker run --rm \
|
|
|
259
314
|
|
|
260
315
|
---
|
|
261
316
|
|
|
262
|
-
##
|
|
263
|
-
|
|
264
|
-
Per le implementazioni in produzione, posiziona un reverse proxy davanti ai container dell'app e del backend invece di esporli direttamente.
|
|
265
|
-
|
|
266
|
-
### Esempio 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
|
+
## Limitazioni
|
|
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
|
-
Aggiorna le seguenti variabili `.env` per corrispondere ai tuoi domini pubblici:
|
|
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
|
-
> Le variabili `VITE_*` sono integrate nell'immagine della dashboard al momento della compilazione. Se le modifichi dopo che l'immagine è stata compilata, devi ricostruire l'immagine `app` (`docker compose build app`) o utilizzare l'iniezione della configurazione a runtime.
|
|
319
|
+
- **MongoDB deve essere esterno (Atlas).** Il backend si connette solo su `mongodb+srv://` (costruito da `DB_ID` / `DB_MDP` / `DB_CLUSTER`), quindi un semplice `mongodb://host:27017` — incluso il `mongod` incluso nel container — non può essere utilizzato. Fornire un cluster MongoDB Atlas.
|
|
320
|
+
- **Nessun dominio personalizzato.** Tutti gli URL `VITE_*` rivolti al browser sono inline nell'app al momento della compilazione, e l'immagine pubblicata contiene valori `localhost`. Il dashboard deve essere accessibile su `http://localhost:3000`; servarlo su un dominio pubblico richiederebbe di ricompilare l'immagine con gli URL di destinazione incorporati e non è supportato out of the box.
|
|
321
|
+
- **Email richiede un mailer funzionante.** La configurazione al primo avvio applica la verifica email, quindi `RESEND_API_KEY` o un [mailer SMTP globale](#global-mailer) (`MAIL_PROVIDER=smtp` + `MAIL_SMTP_*`) deve essere configurato. Dopo che il primo amministratore ha effettuato l'accesso, ogni organizzazione può anche configurare il proprio mailer SMTP o Resend dal dashboard.
|
|
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
|
-
### Email non inviate
|
|
328
|
-
|
|
329
|
-
Per impostazione predefinita, tutte le email in uscita vengono catturate da Mailpit. Apri `http://localhost:8025` per vedere i messaggi inviati. Per inviare email reali, imposta `MAIL_PROVIDER=resend` e `RESEND_API_KEY=<la-tua-chiave>` in `.env`, quindi riavvia il backend:
|
|
330
|
-
|
|
331
|
-
```sh
|
|
332
|
-
docker compose restart backend
|
|
333
|
-
```
|
|
334
|
-
|
|
335
346
|
### Bucket MinIO mancante
|
|
336
347
|
|
|
337
348
|
Se il servizio one-shot `minio-init` non è stato eseguito (o è stato eseguito prima che MinIO fosse pronto), crea il bucket manualmente:
|