@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
|
@@ -64,6 +64,53 @@ export default firstDictionary;
|
|
|
64
64
|
}
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
+
### Referencing with Nest
|
|
68
|
+
|
|
69
|
+
Ora, crea un altro modulo di contenuto che utilizza la funzione `nest` per fare riferimento al contenuto precedente. Puoi fare riferimento all'intero contenuto o a un valore annidato specifico:
|
|
70
|
+
|
|
71
|
+
```typescript fileName="secondDictionary.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
|
|
72
|
+
import { nest, type Dictionary } from "intlayer";
|
|
73
|
+
|
|
74
|
+
const myNestingContent = {
|
|
75
|
+
key: "key_of_my_second_dictionary",
|
|
76
|
+
content: {
|
|
77
|
+
// Fa riferimento all'intero dizionario:
|
|
78
|
+
fullNestedContent: nest("key_of_my_first_dictionary"),
|
|
79
|
+
// Fa riferimento a un valore annidato specifico:
|
|
80
|
+
partialNestedContent: nest(
|
|
81
|
+
"key_of_my_first_dictionary",
|
|
82
|
+
"subContent.contentNumber"
|
|
83
|
+
),
|
|
84
|
+
},
|
|
85
|
+
} satisfies Dictionary;
|
|
86
|
+
|
|
87
|
+
export default myNestingContent;
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```json fileName="secondDictionary.content.json" contentDeclarationFormat="json"
|
|
91
|
+
{
|
|
92
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
93
|
+
"key": "key_of_my_second_dictionary",
|
|
94
|
+
"content": {
|
|
95
|
+
"fullNestedContent": {
|
|
96
|
+
"nodeType": "nested",
|
|
97
|
+
"nested": {
|
|
98
|
+
"dictionaryKey": "key_of_my_first_dictionary"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"partialNestedContent": {
|
|
102
|
+
"nodeType": "nested",
|
|
103
|
+
"nested": {
|
|
104
|
+
"dictionaryKey": "key_of_my_first_dictionary",
|
|
105
|
+
"path": "subContent.contentNumber"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Come secondo parametro, puoi specificare un percorso a un valore annidato all'interno di quel contenuto. Quando non viene fornito alcun percorso, viene restituito l'intero contenuto del dizionario di riferimento.
|
|
113
|
+
|
|
67
114
|
## Configurazione dell'Annidamento
|
|
68
115
|
|
|
69
116
|
<Tabs group="framework">
|
|
@@ -258,36 +305,6 @@ document.getElementById("nested")!.textContent = content.partialNestedContent;
|
|
|
258
305
|
</Tab>
|
|
259
306
|
</Tabs>
|
|
260
307
|
|
|
261
|
-
## Utilizzo dell'Annidamento con React Intlayer
|
|
262
|
-
|
|
263
|
-
Per utilizzare contenuti annidati in un componente React, sfrutta il hook `useIntlayer` del pacchetto `react-intlayer`. Questo hook recupera il contenuto corretto in base alla chiave specificata. Ecco un esempio di come utilizzarlo:
|
|
264
|
-
|
|
265
|
-
```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
|
|
266
|
-
import type { FC } from "react";
|
|
267
|
-
import { useIntlayer } from "react-intlayer";
|
|
268
|
-
|
|
269
|
-
const NestComponent: FC = () => {
|
|
270
|
-
const { fullNestedContent, partialNestedContent } = useIntlayer(
|
|
271
|
-
"key_of_my_second_dictionary"
|
|
272
|
-
);
|
|
273
|
-
|
|
274
|
-
return (
|
|
275
|
-
<div>
|
|
276
|
-
<p>
|
|
277
|
-
Contenuto Annidato Completo: {JSON.stringify(fullNestedContent)}
|
|
278
|
-
{/* Output: {"content": "content", "subContent": {"contentNumber": 0, "contentString": "string"}} */}
|
|
279
|
-
</p>
|
|
280
|
-
<p>
|
|
281
|
-
Valore Annidato Parziale: {partialNestedContent}
|
|
282
|
-
{/* Output: 0 */}
|
|
283
|
-
</p>
|
|
284
|
-
</div>
|
|
285
|
-
);
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
export default NestComponent;
|
|
289
|
-
```
|
|
290
|
-
|
|
291
308
|
## Risorse Aggiuntive
|
|
292
309
|
|
|
293
310
|
Per informazioni più dettagliate sulla configurazione e sull'utilizzo, consulta le seguenti risorse:
|
package/docs/it/formatters.md
CHANGED
|
@@ -46,34 +46,6 @@ author: aymericzip
|
|
|
46
46
|
|
|
47
47
|
Intlayer fornisce un set di helper leggeri costruiti sopra le API native `Intl`, oltre a un wrapper `Intl` con cache per evitare di costruire ripetutamente formattatori pesanti. Queste utilità sono completamente sensibili alla localizzazione e possono essere utilizzate dal pacchetto principale `intlayer`.
|
|
48
48
|
|
|
49
|
-
### Importazione
|
|
50
|
-
|
|
51
|
-
```ts
|
|
52
|
-
import {
|
|
53
|
-
Intl,
|
|
54
|
-
number,
|
|
55
|
-
percentage,
|
|
56
|
-
currency,
|
|
57
|
-
date,
|
|
58
|
-
relativeTime,
|
|
59
|
-
units,
|
|
60
|
-
compact,
|
|
61
|
-
list,
|
|
62
|
-
getLocaleName,
|
|
63
|
-
getLocaleLang,
|
|
64
|
-
getLocaleFromPath,
|
|
65
|
-
getPathWithoutLocale,
|
|
66
|
-
getLocalizedUrl,
|
|
67
|
-
getHTMLTextDir,
|
|
68
|
-
getContent,
|
|
69
|
-
getTranslation,
|
|
70
|
-
getIntlayer,
|
|
71
|
-
getIntlayerAsync,
|
|
72
|
-
} from "intlayer";
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Se stai usando React, sono disponibili anche gli hook; vedi `react-intlayer/format`.
|
|
76
|
-
|
|
77
49
|
## Intl con cache
|
|
78
50
|
|
|
79
51
|
L'`Intl` esportato è un wrapper sottile con cache attorno all'`Intl` globale. Memorizza in cache le istanze di `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, `DisplayNames`, `Collator` e `PluralRules`, evitando così di ricostruire ripetutamente lo stesso formattatore.
|
|
@@ -110,9 +82,7 @@ pluralRules.select(1); // "one"
|
|
|
110
82
|
pluralRules.select(2); // "other"
|
|
111
83
|
```
|
|
112
84
|
|
|
113
|
-
##
|
|
114
|
-
|
|
115
|
-
Oltre agli helper per i formatter, puoi anche utilizzare direttamente il wrapper Intl con cache per altre funzionalità Intl:
|
|
85
|
+
## React Formatters
|
|
116
86
|
|
|
117
87
|
### `Intl.DisplayNames`
|
|
118
88
|
|
|
@@ -128,6 +98,22 @@ const regionNames = new Intl.DisplayNames("fr", { type: "region" });
|
|
|
128
98
|
regionNames.of("US"); // "États-Unis"
|
|
129
99
|
```
|
|
130
100
|
|
|
101
|
+
### Hook Disponibili
|
|
102
|
+
|
|
103
|
+
Tutti gli hook utilizzano automaticamente la locale da `IntlayerProvider` o `IntlayerServerProvider`.
|
|
104
|
+
|
|
105
|
+
| Hook | Description | Example Output |
|
|
106
|
+
| ------------------- | ----------------------------------------- | ----------------------------- |
|
|
107
|
+
| `useNumber()` | Formatta numeri con raggruppamento | `"123,456.789"` |
|
|
108
|
+
| `useCurrency()` | Formatta valori di valuta | `"€1,234.50"` |
|
|
109
|
+
| `usePercentage()` | Formatta percentuali | `"25%"` |
|
|
110
|
+
| `useDate()` | Formatta date e orari | `"Aug 2, 2025"` |
|
|
111
|
+
| `useRelativeTime()` | Formatta tempo relativo | `"in 3 days"` |
|
|
112
|
+
| `useUnit()` | Formatta valori con unità | `"5 kilometers"` |
|
|
113
|
+
| `useCompact()` | Formatta numeri in notazione compatta | `"1.2K"` |
|
|
114
|
+
| `useList()` | Formatta array come liste | `"apple, banana, and orange"` |
|
|
115
|
+
| `useIntl()` | Ottieni oggetto `Intl` legato alla locale | Accesso completo API `Intl` |
|
|
116
|
+
|
|
131
117
|
### `Intl.Collator`
|
|
132
118
|
|
|
133
119
|
Per il confronto e l'ordinamento di stringhe sensibili alla localizzazione:
|
|
@@ -267,166 +253,146 @@ getLocaleFromPath("https://example.com/es/about"); // "es"
|
|
|
267
253
|
|
|
268
254
|
### Funzioni Formatter
|
|
269
255
|
|
|
270
|
-
|
|
256
|
+
#### `number(value, options?)`
|
|
271
257
|
|
|
272
|
-
|
|
258
|
+
Formatta un valore numerico utilizzando il raggruppamento e i decimali consapevoli della locale.
|
|
273
259
|
|
|
274
|
-
|
|
275
|
-
|
|
260
|
+
- **value**: `number | string`
|
|
261
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
276
262
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
263
|
+
```ts
|
|
264
|
+
number(123456.789); // "123,456.789" (in en-US)
|
|
265
|
+
number("1000000", { locale: "fr" }); // "1 000 000"
|
|
266
|
+
number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
|
|
280
267
|
```
|
|
281
268
|
|
|
282
|
-
|
|
283
|
-
- **locales**: Array opzionale delle localizzazioni supportate (predefinito alle localizzazioni configurate)
|
|
284
|
-
- **returns**: L'URL senza il segmento della localizzazione
|
|
269
|
+
#### `percentage(value, options?)`
|
|
285
270
|
|
|
286
|
-
|
|
271
|
+
Formatta un numero come stringa percentuale. I valori maggiori di 1 sono normalizzati (es. `25` → `25%`, `0.25` → `25%`).
|
|
287
272
|
|
|
288
|
-
|
|
273
|
+
- **value**: `number | string`
|
|
274
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
289
275
|
|
|
290
276
|
```ts
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
getLocalizedUrl("/about", "en", ["en", "fr"], "en", false); // "/about"
|
|
295
|
-
getLocalizedUrl("https://example.com/about", "fr", ["en", "fr"], "en", true); // "https://example.com/fr/about"
|
|
277
|
+
percentage(0.25); // "25%"
|
|
278
|
+
percentage(25); // "25%"
|
|
279
|
+
percentage(0.237, { minimumFractionDigits: 1 }); // "23.7%"
|
|
296
280
|
```
|
|
297
281
|
|
|
298
|
-
|
|
299
|
-
- **currentLocale**: La localizzazione corrente
|
|
300
|
-
- **locales**: Array opzionale delle localizzazioni supportate (predefinito alle localizzazioni configurate)
|
|
301
|
-
- **defaultLocale**: Localizzazione predefinita opzionale (predefinita alla localizzazione predefinita configurata)
|
|
302
|
-
- **prefixDefault**: Se aggiungere il prefisso alla localizzazione predefinita (predefinito al valore configurato)
|
|
282
|
+
#### `currency(value, options?)`
|
|
303
283
|
|
|
304
|
-
|
|
284
|
+
Formatta un valore come valuta localizzata. Il valore predefinito è `USD`.
|
|
305
285
|
|
|
306
|
-
|
|
286
|
+
- **value**: `number | string`
|
|
287
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
288
|
+
- Comuni: `currency`, `currencyDisplay` (`"symbol" | "code" | "name"`)
|
|
307
289
|
|
|
308
290
|
```ts
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
getHTMLTextDir("en-US"); // "ltr"
|
|
312
|
-
getHTMLTextDir("ar"); // "rtl"
|
|
313
|
-
getHTMLTextDir("he"); // "rtl"
|
|
291
|
+
currency(1234.5, { currency: "EUR" }); // "€1,234.50"
|
|
292
|
+
currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
|
|
314
293
|
```
|
|
315
294
|
|
|
316
|
-
|
|
317
|
-
|
|
295
|
+
#### `date(date, optionsOrPreset?)`
|
|
296
|
+
|
|
297
|
+
Formatta un valore di data/ora.
|
|
298
|
+
|
|
299
|
+
- **date**: `Date | string | number`
|
|
300
|
+
- **optionsOrPreset**: `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` o preset: `"short" | "long" | "dateOnly" | "timeOnly" | "full"`
|
|
301
|
+
|
|
302
|
+
```ts
|
|
303
|
+
date(new Date(), "short"); // es. "08/02/25, 14:30"
|
|
304
|
+
date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); // "2 août"
|
|
305
|
+
```
|
|
318
306
|
|
|
319
|
-
|
|
307
|
+
#### `relativeTime(from, to?, options?)`
|
|
320
308
|
|
|
321
|
-
|
|
309
|
+
Formatta il tempo relativo tra due istanti.
|
|
322
310
|
|
|
323
|
-
|
|
311
|
+
- **from**: `Date | string | number`
|
|
312
|
+
- **to**: `Date | string | number` (predefinito `new Date()`)
|
|
313
|
+
- **options**: `{ locale?, unit?, numeric?, style? }`
|
|
324
314
|
|
|
325
315
|
```ts
|
|
326
|
-
|
|
316
|
+
const now = new Date();
|
|
317
|
+
const in3Days = new Date(now.getTime() + 3 * 864e5);
|
|
318
|
+
relativeTime(now, in3Days, { unit: "day" }); // "in 3 days"
|
|
327
319
|
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
{ dictionaryKey: "common", dictionaryPath: "/path/to/dict" },
|
|
331
|
-
"fr"
|
|
332
|
-
);
|
|
320
|
+
const twoHoursAgo = new Date(now.getTime() - 2 * 3600e3);
|
|
321
|
+
relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "2 hours ago"
|
|
333
322
|
```
|
|
334
323
|
|
|
335
|
-
|
|
336
|
-
- **nodeProps**: Proprietà per il contesto di trasformazione
|
|
337
|
-
- **locale**: Localizzazione opzionale (predefinita alla localizzazione predefinita configurata)
|
|
324
|
+
#### `units(value, options?)`
|
|
338
325
|
|
|
339
|
-
|
|
326
|
+
Formatta un valore numerico con un'unità.
|
|
340
327
|
|
|
341
|
-
|
|
328
|
+
- **value**: `number | string`
|
|
329
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
330
|
+
- Common: `unit` (e.g., `"kilometer"`, `"byte"`), `unitDisplay` (`"short" | "narrow" | "long"`)
|
|
342
331
|
|
|
343
332
|
```ts
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
const content = getTranslation(
|
|
347
|
-
{
|
|
348
|
-
en: "Hello",
|
|
349
|
-
fr: "Bonjour",
|
|
350
|
-
de: "Hallo",
|
|
351
|
-
},
|
|
352
|
-
"fr",
|
|
353
|
-
true
|
|
354
|
-
); // "Bonjour"
|
|
333
|
+
units(5, { unit: "kilometer", unitDisplay: "long", locale: "en-GB" }); // "5 kilometers"
|
|
334
|
+
units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B"
|
|
355
335
|
```
|
|
356
336
|
|
|
357
|
-
|
|
358
|
-
- **locale**: Lingua di destinazione (default è la lingua configurata come predefinita)
|
|
359
|
-
- **fallback**: Se effettuare il fallback alla lingua predefinita (default è true)
|
|
337
|
+
#### `compact(value, options?)`
|
|
360
338
|
|
|
361
|
-
|
|
339
|
+
Formatta un numero utilizzando la notazione compatta.
|
|
362
340
|
|
|
363
|
-
|
|
341
|
+
- **value**: `number | string`
|
|
342
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
364
343
|
|
|
365
344
|
```ts
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
const content = getIntlayer("common", "fr");
|
|
369
|
-
const nestedContent = getIntlayer("common", "fr", customPlugins);
|
|
345
|
+
compact(1200); // "1.2K"
|
|
346
|
+
compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 million"
|
|
370
347
|
```
|
|
371
348
|
|
|
372
|
-
|
|
373
|
-
- **locale**: Locale opzionale (default è la locale configurata di default)
|
|
374
|
-
- **plugins**: Array opzionale di plugin di trasformazione personalizzati
|
|
349
|
+
#### `list(values, options?)`
|
|
375
350
|
|
|
376
|
-
|
|
351
|
+
Formatta un array in una stringa di lista localizzata.
|
|
377
352
|
|
|
378
|
-
|
|
353
|
+
- **values**: `(string | number)[]`
|
|
354
|
+
- **options**: `Intl.ListFormatOptions & { locale?: LocalesValues }`
|
|
355
|
+
- Common: `type` (`"conjunction" | "disjunction" | "unit"`), `style` (`"long" | "short" | "narrow"`)
|
|
379
356
|
|
|
380
357
|
```ts
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
const content = await getIntlayerAsync("common", "fr");
|
|
358
|
+
list(["apple", "banana", "orange"]); // "apple, banana, and orange"
|
|
359
|
+
list(["red", "green", "blue"], { locale: "fr", type: "disjunction" }); // "rouge, vert ou bleu"
|
|
384
360
|
```
|
|
385
361
|
|
|
386
|
-
- **dictionaryKey**: La chiave del dizionario da recuperare
|
|
387
|
-
- **locale**: Locale opzionale (default è la locale configurata di default)
|
|
388
|
-
- **plugins**: Array opzionale di plugin di trasformazione personalizzati
|
|
389
|
-
|
|
390
362
|
## Formatter
|
|
391
363
|
|
|
392
364
|
Tutti gli helper seguenti sono esportati da `intlayer`.
|
|
393
365
|
|
|
394
366
|
### Funzionalità Intl Aggiuntive
|
|
395
367
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
Formatta un valore numerico utilizzando la separazione delle migliaia e i decimali in base alla localizzazione.
|
|
368
|
+
#### `Intl.DisplayNames`
|
|
399
369
|
|
|
400
|
-
|
|
401
|
-
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
402
|
-
|
|
403
|
-
Esempi:
|
|
370
|
+
Per nomi localizzati di lingue, regioni, valute e script:
|
|
404
371
|
|
|
405
372
|
```ts
|
|
406
|
-
import {
|
|
407
|
-
|
|
408
|
-
number(123456.789); // "123,456.789" (in en-US)
|
|
409
|
-
number("1000000", { locale: "fr" }); // "1 000 000"
|
|
410
|
-
number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
|
|
411
|
-
```
|
|
412
|
-
|
|
413
|
-
### `percentage(value, options?)`
|
|
373
|
+
import { Intl } from "intlayer";
|
|
414
374
|
|
|
415
|
-
|
|
375
|
+
const languageNames = new Intl.DisplayNames("en", { type: "language" });
|
|
376
|
+
languageNames.of("fr"); // "French"
|
|
416
377
|
|
|
417
|
-
|
|
378
|
+
const regionNames = new Intl.DisplayNames("fr", { type: "region" });
|
|
379
|
+
regionNames.of("US"); // "États-Unis"
|
|
380
|
+
```
|
|
418
381
|
|
|
419
|
-
|
|
420
|
-
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
382
|
+
#### `Intl.Collator`
|
|
421
383
|
|
|
422
|
-
|
|
384
|
+
Per il confronto e l'ordinamento di stringhe consapevoli della locale:
|
|
423
385
|
|
|
424
386
|
```ts
|
|
425
|
-
import {
|
|
387
|
+
import { Intl } from "intlayer";
|
|
426
388
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
389
|
+
const collator = new Intl.Collator("de", {
|
|
390
|
+
sensitivity: "base",
|
|
391
|
+
numeric: true,
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
const words = ["äpfel", "zebra", "100", "20"];
|
|
395
|
+
words.sort(collator.compare); // ["20", "100", "äpfel", "zebra"]
|
|
430
396
|
```
|
|
431
397
|
|
|
432
398
|
#### `Intl.PluralRules`
|
|
@@ -558,42 +524,6 @@ list([1, 2, 3], { type: "unit" }); // "1, 2, 3"
|
|
|
558
524
|
|
|
559
525
|
## Utility di Gestione dei Contenuti
|
|
560
526
|
|
|
561
|
-
## Note
|
|
562
|
-
|
|
563
|
-
- Tutti gli helper accettano input di tipo `string`; internamente vengono convertiti in numeri o date.
|
|
564
|
-
- La localizzazione predefinita è quella configurata in `internationalization.defaultLocale` se non specificata.
|
|
565
|
-
- Queste utility sono dei semplici wrapper; per formattazioni avanzate, passare le opzioni standard di `Intl`.
|
|
566
|
-
|
|
567
|
-
## Punti di ingresso e re-export (`@index.ts`)
|
|
568
|
-
|
|
569
|
-
I formatter risiedono nel pacchetto core e vengono re-esportati da pacchetti di livello superiore per mantenere gli import ergonomici attraverso i runtime:
|
|
570
|
-
|
|
571
|
-
Esempi:
|
|
572
|
-
|
|
573
|
-
```ts
|
|
574
|
-
// Codice dell'app (consigliato)
|
|
575
|
-
import {
|
|
576
|
-
number,
|
|
577
|
-
currency,
|
|
578
|
-
date,
|
|
579
|
-
relativeTime,
|
|
580
|
-
units,
|
|
581
|
-
compact,
|
|
582
|
-
list,
|
|
583
|
-
Intl,
|
|
584
|
-
getLocaleName,
|
|
585
|
-
getLocaleLang,
|
|
586
|
-
getLocaleFromPath,
|
|
587
|
-
getPathWithoutLocale,
|
|
588
|
-
getLocalizedUrl,
|
|
589
|
-
getHTMLTextDir,
|
|
590
|
-
getContent,
|
|
591
|
-
getTranslation,
|
|
592
|
-
getIntlayer,
|
|
593
|
-
getIntlayerAsync,
|
|
594
|
-
} da "intlayer";
|
|
595
|
-
```
|
|
596
|
-
|
|
597
527
|
### React
|
|
598
528
|
|
|
599
529
|
Componenti client:
|
|
@@ -692,3 +622,19 @@ import {
|
|
|
692
622
|
```
|
|
693
623
|
|
|
694
624
|
> Questi composables considereranno la localizzazione dal `IntlayerProvider` iniettato
|
|
625
|
+
|
|
626
|
+
### `getIntlayer(dictionaryKey, locale?, plugins?)`
|
|
627
|
+
|
|
628
|
+
Recupera e trasforma il contenuto da un dizionario:
|
|
629
|
+
|
|
630
|
+
```ts
|
|
631
|
+
import { getIntlayer } from "intlayer";
|
|
632
|
+
|
|
633
|
+
const content = getIntlayer("common", "fr");
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
## Note
|
|
637
|
+
|
|
638
|
+
- Tutti gli helper accettano input `string`; vengono convertiti internamente a numeri o date.
|
|
639
|
+
- La locale predefinita è quella configurata in `internationalization.defaultLocale` se non fornita.
|
|
640
|
+
- Questi utility sono wrapper sottili; per la formattazione avanzata, passa attraverso le opzioni standard `Intl`.
|
package/docs/it/intlayer_CMS.md
CHANGED
|
@@ -253,28 +253,61 @@ La Sincronizzazione Live consente alla tua app di riflettere le modifiche ai con
|
|
|
253
253
|
|
|
254
254
|
Per la guida completa alla configurazione (attivazione, avvio del server Live Sync, flusso di lavoro di sviluppo locale e limitazioni), consulta la [documentazione di Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/live-sync.md).
|
|
255
255
|
|
|
256
|
-
|
|
256
|
+
### Installazione
|
|
257
257
|
|
|
258
|
-
|
|
258
|
+
```bash packageManager="npm"
|
|
259
|
+
npm install @intlayer/api
|
|
260
|
+
```
|
|
259
261
|
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
+
```bash packageManager="yarn"
|
|
263
|
+
yarn add @intlayer/api
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
```bash packageManager="pnpm"
|
|
267
|
+
pnpm add @intlayer/api
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
```bash packageManager="bun"
|
|
271
|
+
bun add @intlayer/api
|
|
262
272
|
```
|
|
263
273
|
|
|
264
|
-
|
|
274
|
+
### Come funziona: authenticator + endpoints
|
|
275
|
+
|
|
276
|
+
L'SDK è suddiviso in **due import separati** di proposito, per mantenere il bundle piccolo:
|
|
277
|
+
|
|
278
|
+
1. `createIntlayerCMS` — crea un leggero **authenticator**. Contiene solo le credenziali e il token di accesso gestito; non conosce nulla di alcun dominio specifico.
|
|
279
|
+
2. `dictionaryEndpoint`, `projectEndpoint`, … — **endpoint binder** per dominio, ognuno importato dal suo sottopercorso (`@intlayer/api/dictionary`, `@intlayer/api/project`, …). Passi l'authenticator all'endpoint di cui hai bisogno.
|
|
265
280
|
|
|
266
|
-
|
|
281
|
+
Poiché ogni endpoint è importato separatamente, il tuo bundle include solo i domini che effettivamente utilizzi — importare `dictionaryEndpoint` non porta mai con sé il client del progetto, dell'AI o di alcun altro dominio.
|
|
267
282
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
| **app** (dashboard) | `3000` | Interfaccia CMS TanStack Start |
|
|
271
|
-
| **backend** (API) | `3100` | API REST Fastify |
|
|
272
|
-
| **MongoDB 7** | interno | Database principale (replica set a nodo singolo) |
|
|
273
|
-
| **Redis 7** | interno | Code di lavori e caching |
|
|
274
|
-
| **MinIO** | `9000` (S3), `9001` (console) | Archiviazione di oggetti compatibile S3 |
|
|
275
|
-
| **Mailpit** | `1025` (SMTP), `8025` (interfaccia web) | Sink locale per e-mail transazionali |
|
|
283
|
+
```typescript fileName="cms.ts" codeFormat="typescript"
|
|
284
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
276
285
|
|
|
277
|
-
|
|
286
|
+
// La configurazione è opzionale: quando omessa, le credenziali vengono lette da
|
|
287
|
+
// `@intlayer/config/built`, che risolve le variabili di ambiente
|
|
288
|
+
// INTLAYER_CLIENT_ID e INTLAYER_CLIENT_SECRET.
|
|
289
|
+
export const cmsAuthenticator = createIntlayerCMS();
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
> [!WARNING]
|
|
293
|
+
> Le credenziali CMS (`clientId` / `clientSecret`) concedono **accesso in scrittura** ai tuoi contenuti. Crea sempre l'authenticator sul **lato server** (server actions, route handlers, script, CI). Non importarlo mai nel codice lato client o esporre le tue credenziali al browser.
|
|
294
|
+
|
|
295
|
+
Se preferisci non fare affidamento sulla configurazione al momento della build, passa le credenziali esplicitamente:
|
|
296
|
+
|
|
297
|
+
```typescript fileName="cms.ts" codeFormat="typescript"
|
|
298
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
299
|
+
|
|
300
|
+
export const cmsAuthenticator = createIntlayerCMS({
|
|
301
|
+
editor: {
|
|
302
|
+
clientId: process.env.INTLAYER_CLIENT_ID,
|
|
303
|
+
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
304
|
+
// Opzionale, per backend self-hosted:
|
|
305
|
+
// backendURL: process.env.INTLAYER_BACKEND_URL,
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
> Ottieni le tue credenziali creando una nuova chiave di accesso in [Intlayer Dashboard - Projects](https://app.intlayer.org/projects).
|
|
278
311
|
|
|
279
312
|
### Connettere il tuo progetto a un'istanza self-hosted
|
|
280
313
|
|
|
@@ -366,6 +399,24 @@ Per un riferimento completo di tutte le variabili d'ambiente disponibili e le op
|
|
|
366
399
|
|
|
367
400
|
---
|
|
368
401
|
|
|
402
|
+
## Live sync
|
|
403
|
+
|
|
404
|
+
Live Sync consente all'app di riflettere i cambiamenti del contenuto CMS in fase di runtime — nessuna ricostruzione o ridistribuzione richiesta. Quando abilitato, gli aggiornamenti vengono trasmessi a un server Live Sync che aggiorna i dizionari letti dall'applicazione.
|
|
405
|
+
|
|
406
|
+
Per la guida di configurazione completa (configurazione, avvio del server Live Sync, workflow di sviluppo locale e vincoli), consulta la [documentazione Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/live-sync.md).
|
|
407
|
+
|
|
408
|
+
## Self-Hosting
|
|
409
|
+
|
|
410
|
+
Intlayer può funzionare interamente sulla tua infrastruttura. Un singolo comando inizializza l'intero stack (dashboard, API, database, object storage, e email) con Docker Compose:
|
|
411
|
+
|
|
412
|
+
```sh
|
|
413
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
Per la guida di configurazione completa, il riferimento delle variabili di ambiente, le istruzioni di aggiornamento e le procedure di backup/restore, consulta la [Guida Self-Hosting](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/self_hosting.md).
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
369
420
|
## Debug
|
|
370
421
|
|
|
371
422
|
Se riscontri problemi con il CMS, verifica quanto segue:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
3
|
updatedAt: 2026-05-31
|
|
4
|
-
title: "Angular
|
|
5
|
-
description: "Niente più i18next. La guida 2026 per creare un'applicazione Angular
|
|
4
|
+
title: "Angular 22 i18n - Guida completa per tradurre la tua applicazione"
|
|
5
|
+
description: "Niente più i18next. La guida 2026 per creare un'applicazione Angular 22 multilingue (i18n). Traduci con agenti AI e ottimizza la dimensione del bundle, SEO e prestazioni."
|
|
6
6
|
keywords:
|
|
7
7
|
- Internazionalizzazione
|
|
8
8
|
- Documentazione
|
|
@@ -13,8 +13,8 @@ slugs:
|
|
|
13
13
|
- doc
|
|
14
14
|
- environment
|
|
15
15
|
- angular
|
|
16
|
-
applicationTemplate: https://github.com/aymericzip/intlayer-angular-
|
|
17
|
-
applicationShowcase: https://intlayer-angular-
|
|
16
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-angular-22-template
|
|
17
|
+
applicationShowcase: https://intlayer-angular-22-template.vercel.app/
|
|
18
18
|
history:
|
|
19
19
|
- version: 8.9.0
|
|
20
20
|
date: 2026-05-04
|
|
@@ -31,7 +31,7 @@ history:
|
|
|
31
31
|
author: aymericzip
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
-
# Traduci il tuo sito Angular
|
|
34
|
+
# Traduci il tuo sito Angular 22 (Vite) utilizzando Intlayer | Internazionalizzazione (i18n)
|
|
35
35
|
|
|
36
36
|
## Sommario
|
|
37
37
|
|
|
@@ -94,7 +94,7 @@ Più di una semplice soluzione i18n, Intlayer fornisce un **[editor visivo](http
|
|
|
94
94
|
<Tab label="Codice" value="code">
|
|
95
95
|
|
|
96
96
|
<iframe
|
|
97
|
-
src="https://ide.intlayer.org/aymericzip/intlayer-angular-
|
|
97
|
+
src="https://ide.intlayer.org/aymericzip/intlayer-angular-22-template?file=intlayer.config.ts"
|
|
98
98
|
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
99
99
|
title="Demo CodeSandbox - Come internazionalizzare la tua applicazione usando Intlayer"
|
|
100
100
|
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
@@ -105,7 +105,7 @@ Più di una semplice soluzione i18n, Intlayer fornisce un **[editor visivo](http
|
|
|
105
105
|
<Tab label="Demo" value="demo">
|
|
106
106
|
|
|
107
107
|
<iframe
|
|
108
|
-
src="https://intlayer-angular-
|
|
108
|
+
src="https://intlayer-angular-22-template.vercel.app/"
|
|
109
109
|
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
110
110
|
title="Demo - intlayer-angular-template"
|
|
111
111
|
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
@@ -115,7 +115,7 @@ Più di una semplice soluzione i18n, Intlayer fornisce un **[editor visivo](http
|
|
|
115
115
|
</Tab>
|
|
116
116
|
</Tabs>
|
|
117
117
|
|
|
118
|
-
Vedi il [Modello di Applicazione](https://github.com/aymericzip/intlayer-angular-
|
|
118
|
+
Vedi il [Modello di Applicazione](https://github.com/aymericzip/intlayer-angular-22-template) su GitHub.
|
|
119
119
|
|
|
120
120
|
<Steps>
|
|
121
121
|
|
|
@@ -203,7 +203,7 @@ export default config;
|
|
|
203
203
|
|
|
204
204
|
<Step number={3} title="Integrare Intlayer nella tua Configurazione Angular">
|
|
205
205
|
|
|
206
|
-
Per integrare Intlayer con la CLI di Angular, devi utilizzare un costruttore (builder) personalizzato. Questa guida presuppone che tu stia utilizzando Vite/esbuild (predefinito per i progetti Angular
|
|
206
|
+
Per integrare Intlayer con la CLI di Angular, devi utilizzare un costruttore (builder) personalizzato. Questa guida presuppone che tu stia utilizzando Vite/esbuild (predefinito per i progetti Angular 22).
|
|
207
207
|
|
|
208
208
|
Per prima cosa, modifica il tuo `angular.json` per utilizzare il costruttore esbuild personalizzato. Aggiorna le configurazioni `build` e `serve`:
|
|
209
209
|
|