@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
|
+
Ahora, crea otro módulo de contenido que use la función `nest` para referenciar el contenido anterior. Puedes referenciar el contenido completo o un valor anidado específico:
|
|
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
|
+
// Referencia el diccionario completo:
|
|
78
|
+
fullNestedContent: nest("key_of_my_first_dictionary"),
|
|
79
|
+
// Referencia un valor anidado específico:
|
|
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
|
+
Como segundo parámetro, puedes especificar una ruta a un valor anidado dentro de ese contenido. Cuando no se proporciona ninguna ruta, se devuelve el contenido completo del diccionario referenciado.
|
|
113
|
+
|
|
67
114
|
## Configuración de la Anidación
|
|
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
|
-
## Usando Anidación con React Intlayer
|
|
262
|
-
|
|
263
|
-
Para usar contenido anidado en un componente de React, utiliza el hook `useIntlayer` del paquete `react-intlayer`. Este hook recupera el contenido correcto basado en la clave especificada. Aquí tienes un ejemplo de cómo usarlo:
|
|
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
|
-
Contenido Anidado Completo: {JSON.stringify(fullNestedContent)}
|
|
278
|
-
{/* Salida: {"content": "content", "subContent": {"contentNumber": 0, "contentString": "string"}} */}
|
|
279
|
-
</p>
|
|
280
|
-
<p>
|
|
281
|
-
Valor Anidado Parcial: {partialNestedContent}
|
|
282
|
-
{/* Salida: 0 */}
|
|
283
|
-
</p>
|
|
284
|
-
</div>
|
|
285
|
-
);
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
export default NestComponent;
|
|
289
|
-
```
|
|
290
|
-
|
|
291
308
|
## Recursos Adicionales
|
|
292
309
|
|
|
293
310
|
Para obtener información más detallada sobre la configuración y el uso, consulta los siguientes recursos:
|
package/docs/es/formatters.md
CHANGED
|
@@ -52,34 +52,6 @@ author: aymericzip
|
|
|
52
52
|
|
|
53
53
|
Intlayer proporciona un conjunto de helpers ligeros construidos sobre las APIs nativas de `Intl`, además de un wrapper `Intl` en caché para evitar construir repetidamente formateadores pesados. Estas utilidades son completamente conscientes del locale y pueden usarse desde el paquete principal `intlayer`.
|
|
54
54
|
|
|
55
|
-
### Importar
|
|
56
|
-
|
|
57
|
-
```ts
|
|
58
|
-
import {
|
|
59
|
-
Intl,
|
|
60
|
-
number,
|
|
61
|
-
percentage,
|
|
62
|
-
currency,
|
|
63
|
-
date,
|
|
64
|
-
relativeTime,
|
|
65
|
-
units,
|
|
66
|
-
compact,
|
|
67
|
-
list,
|
|
68
|
-
getLocaleName,
|
|
69
|
-
getLocaleLang,
|
|
70
|
-
getLocaleFromPath,
|
|
71
|
-
getPathWithoutLocale,
|
|
72
|
-
getLocalizedUrl,
|
|
73
|
-
getHTMLTextDir,
|
|
74
|
-
getContent,
|
|
75
|
-
getTranslation,
|
|
76
|
-
getIntlayer,
|
|
77
|
-
getIntlayerAsync,
|
|
78
|
-
} from "intlayer";
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Si usas React, también hay hooks disponibles; consulta `react-intlayer/format`.
|
|
82
|
-
|
|
83
55
|
## Intl en caché
|
|
84
56
|
|
|
85
57
|
El `Intl` exportado es un wrapper ligero y en caché alrededor del `Intl` global. Memoiza instancias de `NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, `DisplayNames`, `Collator` y `PluralRules`, lo que evita reconstruir repetidamente el mismo formateador.
|
|
@@ -116,9 +88,7 @@ pluralRules.select(1); // "one"
|
|
|
116
88
|
pluralRules.select(2); // "other"
|
|
117
89
|
```
|
|
118
90
|
|
|
119
|
-
##
|
|
120
|
-
|
|
121
|
-
Más allá de los ayudantes para formateadores, también puedes usar directamente el wrapper cacheado de Intl para otras funcionalidades de Intl:
|
|
91
|
+
## Formateadores de React
|
|
122
92
|
|
|
123
93
|
### `Intl.DisplayNames`
|
|
124
94
|
|
|
@@ -134,6 +104,22 @@ const regionNames = new Intl.DisplayNames("fr", { type: "region" });
|
|
|
134
104
|
regionNames.of("US"); // "Estados Unidos"
|
|
135
105
|
```
|
|
136
106
|
|
|
107
|
+
### Hooks Disponibles
|
|
108
|
+
|
|
109
|
+
Todos los hooks utilizan automáticamente la configuración regional de `IntlayerProvider` o `IntlayerServerProvider`.
|
|
110
|
+
|
|
111
|
+
| Hook | Description | Example Output |
|
|
112
|
+
| ------------------- | ----------------------------------------------------------- | ----------------------------- |
|
|
113
|
+
| `useNumber()` | Formatear números con agrupación | `"123,456.789"` |
|
|
114
|
+
| `useCurrency()` | Formatear valores de moneda | `"€1,234.50"` |
|
|
115
|
+
| `usePercentage()` | Formatear porcentajes | `"25%"` |
|
|
116
|
+
| `useDate()` | Formatear fechas y horas | `"Aug 2, 2025"` |
|
|
117
|
+
| `useRelativeTime()` | Formatear tiempo relativo | `"in 3 days"` |
|
|
118
|
+
| `useUnit()` | Formatear valores con unidades | `"5 kilometers"` |
|
|
119
|
+
| `useCompact()` | Formatear números en notación compacta | `"1.2K"` |
|
|
120
|
+
| `useList()` | Formatear arrays como listas | `"apple, banana, and orange"` |
|
|
121
|
+
| `useIntl()` | Obtener objeto `Intl` vinculado a la configuración regional | Full `Intl` API access |
|
|
122
|
+
|
|
137
123
|
### `Intl.Collator`
|
|
138
124
|
|
|
139
125
|
Para la comparación y ordenación de cadenas conscientes del locale:
|
|
@@ -273,166 +259,146 @@ getLocaleFromPath("https://example.com/es/about"); // "es"
|
|
|
273
259
|
|
|
274
260
|
### Funciones de Formato
|
|
275
261
|
|
|
276
|
-
|
|
262
|
+
#### `number(value, options?)`
|
|
277
263
|
|
|
278
|
-
|
|
264
|
+
Formatea un valor numérico usando agrupación y decimales conscientes de la configuración regional.
|
|
279
265
|
|
|
280
|
-
|
|
281
|
-
|
|
266
|
+
- **value**: `number | string`
|
|
267
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
282
268
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
269
|
+
```ts
|
|
270
|
+
number(123456.789); // "123,456.789" (en en-US)
|
|
271
|
+
number("1000000", { locale: "fr" }); // "1 000 000"
|
|
272
|
+
number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
|
|
286
273
|
```
|
|
287
274
|
|
|
288
|
-
|
|
289
|
-
- **locales**: Matriz opcional de locales soportados (por defecto, los locales configurados)
|
|
290
|
-
- **returns**: La URL sin el segmento de locale
|
|
275
|
+
#### `percentage(value, options?)`
|
|
291
276
|
|
|
292
|
-
|
|
277
|
+
Formatea un número como una cadena de porcentaje. Los valores mayores que 1 se normalizan (por ejemplo, `25` → `25%`, `0.25` → `25%`).
|
|
293
278
|
|
|
294
|
-
|
|
279
|
+
- **value**: `number | string`
|
|
280
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
295
281
|
|
|
296
282
|
```ts
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
getLocalizedUrl("/about", "en", ["en", "fr"], "en", false); // "/about"
|
|
301
|
-
getLocalizedUrl("https://example.com/about", "fr", ["en", "fr"], "en", true); // "https://example.com/fr/about"
|
|
283
|
+
percentage(0.25); // "25%"
|
|
284
|
+
percentage(25); // "25%"
|
|
285
|
+
percentage(0.237, { minimumFractionDigits: 1 }); // "23.7%"
|
|
302
286
|
```
|
|
303
287
|
|
|
304
|
-
|
|
305
|
-
- **currentLocale**: El locale actual
|
|
306
|
-
- **locales**: Matriz opcional de locales soportados (por defecto, los locales configurados)
|
|
307
|
-
- **defaultLocale**: Locale predeterminado opcional (por defecto, el locale predeterminado configurado)
|
|
308
|
-
- **prefixDefault**: Indica si se debe prefijar el locale predeterminado (por defecto, el valor configurado)
|
|
288
|
+
#### `currency(value, options?)`
|
|
309
289
|
|
|
310
|
-
|
|
290
|
+
Formatea un valor como moneda localizada. Por defecto es `USD`.
|
|
311
291
|
|
|
312
|
-
|
|
292
|
+
- **value**: `number | string`
|
|
293
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
294
|
+
- Common: `currency`, `currencyDisplay` (`"symbol" | "code" | "name"`)
|
|
313
295
|
|
|
314
296
|
```ts
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
getHTMLTextDir("en-US"); // "ltr"
|
|
318
|
-
getHTMLTextDir("ar"); // "rtl"
|
|
319
|
-
getHTMLTextDir("he"); // "rtl"
|
|
297
|
+
currency(1234.5, { currency: "EUR" }); // "€1,234.50"
|
|
298
|
+
currency("5000", { locale: "fr", currency: "CAD", currencyDisplay: "code" }); // "5 000,00 CAD"
|
|
320
299
|
```
|
|
321
300
|
|
|
322
|
-
|
|
323
|
-
|
|
301
|
+
#### `date(date, optionsOrPreset?)`
|
|
302
|
+
|
|
303
|
+
Formatea un valor de fecha/hora.
|
|
304
|
+
|
|
305
|
+
- **date**: `Date | string | number`
|
|
306
|
+
- **optionsOrPreset**: `Intl.DateTimeFormatOptions & { locale?: LocalesValues }` o preset: `"short" | "long" | "dateOnly" | "timeOnly" | "full"`
|
|
307
|
+
|
|
308
|
+
```ts
|
|
309
|
+
date(new Date(), "short"); // p. ej., "08/02/25, 14:30"
|
|
310
|
+
date("2025-08-02T14:30:00Z", { locale: "fr", month: "long", day: "numeric" }); // "2 août"
|
|
311
|
+
```
|
|
324
312
|
|
|
325
|
-
|
|
313
|
+
#### `relativeTime(from, to?, options?)`
|
|
326
314
|
|
|
327
|
-
|
|
315
|
+
Formatea el tiempo relativo entre dos instantes.
|
|
328
316
|
|
|
329
|
-
|
|
317
|
+
- **from**: `Date | string | number`
|
|
318
|
+
- **to**: `Date | string | number` (por defecto `new Date()`)
|
|
319
|
+
- **options**: `{ locale?, unit?, numeric?, style? }`
|
|
330
320
|
|
|
331
321
|
```ts
|
|
332
|
-
|
|
322
|
+
const now = new Date();
|
|
323
|
+
const in3Days = new Date(now.getTime() + 3 * 864e5);
|
|
324
|
+
relativeTime(now, in3Days, { unit: "day" }); // "in 3 days"
|
|
333
325
|
|
|
334
|
-
const
|
|
335
|
-
|
|
336
|
-
{ dictionaryKey: "common", dictionaryPath: "/path/to/dict" },
|
|
337
|
-
"fr"
|
|
338
|
-
);
|
|
326
|
+
const twoHoursAgo = new Date(now.getTime() - 2 * 3600e3);
|
|
327
|
+
relativeTime(now, twoHoursAgo, { unit: "hour", numeric: "auto" }); // "2 hours ago"
|
|
339
328
|
```
|
|
340
329
|
|
|
341
|
-
|
|
342
|
-
- **nodeProps**: Propiedades para el contexto de transformación
|
|
343
|
-
- **locale**: Locale opcional (por defecto, el locale predeterminado configurado)
|
|
330
|
+
#### `units(value, options?)`
|
|
344
331
|
|
|
345
|
-
|
|
332
|
+
Formatea un valor numérico con una unidad.
|
|
346
333
|
|
|
347
|
-
|
|
334
|
+
- **value**: `number | string`
|
|
335
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
336
|
+
- Common: `unit` (e.g., `"kilometer"`, `"byte"`), `unitDisplay` (`"short" | "narrow" | "long"`)
|
|
348
337
|
|
|
349
338
|
```ts
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
const content = getTranslation(
|
|
353
|
-
{
|
|
354
|
-
en: "Hello",
|
|
355
|
-
fr: "Bonjour",
|
|
356
|
-
de: "Hallo",
|
|
357
|
-
},
|
|
358
|
-
"fr",
|
|
359
|
-
true
|
|
360
|
-
); // "Bonjour"
|
|
339
|
+
units(5, { unit: "kilometer", unitDisplay: "long", locale: "en-GB" }); // "5 kilometers"
|
|
340
|
+
units(1024, { unit: "byte", unitDisplay: "narrow" }); // "1,024B"
|
|
361
341
|
```
|
|
362
342
|
|
|
363
|
-
|
|
364
|
-
- **locale**: Locale objetivo (por defecto el locale predeterminado configurado)
|
|
365
|
-
- **fallback**: Indica si se debe usar el locale predeterminado como respaldo (por defecto es true)
|
|
343
|
+
#### `compact(value, options?)`
|
|
366
344
|
|
|
367
|
-
|
|
345
|
+
Formatea un número usando notación compacta.
|
|
368
346
|
|
|
369
|
-
|
|
347
|
+
- **value**: `number | string`
|
|
348
|
+
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
370
349
|
|
|
371
350
|
```ts
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
const content = getIntlayer("common", "fr");
|
|
375
|
-
const nestedContent = getIntlayer("common", "fr", customPlugins);
|
|
351
|
+
compact(1200); // "1.2K"
|
|
352
|
+
compact("1000000", { locale: "fr", compactDisplay: "long" }); // "1 million"
|
|
376
353
|
```
|
|
377
354
|
|
|
378
|
-
|
|
379
|
-
- **locale**: Locale opcional (por defecto es el locale predeterminado configurado)
|
|
380
|
-
- **plugins**: Array opcional de plugins personalizados para transformación
|
|
355
|
+
#### `list(values, options?)`
|
|
381
356
|
|
|
382
|
-
|
|
357
|
+
Formatea un array en una cadena de lista localizada.
|
|
383
358
|
|
|
384
|
-
|
|
359
|
+
- **values**: `(string | number)[]`
|
|
360
|
+
- **options**: `Intl.ListFormatOptions & { locale?: LocalesValues }`
|
|
361
|
+
- Common: `type` (`"conjunction" | "disjunction" | "unit"`), `style` (`"long" | "short" | "narrow"`)
|
|
385
362
|
|
|
386
363
|
```ts
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
const content = await getIntlayerAsync("common", "fr");
|
|
364
|
+
list(["apple", "banana", "orange"]); // "apple, banana, and orange"
|
|
365
|
+
list(["red", "green", "blue"], { locale: "fr", type: "disjunction" }); // "rouge, vert ou bleu"
|
|
390
366
|
```
|
|
391
367
|
|
|
392
|
-
- **dictionaryKey**: La clave del diccionario a recuperar
|
|
393
|
-
- **locale**: Locale opcional (por defecto es el locale predeterminado configurado)
|
|
394
|
-
- **plugins**: Array opcional de plugins personalizados para transformación
|
|
395
|
-
|
|
396
368
|
## Formateadores
|
|
397
369
|
|
|
398
370
|
Todos los helpers a continuación son exportados desde `intlayer`.
|
|
399
371
|
|
|
400
372
|
### Características Intl Adicionales
|
|
401
373
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
Formatea un valor numérico utilizando agrupación y decimales sensibles al locale.
|
|
405
|
-
|
|
406
|
-
- **value**: `number | string`
|
|
407
|
-
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
374
|
+
#### `Intl.DisplayNames`
|
|
408
375
|
|
|
409
|
-
|
|
376
|
+
Para nombres localizados de idiomas, regiones, monedas y escrituras:
|
|
410
377
|
|
|
411
378
|
```ts
|
|
412
|
-
import {
|
|
413
|
-
|
|
414
|
-
number(123456.789); // "123,456.789" (en en-US)
|
|
415
|
-
number("1000000", { locale: "fr" }); // "1 000 000"
|
|
416
|
-
number(1234.5, { minimumFractionDigits: 2 }); // "1,234.50"
|
|
417
|
-
```
|
|
418
|
-
|
|
419
|
-
### `percentage(value, options?)`
|
|
379
|
+
import { Intl } from "intlayer";
|
|
420
380
|
|
|
421
|
-
|
|
381
|
+
const languageNames = new Intl.DisplayNames("en", { type: "language" });
|
|
382
|
+
languageNames.of("fr"); // "French"
|
|
422
383
|
|
|
423
|
-
|
|
384
|
+
const regionNames = new Intl.DisplayNames("fr", { type: "region" });
|
|
385
|
+
regionNames.of("US"); // "États-Unis"
|
|
386
|
+
```
|
|
424
387
|
|
|
425
|
-
|
|
426
|
-
- **options**: `Intl.NumberFormatOptions & { locale?: LocalesValues }`
|
|
388
|
+
#### `Intl.Collator`
|
|
427
389
|
|
|
428
|
-
|
|
390
|
+
Para comparación y ordenamiento de cadenas sensibles a la configuración regional:
|
|
429
391
|
|
|
430
392
|
```ts
|
|
431
|
-
import {
|
|
393
|
+
import { Intl } from "intlayer";
|
|
432
394
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
395
|
+
const collator = new Intl.Collator("de", {
|
|
396
|
+
sensitivity: "base",
|
|
397
|
+
numeric: true,
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
const words = ["äpfel", "zebra", "100", "20"];
|
|
401
|
+
words.sort(collator.compare); // ["20", "100", "äpfel", "zebra"]
|
|
436
402
|
```
|
|
437
403
|
|
|
438
404
|
#### `Intl.PluralRules`
|
|
@@ -564,42 +530,6 @@ list([1, 2, 3], { type: "unit" }); // "1, 2, 3"
|
|
|
564
530
|
|
|
565
531
|
## Utilidades de Manejo de Contenido
|
|
566
532
|
|
|
567
|
-
## Notas
|
|
568
|
-
|
|
569
|
-
- Todos los ayudantes aceptan entradas de tipo `string`; internamente se convierten a números o fechas.
|
|
570
|
-
- El locale por defecto es el configurado en `internationalization.defaultLocale` si no se proporciona.
|
|
571
|
-
- Estas utilidades son envoltorios ligeros; para un formateo avanzado, pase las opciones estándar de `Intl`.
|
|
572
|
-
|
|
573
|
-
## Puntos de entrada y re-exportaciones (`@index.ts`)
|
|
574
|
-
|
|
575
|
-
Los formateadores residen en el paquete core y se re-exportan desde paquetes de nivel superior para mantener las importaciones ergonómicas en diferentes entornos de ejecución:
|
|
576
|
-
|
|
577
|
-
Ejemplos:
|
|
578
|
-
|
|
579
|
-
```ts
|
|
580
|
-
// Código de la aplicación (recomendado)
|
|
581
|
-
import {
|
|
582
|
-
number,
|
|
583
|
-
currency,
|
|
584
|
-
date,
|
|
585
|
-
relativeTime,
|
|
586
|
-
units,
|
|
587
|
-
compact,
|
|
588
|
-
list,
|
|
589
|
-
Intl,
|
|
590
|
-
getLocaleName,
|
|
591
|
-
getLocaleLang,
|
|
592
|
-
getLocaleFromPath,
|
|
593
|
-
getPathWithoutLocale,
|
|
594
|
-
getLocalizedUrl,
|
|
595
|
-
getHTMLTextDir,
|
|
596
|
-
getContent,
|
|
597
|
-
getTranslation,
|
|
598
|
-
getIntlayer,
|
|
599
|
-
getIntlayerAsync,
|
|
600
|
-
} from "intlayer";
|
|
601
|
-
```
|
|
602
|
-
|
|
603
533
|
### React
|
|
604
534
|
|
|
605
535
|
Componentes cliente:
|
|
@@ -698,3 +628,19 @@ import {
|
|
|
698
628
|
```
|
|
699
629
|
|
|
700
630
|
> Esos composables considerarán la configuración regional del `IntlayerProvider` inyectado.
|
|
631
|
+
|
|
632
|
+
### `getIntlayer(dictionaryKey, locale?, plugins?)`
|
|
633
|
+
|
|
634
|
+
Recupera y transforma contenido de un diccionario:
|
|
635
|
+
|
|
636
|
+
```ts
|
|
637
|
+
import { getIntlayer } from "intlayer";
|
|
638
|
+
|
|
639
|
+
const content = getIntlayer("common", "fr");
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
## Notas
|
|
643
|
+
|
|
644
|
+
- Todos los helpers aceptan entradas `string`; internamente se convierten a números o fechas.
|
|
645
|
+
- La configuración regional por defecto es tu `internationalization.defaultLocale` si no se proporciona.
|
|
646
|
+
- Estas utilidades son wrappers delgados; para formateo avanzado, pasa las opciones estándar de `Intl`.
|
package/docs/es/intlayer_CMS.md
CHANGED
|
@@ -253,16 +253,6 @@ La sincronización en vivo permite que tu aplicación refleje los cambios de con
|
|
|
253
253
|
|
|
254
254
|
Para la guía de configuración completa (activación, inicio del servidor Live Sync, flujo de trabajo de desarrollo local y restricciones), consulta la [documentación de Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/live-sync.md).
|
|
255
255
|
|
|
256
|
-
## Auto-alojamiento
|
|
257
|
-
|
|
258
|
-
Intlayer puede ejecutarse completamente en tu propia infraestructura — no se requiere cuenta de Intlayer Cloud. Un solo comando arranca toda la pila (panel de control, API, base de datos, almacenamiento de objetos y correo electrónico) mediante Docker Compose:
|
|
259
|
-
|
|
260
|
-
```sh
|
|
261
|
-
curl -fsSL https://intlayer.org/install.sh | sh
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
Esto descarga un `docker-compose.yml` y un `.env`, genera automáticamente los secretos necesarios (`BETTER_AUTH_SECRET`, credenciales de MinIO) y arranca todos los contenedores con `docker compose up -d`. Volver a ejecutar el mismo comando en una instalación existente realiza una actualización progresiva sin pérdida de datos.
|
|
265
|
-
|
|
266
256
|
### Servicios iniciados
|
|
267
257
|
|
|
268
258
|
| Servicio | Puerto(s) | Propósito |
|
|
@@ -366,6 +356,41 @@ Para una referencia completa de todas las variables de entorno disponibles y opc
|
|
|
366
356
|
|
|
367
357
|
---
|
|
368
358
|
|
|
359
|
+
### Extrayendo un método único
|
|
360
|
+
|
|
361
|
+
Cada método de endpoint ya está autenticado y es independiente (maneja su propio token), por lo que puedes extraer uno y pasarlo — por ejemplo para inyectarlo como una dependencia:
|
|
362
|
+
|
|
363
|
+
```typescript fileName="push.ts" codeFormat="typescript"
|
|
364
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
365
|
+
import { dictionaryEndpoint } from "@intlayer/api/dictionary";
|
|
366
|
+
|
|
367
|
+
const dictionary = dictionaryEndpoint(createIntlayerCMS());
|
|
368
|
+
|
|
369
|
+
// Ya autenticado — refresca el token automáticamente en cada llamada
|
|
370
|
+
export const pushDictionaries = dictionary.pushDictionaries;
|
|
371
|
+
|
|
372
|
+
// Uso
|
|
373
|
+
await pushDictionaries([{ key: "home", content: { title: "Home" } }]);
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
## Live sync
|
|
377
|
+
|
|
378
|
+
Live Sync permite que tu aplicación refleje los cambios de contenido del CMS en tiempo de ejecución — sin necesidad de reconstruir o redeplegar. Cuando está habilitado, las actualizaciones se transmiten a un servidor Live Sync que actualiza los diccionarios que tu aplicación lee.
|
|
379
|
+
|
|
380
|
+
Para la guía de configuración completa (configuración, iniciar el servidor Live Sync, el flujo de trabajo de desarrollo local y limitaciones), consulta la [documentación de Live Sync](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/live-sync.md).
|
|
381
|
+
|
|
382
|
+
## Auto-hospedaje
|
|
383
|
+
|
|
384
|
+
Intlayer puede ejecutarse completamente en tu propia infraestructura. Una sola línea arranca el stack completo (dashboard, API, base de datos, almacenamiento de objetos y correo electrónico) con Docker Compose:
|
|
385
|
+
|
|
386
|
+
```sh
|
|
387
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
Para la guía de configuración completa, referencia de variables de entorno, instrucciones de actualización y procedimientos de copia de seguridad/restauración, consulta la [Guía de Auto-hospedaje](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/self_hosting.md).
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
369
394
|
## Depuración
|
|
370
395
|
|
|
371
396
|
Si encuentras problemas con el CMS, verifica lo siguiente:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
3
|
updatedAt: 2026-05-31
|
|
4
|
-
title: "Angular
|
|
5
|
-
description: "Sin más i18next. La guía 2026 para crear una aplicación Angular
|
|
4
|
+
title: "Angular 22 i18n - Guía completa para traducir tu aplicación"
|
|
5
|
+
description: "Sin más i18next. La guía 2026 para crear una aplicación Angular 22 multilingüe (i18n). Traduce con agentes de IA y optimiza el tamaño del bundle, SEO y rendimiento."
|
|
6
6
|
keywords:
|
|
7
7
|
- Internacionalización
|
|
8
8
|
- Documentación
|
|
@@ -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
|
-
# Traduce tu sitio Angular
|
|
34
|
+
# Traduce tu sitio Angular 22 (Vite) usando Intlayer | Internacionalización (i18n)
|
|
35
35
|
|
|
36
36
|
## Tabla de Contenidos
|
|
37
37
|
|
|
@@ -94,7 +94,7 @@ Más que una simple solución i18n, Intlayer proporciona un **[editor visual] au
|
|
|
94
94
|
<Tab label="Código" 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 - Cómo Internacionalizar tu aplicación usando Intlayer"
|
|
100
100
|
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
@@ -105,7 +105,7 @@ Más que una simple solución i18n, Intlayer proporciona un **[editor visual] au
|
|
|
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 @@ Más que una simple solución i18n, Intlayer proporciona un **[editor visual] au
|
|
|
115
115
|
</Tab>
|
|
116
116
|
</Tabs>
|
|
117
117
|
|
|
118
|
-
Ver la [Plantilla de Aplicación](https://github.com/aymericzip/intlayer-angular-
|
|
118
|
+
Ver la [Plantilla de Aplicación](https://github.com/aymericzip/intlayer-angular-22-template) en GitHub.
|
|
119
119
|
|
|
120
120
|
<Steps>
|
|
121
121
|
|
|
@@ -203,7 +203,7 @@ export default config;
|
|
|
203
203
|
|
|
204
204
|
<Step number={3} title="Integrar Intlayer en tu Configuración Angular">
|
|
205
205
|
|
|
206
|
-
Para integrar Intlayer con la CLI de Angular, necesitas usar un constructor (builder) personalizado. Esta guía asume que estás usando Vite/esbuild (por defecto para proyectos Angular
|
|
206
|
+
Para integrar Intlayer con la CLI de Angular, necesitas usar un constructor (builder) personalizado. Esta guía asume que estás usando Vite/esbuild (por defecto para proyectos Angular 22).
|
|
207
207
|
|
|
208
208
|
Primero, modifica tu `angular.json` para usar el constructor esbuild personalizado. Actualiza las configuraciones `build` y `serve`:
|
|
209
209
|
|
|
@@ -30,34 +30,7 @@ history:
|
|
|
30
30
|
author: aymericzip
|
|
31
31
|
---
|
|
32
32
|
|
|
33
|
-
# Traduce tu Next.js 14
|
|
34
|
-
|
|
35
|
-
<Tabs defaultTab="code">
|
|
36
|
-
<Tab label="Código" value="code">
|
|
37
|
-
|
|
38
|
-
<iframe
|
|
39
|
-
src="https://ide.intlayer.org/aymericzip/intlayer-next-14-template?file=intlayer.config.ts"
|
|
40
|
-
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
41
|
-
title="Demo CodeSandbox - Intlayer"
|
|
42
|
-
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
43
|
-
loading="lazy"
|
|
44
|
-
/>
|
|
45
|
-
|
|
46
|
-
</Tab>
|
|
47
|
-
<Tab label="Demo" value="demo">
|
|
48
|
-
|
|
49
|
-
<iframe
|
|
50
|
-
src="https://intlayer-next-14-template.vercel.app"
|
|
51
|
-
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
52
|
-
title="Demo - intlayer-next-14-template"
|
|
53
|
-
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
54
|
-
loading="lazy"
|
|
55
|
-
/>
|
|
56
|
-
|
|
57
|
-
</Tab>
|
|
58
|
-
</Tabs>
|
|
59
|
-
|
|
60
|
-
Consulta la [Plantilla de Aplicación](https://github.com/aymericzip/intlayer-next-14-template) en GitHub.
|
|
33
|
+
# Traduce tu sitio web Next.js 14 y App Router usando Intlayer | Internacionalización (i18n)
|
|
61
34
|
|
|
62
35
|
## Tabla de Contenidos
|
|
63
36
|
|