@intlayer/docs 5.5.11 → 5.6.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/intlayer_with_next-intl.md +0 -1
- package/blog/ar/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ar/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ar/what_is_internationalization.md +2 -2
- package/blog/de/intlayer_with_next-intl.md +0 -1
- package/blog/de/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/de/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/de/what_is_internationalization.md +2 -2
- package/blog/en/intlayer_with_next-intl.md +0 -1
- package/blog/en/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/en/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/en/what_is_internationalization.md +2 -2
- package/blog/en-GB/intlayer_with_next-intl.md +0 -1
- package/blog/en-GB/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/en-GB/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/en-GB/what_is_internationalization.md +2 -2
- package/blog/es/intlayer_with_next-intl.md +0 -1
- package/blog/es/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/es/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/es/what_is_internationalization.md +2 -2
- package/blog/fr/intlayer_with_next-intl.md +0 -1
- package/blog/fr/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/fr/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/fr/what_is_internationalization.md +2 -2
- package/blog/hi/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/hi/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/hi/what_is_internationalization.md +2 -2
- package/blog/it/intlayer_with_next-intl.md +0 -1
- package/blog/it/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/it/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/it/what_is_internationalization.md +2 -2
- package/blog/ja/intlayer_with_next-intl.md +0 -1
- package/blog/ja/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ja/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ja/what_is_internationalization.md +2 -2
- package/blog/ko/intlayer_with_next-intl.md +0 -1
- package/blog/ko/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ko/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/pt/intlayer_with_next-intl.md +0 -1
- package/blog/pt/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/pt/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/pt/what_is_internationalization.md +2 -2
- package/blog/ru/intlayer_with_next-intl.md +0 -1
- package/blog/ru/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/ru/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/ru/what_is_internationalization.md +2 -2
- package/blog/zh/intlayer_with_next-intl.md +0 -1
- package/blog/zh/list_i18n_technologies/CMS/wordpress.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/angular.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/flutter.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/react-native.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/react.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/svelte.md +1 -1
- package/blog/zh/list_i18n_technologies/frameworks/vue.md +1 -1
- package/blog/zh/what_is_internationalization.md +2 -2
- package/dist/cjs/blog.cjs +2 -2
- package/dist/cjs/blog.cjs.map +1 -1
- package/dist/cjs/common.cjs +17 -6
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/doc.cjs +2 -2
- package/dist/cjs/doc.cjs.map +1 -1
- package/dist/cjs/frequentQuestions.cjs +2 -2
- package/dist/cjs/frequentQuestions.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +1152 -252
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +3778 -1124
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +794 -161
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +32 -31
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/cjs/legal.cjs +2 -2
- package/dist/cjs/legal.cjs.map +1 -1
- package/dist/esm/blog.mjs +2 -2
- package/dist/esm/blog.mjs.map +1 -1
- package/dist/esm/common.mjs +17 -6
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/doc.mjs +2 -2
- package/dist/esm/doc.mjs.map +1 -1
- package/dist/esm/frequentQuestions.mjs +2 -2
- package/dist/esm/frequentQuestions.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +1151 -252
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +3777 -1124
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +793 -161
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +31 -31
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/esm/legal.mjs +2 -2
- package/dist/esm/legal.mjs.map +1 -1
- package/dist/types/blog.d.ts +2 -2
- package/dist/types/blog.d.ts.map +1 -1
- package/dist/types/common.d.ts +5 -2
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/doc.d.ts +2 -2
- package/dist/types/doc.d.ts.map +1 -1
- package/dist/types/frequentQuestions.d.ts +2 -2
- package/dist/types/frequentQuestions.d.ts.map +1 -1
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts +1 -0
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/dist/types/legal.d.ts +2 -2
- package/dist/types/legal.d.ts.map +1 -1
- package/docs/ar/intlayer_CMS.md +1 -0
- package/docs/ar/intlayer_cli.md +292 -177
- package/docs/ar/intlayer_visual_editor.md +1 -0
- package/docs/ar/intlayer_with_angular.md +1 -0
- package/docs/ar/intlayer_with_create_react_app.md +1 -0
- package/docs/ar/intlayer_with_lynx+react.md +1 -0
- package/docs/ar/intlayer_with_nextjs_14.md +1 -0
- package/docs/ar/intlayer_with_nextjs_15.md +3 -1
- package/docs/ar/intlayer_with_nuxt.md +1 -0
- package/docs/ar/intlayer_with_react_native+expo.md +1 -0
- package/docs/ar/intlayer_with_vite+preact.md +4 -3
- package/docs/ar/intlayer_with_vite+react.md +108 -112
- package/docs/ar/intlayer_with_vite+solid.md +4 -3
- package/docs/ar/intlayer_with_vite+svelte.md +4 -3
- package/docs/ar/intlayer_with_vite+vue.md +5 -4
- package/docs/ar/mcp_server.md +126 -92
- package/docs/de/intlayer_CMS.md +1 -0
- package/docs/de/intlayer_cli.md +291 -171
- package/docs/de/intlayer_visual_editor.md +1 -0
- package/docs/de/intlayer_with_angular.md +1 -0
- package/docs/de/intlayer_with_create_react_app.md +1 -0
- package/docs/de/intlayer_with_lynx+react.md +1 -0
- package/docs/de/intlayer_with_nextjs_14.md +1 -0
- package/docs/de/intlayer_with_nextjs_15.md +3 -1
- package/docs/de/intlayer_with_nuxt.md +1 -0
- package/docs/de/intlayer_with_react_native+expo.md +1 -0
- package/docs/de/intlayer_with_vite+preact.md +4 -3
- package/docs/de/intlayer_with_vite+react.md +128 -146
- package/docs/de/intlayer_with_vite+solid.md +4 -3
- package/docs/de/intlayer_with_vite+svelte.md +4 -3
- package/docs/de/intlayer_with_vite+vue.md +5 -4
- package/docs/de/mcp_server.md +116 -112
- package/docs/en/CI_CD.md +3 -1
- package/docs/en/autoFill.md +3 -1
- package/docs/en/configuration.md +7 -3
- package/docs/en/dictionary/condition.md +3 -1
- package/docs/en/dictionary/content_extention_customization.md +3 -1
- package/docs/en/dictionary/enumeration.md +3 -1
- package/docs/en/dictionary/file.md +3 -1
- package/docs/en/dictionary/function_fetching.md +3 -1
- package/docs/en/dictionary/get_started.md +3 -1
- package/docs/en/dictionary/insertion.md +3 -1
- package/docs/en/dictionary/markdown.md +3 -1
- package/docs/en/dictionary/nesting.md +3 -1
- package/docs/en/dictionary/translation.md +3 -1
- package/docs/en/how_works_intlayer.md +3 -1
- package/docs/en/index.md +3 -1
- package/docs/en/interest_of_intlayer.md +3 -1
- package/docs/en/intlayer_CMS.md +4 -1
- package/docs/en/intlayer_cli.md +246 -136
- package/docs/en/intlayer_visual_editor.md +4 -1
- package/docs/en/intlayer_with_angular.md +4 -1
- package/docs/en/intlayer_with_create_react_app.md +4 -1
- package/docs/en/intlayer_with_express.md +3 -1
- package/docs/en/intlayer_with_lynx+react.md +4 -1
- package/docs/en/intlayer_with_nextjs_14.md +7 -1
- package/docs/en/intlayer_with_nextjs_15.md +8 -2
- package/docs/en/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/en/intlayer_with_nuxt.md +4 -1
- package/docs/en/intlayer_with_react_native+expo.md +4 -1
- package/docs/en/intlayer_with_vite+preact.md +9 -4
- package/docs/en/intlayer_with_vite+react.md +18 -10
- package/docs/en/intlayer_with_vite+solid.md +7 -4
- package/docs/en/intlayer_with_vite+svelte.md +7 -4
- package/docs/en/intlayer_with_vite+vue.md +10 -5
- package/docs/en/introduction.md +3 -1
- package/docs/en/mcp_server.md +114 -80
- package/docs/en/packages/@intlayer/api/index.md +3 -1
- package/docs/en/packages/@intlayer/chokidar/index.md +3 -1
- package/docs/en/packages/@intlayer/cli/index.md +3 -1
- package/docs/en/packages/@intlayer/config/index.md +3 -1
- package/docs/en/packages/@intlayer/core/index.md +3 -1
- package/docs/en/packages/@intlayer/design-system/index.md +3 -1
- package/docs/en/packages/@intlayer/dictionary-entry/index.md +3 -1
- package/docs/en/packages/@intlayer/editor/index.md +3 -1
- package/docs/en/packages/@intlayer/editor-react/index.md +3 -1
- package/docs/en/packages/@intlayer/webpack/index.md +3 -1
- package/docs/en/packages/angular-intlayer/index.md +3 -1
- package/docs/en/packages/express-intlayer/index.md +3 -1
- package/docs/en/packages/express-intlayer/t.md +3 -1
- package/docs/en/packages/intlayer/getConfiguration.md +3 -1
- package/docs/en/packages/intlayer/getEnumeration.md +3 -1
- package/docs/en/packages/intlayer/getHTMLTextDir.md +3 -1
- package/docs/en/packages/intlayer/getLocaleLang.md +3 -1
- package/docs/en/packages/intlayer/getLocaleName.md +3 -1
- package/docs/en/packages/intlayer/getLocalizedUrl.md +3 -1
- package/docs/en/packages/intlayer/getMultilingualUrls.md +3 -1
- package/docs/en/packages/intlayer/getPathWithoutLocale.md +3 -1
- package/docs/en/packages/intlayer/getTranslation.md +3 -1
- package/docs/en/packages/intlayer/getTranslationContent.md +3 -1
- package/docs/en/packages/intlayer/index.md +3 -1
- package/docs/en/packages/intlayer-cli/index.md +3 -1
- package/docs/en/packages/intlayer-editor/index.md +3 -1
- package/docs/en/packages/lynx-intlayer/index.md +3 -1
- package/docs/en/packages/next-intlayer/index.md +3 -1
- package/docs/en/packages/next-intlayer/t.md +3 -1
- package/docs/en/packages/next-intlayer/useDictionary.md +3 -1
- package/docs/en/packages/next-intlayer/useIntlayer.md +3 -1
- package/docs/en/packages/next-intlayer/useIntlayerAsync.md +3 -1
- package/docs/en/packages/next-intlayer/useLocale.md +3 -1
- package/docs/en/packages/nuxt-intlayer/index.md +3 -1
- package/docs/en/packages/preact-intlayer/index.md +3 -1
- package/docs/en/packages/react-intlayer/index.md +3 -1
- package/docs/en/packages/react-intlayer/t.md +3 -1
- package/docs/en/packages/react-intlayer/useDictionary.md +3 -1
- package/docs/en/packages/react-intlayer/useIntlayer.md +3 -1
- package/docs/en/packages/react-intlayer/useIntlayerAsync.md +3 -1
- package/docs/en/packages/react-intlayer/useLocale.md +3 -1
- package/docs/en/packages/react-native-intlayer/index.md +3 -1
- package/docs/en/packages/react-scripts-intlayer/index.md +3 -1
- package/docs/en/packages/solid-intlayer/index.md +3 -1
- package/docs/en/packages/svelte-intlayer/index.md +3 -1
- package/docs/en/packages/vite-intlayer/index.md +3 -1
- package/docs/en/packages/vue-intlayer/index.md +3 -1
- package/docs/en/per_locale_file.md +3 -1
- package/docs/en/roadmap.md +5 -2
- package/docs/en/vs_code_extension.md +3 -1
- package/docs/en-GB/intlayer_CMS.md +1 -0
- package/docs/en-GB/intlayer_cli.md +257 -138
- package/docs/en-GB/intlayer_visual_editor.md +1 -0
- package/docs/en-GB/intlayer_with_angular.md +1 -0
- package/docs/en-GB/intlayer_with_create_react_app.md +1 -0
- package/docs/en-GB/intlayer_with_lynx+react.md +1 -0
- package/docs/en-GB/intlayer_with_nextjs_14.md +1 -0
- package/docs/en-GB/intlayer_with_nextjs_15.md +3 -1
- package/docs/en-GB/intlayer_with_nuxt.md +1 -0
- package/docs/en-GB/intlayer_with_react_native+expo.md +1 -0
- package/docs/en-GB/intlayer_with_vite+preact.md +4 -3
- package/docs/en-GB/intlayer_with_vite+react.md +71 -87
- package/docs/en-GB/intlayer_with_vite+solid.md +4 -3
- package/docs/en-GB/intlayer_with_vite+svelte.md +4 -3
- package/docs/en-GB/intlayer_with_vite+vue.md +5 -4
- package/docs/en-GB/mcp_server.md +116 -82
- package/docs/es/intlayer_CMS.md +1 -0
- package/docs/es/intlayer_cli.md +283 -164
- package/docs/es/intlayer_visual_editor.md +1 -0
- package/docs/es/intlayer_with_angular.md +1 -0
- package/docs/es/intlayer_with_create_react_app.md +1 -0
- package/docs/es/intlayer_with_lynx+react.md +1 -0
- package/docs/es/intlayer_with_nextjs_14.md +1 -0
- package/docs/es/intlayer_with_nextjs_15.md +3 -1
- package/docs/es/intlayer_with_nuxt.md +1 -0
- package/docs/es/intlayer_with_react_native+expo.md +1 -0
- package/docs/es/intlayer_with_vite+preact.md +4 -3
- package/docs/es/intlayer_with_vite+react.md +98 -98
- package/docs/es/intlayer_with_vite+solid.md +4 -3
- package/docs/es/intlayer_with_vite+svelte.md +4 -3
- package/docs/es/intlayer_with_vite+vue.md +5 -4
- package/docs/es/mcp_server.md +120 -86
- package/docs/es/vs_code_extension.md +1 -0
- package/docs/fr/intlayer_CMS.md +1 -0
- package/docs/fr/intlayer_cli.md +280 -184
- package/docs/fr/intlayer_visual_editor.md +1 -0
- package/docs/fr/intlayer_with_angular.md +1 -0
- package/docs/fr/intlayer_with_create_react_app.md +1 -0
- package/docs/fr/intlayer_with_lynx+react.md +1 -0
- package/docs/fr/intlayer_with_nextjs_14.md +1 -0
- package/docs/fr/intlayer_with_nextjs_15.md +3 -1
- package/docs/fr/intlayer_with_nuxt.md +1 -0
- package/docs/fr/intlayer_with_react_native+expo.md +1 -0
- package/docs/fr/intlayer_with_vite+preact.md +5 -4
- package/docs/fr/intlayer_with_vite+react.md +80 -69
- package/docs/fr/intlayer_with_vite+solid.md +4 -3
- package/docs/fr/intlayer_with_vite+svelte.md +4 -3
- package/docs/fr/intlayer_with_vite+vue.md +5 -4
- package/docs/fr/mcp_server.md +121 -87
- package/docs/hi/intlayer_CMS.md +1 -0
- package/docs/hi/intlayer_cli.md +295 -174
- package/docs/hi/intlayer_visual_editor.md +1 -0
- package/docs/hi/intlayer_with_angular.md +1 -0
- package/docs/hi/intlayer_with_create_react_app.md +1 -0
- package/docs/hi/intlayer_with_lynx+react.md +1 -0
- package/docs/hi/intlayer_with_nextjs_14.md +1 -0
- package/docs/hi/intlayer_with_nextjs_15.md +3 -1
- package/docs/hi/intlayer_with_nuxt.md +1 -0
- package/docs/hi/intlayer_with_react_native+expo.md +1 -0
- package/docs/hi/intlayer_with_vite+preact.md +4 -3
- package/docs/hi/intlayer_with_vite+react.md +114 -111
- package/docs/hi/intlayer_with_vite+solid.md +4 -3
- package/docs/hi/intlayer_with_vite+svelte.md +4 -3
- package/docs/hi/intlayer_with_vite+vue.md +5 -4
- package/docs/hi/mcp_server.md +118 -84
- package/docs/it/intlayer_CMS.md +1 -0
- package/docs/it/intlayer_cli.md +282 -167
- package/docs/it/intlayer_visual_editor.md +1 -0
- package/docs/it/intlayer_with_angular.md +1 -0
- package/docs/it/intlayer_with_create_react_app.md +1 -0
- package/docs/it/intlayer_with_lynx+react.md +1 -0
- package/docs/it/intlayer_with_nextjs_14.md +1 -0
- package/docs/it/intlayer_with_nextjs_15.md +3 -1
- package/docs/it/intlayer_with_nuxt.md +1 -0
- package/docs/it/intlayer_with_react_native+expo.md +1 -0
- package/docs/it/intlayer_with_vite+preact.md +4 -3
- package/docs/it/intlayer_with_vite+react.md +163 -116
- package/docs/it/intlayer_with_vite+solid.md +4 -3
- package/docs/it/intlayer_with_vite+svelte.md +4 -3
- package/docs/it/intlayer_with_vite+vue.md +4 -4
- package/docs/it/mcp_server.md +120 -86
- package/docs/ja/intlayer_CMS.md +1 -0
- package/docs/ja/intlayer_cli.md +285 -168
- package/docs/ja/intlayer_visual_editor.md +1 -0
- package/docs/ja/intlayer_with_angular.md +1 -0
- package/docs/ja/intlayer_with_create_react_app.md +1 -0
- package/docs/ja/intlayer_with_lynx+react.md +1 -0
- package/docs/ja/intlayer_with_nextjs_14.md +1 -0
- package/docs/ja/intlayer_with_nextjs_15.md +3 -1
- package/docs/ja/intlayer_with_nuxt.md +1 -0
- package/docs/ja/intlayer_with_react_native+expo.md +1 -0
- package/docs/ja/intlayer_with_vite+preact.md +4 -3
- package/docs/ja/intlayer_with_vite+react.md +160 -222
- package/docs/ja/intlayer_with_vite+solid.md +4 -3
- package/docs/ja/intlayer_with_vite+svelte.md +4 -3
- package/docs/ja/intlayer_with_vite+vue.md +5 -4
- package/docs/ja/mcp_server.md +121 -85
- package/docs/ko/intlayer_CMS.md +1 -0
- package/docs/ko/intlayer_cli.md +291 -175
- package/docs/ko/intlayer_visual_editor.md +1 -0
- package/docs/ko/intlayer_with_angular.md +1 -0
- package/docs/ko/intlayer_with_create_react_app.md +1 -0
- package/docs/ko/intlayer_with_lynx+react.md +1 -0
- package/docs/ko/intlayer_with_nextjs_14.md +1 -0
- package/docs/ko/intlayer_with_nextjs_15.md +3 -1
- package/docs/ko/intlayer_with_nuxt.md +1 -0
- package/docs/ko/intlayer_with_react_native+expo.md +1 -0
- package/docs/ko/intlayer_with_vite+preact.md +4 -3
- package/docs/ko/intlayer_with_vite+react.md +123 -152
- package/docs/ko/intlayer_with_vite+solid.md +4 -3
- package/docs/ko/intlayer_with_vite+svelte.md +4 -3
- package/docs/ko/intlayer_with_vite+vue.md +5 -4
- package/docs/ko/mcp_server.md +117 -83
- package/docs/ko/packages/intlayer/getLocalizedUrl.md +1 -23
- package/docs/pt/intlayer_CMS.md +1 -0
- package/docs/pt/intlayer_cli.md +274 -154
- package/docs/pt/intlayer_visual_editor.md +1 -0
- package/docs/pt/intlayer_with_angular.md +1 -0
- package/docs/pt/intlayer_with_create_react_app.md +1 -0
- package/docs/pt/intlayer_with_lynx+react.md +1 -0
- package/docs/pt/intlayer_with_nextjs_14.md +1 -0
- package/docs/pt/intlayer_with_nextjs_15.md +3 -1
- package/docs/pt/intlayer_with_nuxt.md +1 -0
- package/docs/pt/intlayer_with_react_native+expo.md +1 -0
- package/docs/pt/intlayer_with_vite+preact.md +4 -3
- package/docs/pt/intlayer_with_vite+react.md +117 -136
- package/docs/pt/intlayer_with_vite+solid.md +4 -3
- package/docs/pt/intlayer_with_vite+svelte.md +4 -3
- package/docs/pt/intlayer_with_vite+vue.md +4 -4
- package/docs/pt/mcp_server.md +121 -87
- package/docs/ru/intlayer_CMS.md +1 -0
- package/docs/ru/intlayer_cli.md +287 -170
- package/docs/ru/intlayer_visual_editor.md +1 -0
- package/docs/ru/intlayer_with_angular.md +1 -0
- package/docs/ru/intlayer_with_create_react_app.md +1 -0
- package/docs/ru/intlayer_with_lynx+react.md +1 -0
- package/docs/ru/intlayer_with_nextjs_14.md +1 -0
- package/docs/ru/intlayer_with_nextjs_15.md +3 -1
- package/docs/ru/intlayer_with_nuxt.md +1 -0
- package/docs/ru/intlayer_with_react_native+expo.md +1 -0
- package/docs/ru/intlayer_with_vite+preact.md +4 -3
- package/docs/ru/intlayer_with_vite+react.md +105 -87
- package/docs/ru/intlayer_with_vite+solid.md +4 -3
- package/docs/ru/intlayer_with_vite+svelte.md +4 -3
- package/docs/ru/intlayer_with_vite+vue.md +5 -4
- package/docs/ru/mcp_server.md +119 -85
- package/docs/zh/intlayer_CMS.md +1 -0
- package/docs/zh/intlayer_cli.md +275 -155
- package/docs/zh/intlayer_visual_editor.md +1 -0
- package/docs/zh/intlayer_with_angular.md +1 -0
- package/docs/zh/intlayer_with_create_react_app.md +1 -0
- package/docs/zh/intlayer_with_lynx+react.md +1 -0
- package/docs/zh/intlayer_with_nextjs_14.md +1 -0
- package/docs/zh/intlayer_with_nextjs_15.md +3 -1
- package/docs/zh/intlayer_with_nuxt.md +1 -0
- package/docs/zh/intlayer_with_react_native+expo.md +1 -0
- package/docs/zh/intlayer_with_vite+preact.md +4 -3
- package/docs/zh/intlayer_with_vite+react.md +154 -188
- package/docs/zh/intlayer_with_vite+solid.md +4 -3
- package/docs/zh/intlayer_with_vite+svelte.md +4 -3
- package/docs/zh/intlayer_with_vite+vue.md +5 -4
- package/docs/zh/mcp_server.md +119 -86
- package/docs/zh/packages/intlayer/getLocalizedUrl.md +1 -23
- package/frequent_questions/ar/build_error_CI_CD.md +75 -0
- package/frequent_questions/de/build_error_CI_CD.md +75 -0
- package/frequent_questions/en/build_error_CI_CD.md +75 -0
- package/frequent_questions/en-GB/build_error_CI_CD.md +75 -0
- package/frequent_questions/es/build_error_CI_CD.md +75 -0
- package/frequent_questions/fr/build_error_CI_CD.md +75 -0
- package/frequent_questions/hi/build_error_CI_CD.md +75 -0
- package/frequent_questions/it/build_error_CI_CD.md +75 -0
- package/frequent_questions/ja/build_error_CI_CD.md +75 -0
- package/frequent_questions/ja/intlayer_command_undefined.md +3 -3
- package/frequent_questions/ko/build_error_CI_CD.md +75 -0
- package/frequent_questions/ko/intlayer_command_undefined.md +3 -3
- package/frequent_questions/pt/build_error_CI_CD.md +75 -0
- package/frequent_questions/ru/build_error_CI_CD.md +75 -0
- package/frequent_questions/zh/build_error_CI_CD.md +75 -0
- package/frequent_questions/zh/intlayer_command_undefined.md +3 -3
- package/legal/ar/privacy_notice.md +83 -0
- package/legal/ar/terms_of_service.md +55 -0
- package/legal/de/privacy_notice.md +83 -0
- package/legal/de/terms_of_service.md +55 -0
- package/legal/en/privacy_notice.md +83 -0
- package/legal/en/terms_of_service.md +55 -0
- package/legal/en-GB/privacy_notice.md +83 -0
- package/legal/en-GB/terms_of_service.md +55 -0
- package/legal/es/privacy_notice.md +83 -0
- package/legal/es/terms_of_service.md +55 -0
- package/legal/fr/privacy_notice.md +83 -0
- package/legal/fr/terms_of_service.md +55 -0
- package/legal/hi/privacy_notice.md +83 -0
- package/legal/hi/terms_of_service.md +55 -0
- package/legal/it/privacy_notice.md +83 -0
- package/legal/it/terms_of_service.md +55 -0
- package/legal/ja/privacy_notice.md +83 -0
- package/legal/ja/terms_of_service.md +55 -0
- package/legal/ko/privacy_notice.md +83 -0
- package/legal/ko/terms_of_service.md +55 -0
- package/legal/pt/privacy_notice.md +83 -0
- package/legal/pt/terms_of_service.md +55 -0
- package/legal/ru/privacy_notice.md +83 -0
- package/legal/ru/terms_of_service.md +55 -0
- package/legal/zh/privacy_notice.md +83 -0
- package/legal/zh/terms_of_service.md +55 -0
- package/package.json +12 -11
- package/src/blog.ts +6 -4
- package/src/common.ts +25 -7
- package/src/doc.ts +6 -4
- package/src/frequentQuestions.ts +6 -4
- package/src/generated/blog.entry.ts +1177 -280
- package/src/generated/docs.entry.ts +3868 -1217
- package/src/generated/frequentQuestions.entry.ts +808 -178
- package/src/generated/legal.entry.ts +34 -36
- package/src/legal.ts +6 -4
|
@@ -1,36 +1,39 @@
|
|
|
1
1
|
---
|
|
2
|
-
createdAt:
|
|
3
|
-
updatedAt:
|
|
4
|
-
title:
|
|
5
|
-
description:
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2024-03-07
|
|
4
|
+
title: Comenzando con Intlayer en Vite + React
|
|
5
|
+
description: Aprende cómo agregar internacionalización (i18n) a tu aplicación Vite y React usando Intlayer. Sigue esta guía para hacer tu aplicación multilingüe.
|
|
6
6
|
keywords:
|
|
7
7
|
- Internacionalización
|
|
8
8
|
- Documentación
|
|
9
9
|
- Intlayer
|
|
10
10
|
- Vite
|
|
11
11
|
- React
|
|
12
|
-
-
|
|
12
|
+
- i18n
|
|
13
13
|
- JavaScript
|
|
14
14
|
slugs:
|
|
15
15
|
- doc
|
|
16
16
|
- environment
|
|
17
|
-
-
|
|
18
|
-
|
|
17
|
+
- vite-and-react
|
|
18
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
|
|
19
|
+
youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4---
|
|
20
|
+
|
|
21
|
+
# Comenzando con la internacionalización (i18n) usando Intlayer en Vite y React
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
<iframe title="The best i18n solution for Vite and React? Discover Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?si=VaKmrYMmXjo3xpk2"/>
|
|
21
24
|
|
|
22
25
|
Consulta la [Plantilla de Aplicación](https://github.com/aymericzip/intlayer-vite-react-template) en GitHub.
|
|
23
26
|
|
|
24
27
|
## ¿Qué es Intlayer?
|
|
25
28
|
|
|
26
|
-
**Intlayer** es una biblioteca innovadora y de código abierto para
|
|
29
|
+
**Intlayer** es una biblioteca innovadora y de código abierto para internacionalización (i18n) diseñada para simplificar el soporte multilingüe en aplicaciones web modernas.
|
|
27
30
|
|
|
28
31
|
Con Intlayer, puedes:
|
|
29
32
|
|
|
30
|
-
- **
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
- **
|
|
33
|
+
- **Gestiona fácilmente las traducciones** usando diccionarios declarativos a nivel de componente.
|
|
34
|
+
- **Localiza dinámicamente metadatos**, rutas y contenido.
|
|
35
|
+
- **Asegura soporte para TypeScript** con tipos autogenerados, mejorando la autocompletación y la detección de errores.
|
|
36
|
+
- **Benefíciate de funciones avanzadas**, como la detección y el cambio dinámico de idioma.
|
|
34
37
|
|
|
35
38
|
---
|
|
36
39
|
|
|
@@ -42,28 +45,28 @@ Instala los paquetes necesarios usando npm:
|
|
|
42
45
|
|
|
43
46
|
```bash packageManager="npm"
|
|
44
47
|
npm install intlayer react-intlayer
|
|
45
|
-
npm install --save-dev
|
|
48
|
+
npm install vite-intlayer --save-dev
|
|
46
49
|
```
|
|
47
50
|
|
|
48
51
|
```bash packageManager="pnpm"
|
|
49
52
|
pnpm add intlayer react-intlayer
|
|
50
|
-
pnpm add --save-dev
|
|
53
|
+
pnpm add vite-intlayer --save-dev
|
|
51
54
|
```
|
|
52
55
|
|
|
53
56
|
```bash packageManager="yarn"
|
|
54
57
|
yarn add intlayer react-intlayer
|
|
55
|
-
yarn add --save-dev
|
|
58
|
+
yarn add vite-intlayer --save-dev
|
|
56
59
|
```
|
|
57
60
|
|
|
58
61
|
- **intlayer**
|
|
59
62
|
|
|
60
|
-
El paquete principal que proporciona herramientas de internacionalización para la gestión de configuración, traducción, [declaración de contenido](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/get_started.md),
|
|
63
|
+
El paquete principal que proporciona herramientas de internacionalización para la gestión de configuración, traducción, [declaración de contenido](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/get_started.md), transpile y [comandos CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_cli.md).
|
|
61
64
|
|
|
62
65
|
- **react-intlayer**
|
|
63
66
|
El paquete que integra Intlayer con aplicaciones React. Proporciona proveedores de contexto y hooks para la internacionalización en React.
|
|
64
67
|
|
|
65
68
|
- **vite-intlayer**
|
|
66
|
-
Incluye el plugin de Vite para integrar Intlayer con el [empaquetador Vite](https://vite.dev/guide/why.html#why-bundle-for-production), así como middleware para detectar
|
|
69
|
+
Incluye el plugin de Vite para integrar Intlayer con el [empaquetador Vite](https://vite.dev/guide/why.html#why-bundle-for-production), así como middleware para detectar el idioma preferido del usuario, gestionar cookies y manejar redirecciones de URL.
|
|
67
70
|
|
|
68
71
|
### Paso 2: Configuración de tu proyecto
|
|
69
72
|
|
|
@@ -91,14 +94,13 @@ export default config;
|
|
|
91
94
|
import { Locales } from "intlayer";
|
|
92
95
|
|
|
93
96
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
94
|
-
// Configuración de Intlayer para internacionalización
|
|
95
97
|
const config = {
|
|
96
98
|
internationalization: {
|
|
97
99
|
locales: [
|
|
98
100
|
Locales.ENGLISH,
|
|
99
101
|
Locales.FRENCH,
|
|
100
102
|
Locales.SPANISH,
|
|
101
|
-
// Tus otros
|
|
103
|
+
// Tus otros idiomas
|
|
102
104
|
],
|
|
103
105
|
defaultLocale: Locales.ENGLISH,
|
|
104
106
|
},
|
|
@@ -111,14 +113,13 @@ export default config;
|
|
|
111
113
|
const { Locales } = require("intlayer");
|
|
112
114
|
|
|
113
115
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
114
|
-
// Configuración de Intlayer para internacionalización
|
|
115
116
|
const config = {
|
|
116
117
|
internationalization: {
|
|
117
118
|
locales: [
|
|
118
119
|
Locales.ENGLISH,
|
|
119
120
|
Locales.FRENCH,
|
|
120
121
|
Locales.SPANISH,
|
|
121
|
-
// Tus otros
|
|
122
|
+
// Tus otros idiomas
|
|
122
123
|
],
|
|
123
124
|
defaultLocale: Locales.ENGLISH,
|
|
124
125
|
},
|
|
@@ -127,11 +128,11 @@ const config = {
|
|
|
127
128
|
module.exports = config;
|
|
128
129
|
```
|
|
129
130
|
|
|
130
|
-
> A través de este archivo de configuración, puedes configurar URLs localizadas, redirección de middleware, nombres de cookies, la ubicación y extensión de tus declaraciones de contenido,
|
|
131
|
+
> A través de este archivo de configuración, puedes configurar URLs localizadas, redirección de middleware, nombres de cookies, la ubicación y extensión de tus declaraciones de contenido, desactivar los registros de Intlayer en la consola, y más. Para una lista completa de los parámetros disponibles, consulta la [documentación de configuración](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/configuration.md).
|
|
131
132
|
|
|
132
133
|
### Paso 3: Integra Intlayer en tu configuración de Vite
|
|
133
134
|
|
|
134
|
-
Agrega el plugin
|
|
135
|
+
Agrega el plugin intlayer en tu configuración.
|
|
135
136
|
|
|
136
137
|
```typescript fileName="vite.config.ts" codeFormat="typescript"
|
|
137
138
|
import { defineConfig } from "vite";
|
|
@@ -166,7 +167,7 @@ module.exports = defineConfig({
|
|
|
166
167
|
});
|
|
167
168
|
```
|
|
168
169
|
|
|
169
|
-
> El plugin `intlayerPlugin()`
|
|
170
|
+
> El plugin `intlayerPlugin()` de Vite se utiliza para integrar Intlayer con Vite. Garantiza la construcción de archivos de declaración de contenido y los supervisa en modo de desarrollo. Define variables de entorno de Intlayer dentro de la aplicación Vite. Además, proporciona alias para optimizar el rendimiento.
|
|
170
171
|
|
|
171
172
|
### Paso 4: Declara Tu Contenido
|
|
172
173
|
|
|
@@ -361,7 +362,7 @@ module.exports = appContent;
|
|
|
361
362
|
"reactLogo": {
|
|
362
363
|
"nodeType": "translation",
|
|
363
364
|
"translation": {
|
|
364
|
-
"en": "React
|
|
365
|
+
"en": "Logo React",
|
|
365
366
|
"fr": "Logo React",
|
|
366
367
|
"es": "Logo React"
|
|
367
368
|
}
|
|
@@ -393,7 +394,7 @@ module.exports = appContent;
|
|
|
393
394
|
"readTheDocs": {
|
|
394
395
|
"nodeType": "translation",
|
|
395
396
|
"translation": {
|
|
396
|
-
"en": "
|
|
397
|
+
"en": "Click on the Vite and React logos to learn more",
|
|
397
398
|
"fr": "Cliquez sur les logos Vite et React pour en savoir plus",
|
|
398
399
|
"es": "Haga clic en los logotipos de Vite y React para obtener más información"
|
|
399
400
|
}
|
|
@@ -402,7 +403,7 @@ module.exports = appContent;
|
|
|
402
403
|
}
|
|
403
404
|
```
|
|
404
405
|
|
|
405
|
-
> Sus declaraciones de contenido pueden definirse en cualquier
|
|
406
|
+
> Sus declaraciones de contenido pueden definirse en cualquier lugar de su aplicación tan pronto como se incluyan en el directorio `contentDir` (por defecto, `./src`). Y coincidan con la extensión del archivo de declaración de contenido (por defecto, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
406
407
|
|
|
407
408
|
> Para más detalles, consulte la [documentación de declaración de contenido](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/get_started.md).
|
|
408
409
|
|
|
@@ -450,7 +451,7 @@ const AppContent: FC = () => {
|
|
|
450
451
|
);
|
|
451
452
|
};
|
|
452
453
|
|
|
453
|
-
const App = () => (
|
|
454
|
+
const App: FC = () => (
|
|
454
455
|
<IntlayerProvider>
|
|
455
456
|
<AppContent />
|
|
456
457
|
</IntlayerProvider>
|
|
@@ -553,7 +554,7 @@ const App = () => (
|
|
|
553
554
|
module.exports = App;
|
|
554
555
|
```
|
|
555
556
|
|
|
556
|
-
> Si
|
|
557
|
+
> Si deseas usar tu contenido en un atributo de tipo `string`, como `alt`, `title`, `href`, `aria-label`, etc., debes llamar al valor de la función, así:
|
|
557
558
|
|
|
558
559
|
> ```jsx
|
|
559
560
|
> <img src={content.image.src.value} alt={content.image.value} />
|
|
@@ -611,9 +612,9 @@ const LocaleSwitcher = () => {
|
|
|
611
612
|
};
|
|
612
613
|
```
|
|
613
614
|
|
|
614
|
-
> Para aprender más sobre el hook `useLocale`,
|
|
615
|
+
> Para aprender más sobre el hook `useLocale`, consulte la [documentación](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/packages/react-intlayer/useLocale.md).
|
|
615
616
|
|
|
616
|
-
### (Opcional) Paso 7:
|
|
617
|
+
### (Opcional) Paso 7: Agregar enrutamiento localizado a su aplicación
|
|
617
618
|
|
|
618
619
|
El propósito de este paso es crear rutas únicas para cada idioma. Esto es útil para SEO y URLs amigables con SEO.
|
|
619
620
|
Ejemplo:
|
|
@@ -624,9 +625,9 @@ Ejemplo:
|
|
|
624
625
|
- https://example.com/fr/about
|
|
625
626
|
```
|
|
626
627
|
|
|
627
|
-
> Por defecto, las rutas no tienen prefijo para la configuración regional predeterminada. Si
|
|
628
|
+
> Por defecto, las rutas no tienen prefijo para la configuración regional predeterminada. Si desea agregar un prefijo para la configuración regional predeterminada, puede establecer la opción `middleware.prefixDefault` en `true` en su configuración. Consulte la [documentación de configuración](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/configuration.md) para obtener más información.
|
|
628
629
|
|
|
629
|
-
Para agregar enrutamiento localizado a
|
|
630
|
+
Para agregar enrutamiento localizado a su aplicación, puede crear un componente `LocaleRouter` que envuelva las rutas de su aplicación y gestione el enrutamiento basado en la configuración regional. Aquí hay un ejemplo usando [React Router](https://reactrouter.com/home):
|
|
630
631
|
|
|
631
632
|
```tsx fileName="src/components/LocaleRouter.tsx" codeFormat="typescript"
|
|
632
633
|
// Importando las dependencias y funciones necesarias
|
|
@@ -646,8 +647,8 @@ const { internationalization, middleware } = configuration;
|
|
|
646
647
|
const { locales, defaultLocale } = internationalization;
|
|
647
648
|
|
|
648
649
|
/**
|
|
649
|
-
* Un componente que maneja la localización y envuelve a los hijos con el contexto de
|
|
650
|
-
* Gestiona la detección y validación
|
|
650
|
+
* Un componente que maneja la localización y envuelve a los hijos con el contexto de locale apropiado.
|
|
651
|
+
* Gestiona la detección y validación del locale basado en la URL.
|
|
651
652
|
*/
|
|
652
653
|
const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
653
654
|
children,
|
|
@@ -664,7 +665,7 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
664
665
|
);
|
|
665
666
|
|
|
666
667
|
/**
|
|
667
|
-
* Si middleware.prefixDefault es
|
|
668
|
+
* Si middleware.prefixDefault es true, la configuración regional predeterminada siempre debe tener prefijo.
|
|
668
669
|
*/
|
|
669
670
|
if (middleware.prefixDefault) {
|
|
670
671
|
// Validar la configuración regional
|
|
@@ -684,8 +685,8 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
684
685
|
);
|
|
685
686
|
} else {
|
|
686
687
|
/**
|
|
687
|
-
* Cuando middleware.prefixDefault es falso, la configuración regional predeterminada no
|
|
688
|
-
* Asegúrate de que la configuración regional actual sea válida y no la predeterminada.
|
|
688
|
+
* Cuando middleware.prefixDefault es falso, la configuración regional predeterminada no tiene prefijo.
|
|
689
|
+
* Asegúrate de que la configuración regional actual sea válida y no sea la predeterminada.
|
|
689
690
|
*/
|
|
690
691
|
if (
|
|
691
692
|
currentLocale.toString() !== defaultLocale.toString() &&
|
|
@@ -693,13 +694,13 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
693
694
|
.filter(
|
|
694
695
|
(locale) => locale.toString() !== defaultLocale.toString() // Excluir la configuración regional predeterminada
|
|
695
696
|
)
|
|
696
|
-
.includes(currentLocale) // Verifica si la
|
|
697
|
+
.includes(currentLocale) // Verifica si la configuración regional actual está en la lista de configuraciones regionales válidas
|
|
697
698
|
) {
|
|
698
|
-
// Redirige a la ruta sin el prefijo de
|
|
699
|
+
// Redirige a la ruta sin el prefijo de configuración regional
|
|
699
700
|
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
700
701
|
}
|
|
701
702
|
|
|
702
|
-
// Envuelve los hijos con IntlayerProvider y establece la
|
|
703
|
+
// Envuelve los hijos con IntlayerProvider y establece la configuración regional actual
|
|
703
704
|
return (
|
|
704
705
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
705
706
|
);
|
|
@@ -707,7 +708,7 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
707
708
|
};
|
|
708
709
|
|
|
709
710
|
/**
|
|
710
|
-
* Un componente de enrutador que configura rutas específicas por
|
|
711
|
+
* Un componente de enrutador que configura rutas específicas por configuración regional.
|
|
711
712
|
* Utiliza React Router para gestionar la navegación y renderizar componentes localizados.
|
|
712
713
|
*/
|
|
713
714
|
export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
@@ -719,7 +720,7 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
|
719
720
|
)
|
|
720
721
|
.map((locale) => (
|
|
721
722
|
<Route
|
|
722
|
-
// Patrón de ruta para capturar la localidad (por ejemplo, /en/, /fr/) y coincidir con todas las rutas
|
|
723
|
+
// Patrón de ruta para capturar la localidad (por ejemplo, /en/, /fr/) y coincidir con todas las rutas subsecuentes
|
|
723
724
|
path={`/${locale}/*`}
|
|
724
725
|
key={locale}
|
|
725
726
|
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Envuelve los hijos con la gestión de la localidad
|
|
@@ -727,7 +728,7 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
|
727
728
|
))}
|
|
728
729
|
|
|
729
730
|
{
|
|
730
|
-
// Si
|
|
731
|
+
// Si el prefijo para la localidad por defecto está deshabilitado, renderiza los hijos directamente en la ruta raíz
|
|
731
732
|
!middleware.prefixDefault && (
|
|
732
733
|
<Route
|
|
733
734
|
path="*"
|
|
@@ -743,7 +744,7 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
|
743
744
|
```
|
|
744
745
|
|
|
745
746
|
```jsx fileName="src/components/LocaleRouter.mjx" codeFormat="esm"
|
|
746
|
-
//
|
|
747
|
+
// Importación de dependencias y funciones necesarias
|
|
747
748
|
import { configuration, getPathWithoutLocale } from "intlayer"; // Funciones utilitarias y tipos de 'intlayer'
|
|
748
749
|
// Funciones utilitarias y tipos de 'intlayer'
|
|
749
750
|
import { IntlayerProvider } from "react-intlayer"; // Proveedor para el contexto de internacionalización
|
|
@@ -755,33 +756,32 @@ import {
|
|
|
755
756
|
useLocation,
|
|
756
757
|
} from "react-router-dom"; // Componentes del enrutador para gestionar la navegación
|
|
757
758
|
|
|
758
|
-
//
|
|
759
|
+
// Desestructuración de la configuración desde Intlayer
|
|
759
760
|
const { internationalization, middleware } = configuration;
|
|
760
761
|
const { locales, defaultLocale } = internationalization;
|
|
761
762
|
|
|
762
763
|
/**
|
|
763
764
|
* Un componente que maneja la localización y envuelve a los hijos con el contexto de idioma apropiado.
|
|
764
|
-
/**
|
|
765
765
|
* Gestiona la detección y validación de la localización basada en la URL.
|
|
766
766
|
*/
|
|
767
767
|
const AppLocalized = ({ children, locale }) => {
|
|
768
|
-
const { pathname, search } = useLocation(); // Obtener la ruta actual
|
|
768
|
+
const { pathname, search } = useLocation(); // Obtener la ruta URL actual
|
|
769
769
|
|
|
770
|
-
// Determinar la localización actual, usando la
|
|
770
|
+
// Determinar la localización actual, usando la predeterminada si no se proporciona
|
|
771
771
|
const currentLocale = locale ?? defaultLocale;
|
|
772
772
|
|
|
773
773
|
// Eliminar el prefijo de localización de la ruta para construir una ruta base
|
|
774
774
|
const pathWithoutLocale = getPathWithoutLocale(
|
|
775
|
-
pathname // Ruta actual
|
|
775
|
+
pathname // Ruta URL actual
|
|
776
776
|
);
|
|
777
777
|
|
|
778
778
|
/**
|
|
779
|
-
* Si middleware.prefixDefault es
|
|
779
|
+
* Si middleware.prefixDefault es true, la localización predeterminada siempre debe tener prefijo.
|
|
780
780
|
*/
|
|
781
781
|
if (middleware.prefixDefault) {
|
|
782
782
|
// Validar la localización
|
|
783
783
|
if (!locale || !locales.includes(locale)) {
|
|
784
|
-
// Redirigir a la localización
|
|
784
|
+
// Redirigir a la localización predeterminada con la ruta actualizada
|
|
785
785
|
return (
|
|
786
786
|
<Navigate
|
|
787
787
|
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
@@ -796,7 +796,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
796
796
|
);
|
|
797
797
|
} else {
|
|
798
798
|
/**
|
|
799
|
-
* Cuando middleware.prefixDefault es falso, la localidad por defecto no
|
|
799
|
+
* Cuando middleware.prefixDefault es falso, la localidad por defecto no tiene prefijo.
|
|
800
800
|
* Asegura que la localidad actual sea válida y no la localidad por defecto.
|
|
801
801
|
*/
|
|
802
802
|
if (
|
|
@@ -871,8 +871,8 @@ const { internationalization, middleware } = configuration;
|
|
|
871
871
|
const { locales, defaultLocale } = internationalization;
|
|
872
872
|
|
|
873
873
|
/**
|
|
874
|
-
* Un componente que maneja la localización y envuelve a los hijos con el contexto de
|
|
875
|
-
* Gestiona la detección y validación del
|
|
874
|
+
* Un componente que maneja la localización y envuelve a los hijos con el contexto de locale apropiado.
|
|
875
|
+
* Gestiona la detección y validación del locale basado en la URL.
|
|
876
876
|
*/
|
|
877
877
|
const AppLocalized = ({ children, locale }) => {
|
|
878
878
|
const { pathname, search } = useLocation(); // Obtener la ruta URL actual
|
|
@@ -886,7 +886,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
886
886
|
);
|
|
887
887
|
|
|
888
888
|
/**
|
|
889
|
-
* Si middleware.prefixDefault es
|
|
889
|
+
* Si middleware.prefixDefault es verdadero, la configuración regional predeterminada siempre debe tener prefijo.
|
|
890
890
|
*/
|
|
891
891
|
if (middleware.prefixDefault) {
|
|
892
892
|
// Validar la configuración regional
|
|
@@ -900,22 +900,22 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
900
900
|
);
|
|
901
901
|
}
|
|
902
902
|
|
|
903
|
-
// Envuelve los hijos con IntlayerProvider y establece la
|
|
903
|
+
// Envuelve los hijos con IntlayerProvider y establece la localidad actual
|
|
904
904
|
return (
|
|
905
905
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
906
906
|
);
|
|
907
907
|
} else {
|
|
908
908
|
/**
|
|
909
|
-
* Cuando middleware.prefixDefault es falso, la
|
|
910
|
-
*
|
|
909
|
+
* Cuando middleware.prefixDefault es falso, la localidad por defecto no se antepone.
|
|
910
|
+
* Asegura que la localidad actual sea válida y no la localidad por defecto.
|
|
911
911
|
*/
|
|
912
912
|
if (
|
|
913
913
|
currentLocale.toString() !== defaultLocale.toString() &&
|
|
914
914
|
!locales
|
|
915
915
|
.filter(
|
|
916
|
-
(locale) => locale.toString() !== defaultLocale.toString() // Excluir la
|
|
916
|
+
(locale) => locale.toString() !== defaultLocale.toString() // Excluir la localidad por defecto
|
|
917
917
|
)
|
|
918
|
-
.includes(currentLocale) //
|
|
918
|
+
.includes(currentLocale) // Verifica si la localidad actual está en la lista de localidades válidas
|
|
919
919
|
) {
|
|
920
920
|
// Redirigir a la ruta sin el prefijo de la localidad
|
|
921
921
|
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
@@ -944,18 +944,18 @@ const LocaleRouter = ({ children }) => (
|
|
|
944
944
|
// Patrón de ruta para capturar la localidad (por ejemplo, /en/, /fr/) y coincidir con todas las rutas subsecuentes
|
|
945
945
|
path={`/${locale}/*`}
|
|
946
946
|
key={locale}
|
|
947
|
-
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Envuelve los hijos con la gestión de la
|
|
947
|
+
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Envuelve los hijos con la gestión de la configuración regional
|
|
948
948
|
/>
|
|
949
949
|
))}
|
|
950
950
|
|
|
951
951
|
{
|
|
952
|
-
// Si la prefijación de la
|
|
952
|
+
// Si la prefijación de la configuración regional predeterminada está deshabilitada, renderiza los hijos directamente en la ruta raíz
|
|
953
953
|
!middleware.prefixDefault && (
|
|
954
954
|
<Route
|
|
955
955
|
path="*"
|
|
956
956
|
element={
|
|
957
957
|
<AppLocalized locale={defaultLocale}>{children}</AppLocalized>
|
|
958
|
-
} // Envuelve los hijos con la gestión de la
|
|
958
|
+
} // Envuelve los hijos con la gestión de la configuración regional
|
|
959
959
|
/>
|
|
960
960
|
)
|
|
961
961
|
}
|
|
@@ -1003,7 +1003,7 @@ const App = () => (
|
|
|
1003
1003
|
);
|
|
1004
1004
|
```
|
|
1005
1005
|
|
|
1006
|
-
Paralelamente, también puedes usar el `intLayerMiddlewarePlugin` para agregar enrutamiento del lado del servidor a tu aplicación. Este plugin detectará automáticamente la configuración regional actual basada en la URL y establecerá la cookie de configuración regional
|
|
1006
|
+
Paralelamente, también puedes usar el `intLayerMiddlewarePlugin` para agregar enrutamiento del lado del servidor a tu aplicación. Este plugin detectará automáticamente la configuración regional actual basada en la URL y establecerá la cookie de configuración regional correspondiente. Si no se especifica ninguna configuración regional, el plugin determinará la configuración regional más adecuada basándose en las preferencias de idioma del navegador del usuario. Si no se detecta ninguna configuración regional, redirigirá a la configuración regional predeterminada.
|
|
1007
1007
|
|
|
1008
1008
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1009
1009
|
import { defineConfig } from "vite";
|
|
@@ -1084,7 +1084,7 @@ const LocaleSwitcher: FC = () => {
|
|
|
1084
1084
|
key={localeItem}
|
|
1085
1085
|
>
|
|
1086
1086
|
<span>
|
|
1087
|
-
{/*
|
|
1087
|
+
{/* Local - p.ej. FR */}
|
|
1088
1088
|
{localeItem}
|
|
1089
1089
|
</span>
|
|
1090
1090
|
<span>
|
|
@@ -1092,7 +1092,7 @@ const LocaleSwitcher: FC = () => {
|
|
|
1092
1092
|
{getLocaleName(localeItem, locale)}
|
|
1093
1093
|
</span>
|
|
1094
1094
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1095
|
-
{/* Idioma en la localización actual - p.ej. Francés con la localización actual configurada
|
|
1095
|
+
{/* Idioma en la localización actual - p.ej. Francés con la localización actual configurada en Locales.SPANISH */}
|
|
1096
1096
|
{getLocaleName(localeItem)}
|
|
1097
1097
|
</span>
|
|
1098
1098
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
@@ -1156,11 +1156,11 @@ const LocaleSwitcher = () => {
|
|
|
1156
1156
|
{getLocaleName(localeItem, locale)}
|
|
1157
1157
|
</span>
|
|
1158
1158
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1159
|
-
{/* Idioma en la configuración regional actual -
|
|
1159
|
+
{/* Idioma en la configuración regional actual - por ejemplo, Francés con la configuración regional actual establecida en Locales.SPANISH */}
|
|
1160
1160
|
{getLocaleName(localeItem)}
|
|
1161
1161
|
</span>
|
|
1162
1162
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
1163
|
-
{/* Idioma en inglés -
|
|
1163
|
+
{/* Idioma en inglés - por ejemplo, French */}
|
|
1164
1164
|
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
1165
1165
|
</span>
|
|
1166
1166
|
</a>
|
|
@@ -1212,15 +1212,15 @@ const LocaleSwitcher = () => {
|
|
|
1212
1212
|
key={localeItem}
|
|
1213
1213
|
>
|
|
1214
1214
|
<span>
|
|
1215
|
-
{/*
|
|
1215
|
+
{/* Localidad - por ejemplo, FR */}
|
|
1216
1216
|
{localeItem}
|
|
1217
1217
|
</span>
|
|
1218
1218
|
<span>
|
|
1219
|
-
{/* Idioma en su propia
|
|
1219
|
+
{/* Idioma en su propia Localidad - por ejemplo, Français */}
|
|
1220
1220
|
{getLocaleName(localeItem, locale)}
|
|
1221
1221
|
</span>
|
|
1222
1222
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1223
|
-
{/* Idioma en la
|
|
1223
|
+
{/* Idioma en la Localidad actual - por ejemplo, Francés con la localidad actual configurada en Locales.SPANISH */}
|
|
1224
1224
|
{getLocaleName(localeItem)}
|
|
1225
1225
|
</span>
|
|
1226
1226
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
@@ -1242,15 +1242,15 @@ const LocaleSwitcher = () => {
|
|
|
1242
1242
|
> - [`getLocalizedUrl` hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/packages/intlayer/getLocalizedUrl.md)
|
|
1243
1243
|
> - [`getHTMLTextDir` hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/packages/intlayer/getHTMLTextDir.md)
|
|
1244
1244
|
> - [`hrefLang` attribute](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=fr)
|
|
1245
|
-
> - [`lang` attribute](https://developer.mozilla.org/es/docs/Web/HTML/
|
|
1246
|
-
> - [`dir` attribute](https://developer.mozilla.org/es/docs/Web/HTML/
|
|
1247
|
-
> - [`aria-current` attribute](https://developer.mozilla.org/es/docs/Web/Accessibility/ARIA/
|
|
1245
|
+
> - [`lang` attribute](https://developer.mozilla.org/es/docs/Web/HTML/Atributos_globales/lang)
|
|
1246
|
+
> - [`dir` attribute](https://developer.mozilla.org/es/docs/Web/HTML/Atributos_globales/dir)
|
|
1247
|
+
> - [`aria-current` attribute](https://developer.mozilla.org/es/docs/Web/Accessibility/ARIA/Atributos/aria-current)
|
|
1248
1248
|
|
|
1249
1249
|
A continuación se muestra el **Paso 9** actualizado con explicaciones añadidas y ejemplos de código refinados:
|
|
1250
1250
|
|
|
1251
1251
|
---
|
|
1252
1252
|
|
|
1253
|
-
### (Opcional) Paso 9: Cambiar los atributos de idioma y dirección
|
|
1253
|
+
### (Opcional) Paso 9: Cambiar los atributos de idioma y dirección en el HTML
|
|
1254
1254
|
|
|
1255
1255
|
Cuando tu aplicación soporta múltiples idiomas, es crucial actualizar los atributos `lang` y `dir` de la etiqueta `<html>` para que coincidan con la configuración regional actual. Hacer esto garantiza:
|
|
1256
1256
|
|
|
@@ -1272,7 +1272,7 @@ import { getHTMLTextDir } from "intlayer";
|
|
|
1272
1272
|
/**
|
|
1273
1273
|
* Actualiza los atributos `lang` y `dir` del elemento HTML <html> según la configuración regional actual.
|
|
1274
1274
|
* - `lang`: Informa a los navegadores y motores de búsqueda sobre el idioma de la página.
|
|
1275
|
-
* - `dir`:
|
|
1275
|
+
* - `dir`: Asegura el orden correcto de lectura (por ejemplo, 'ltr' para inglés, 'rtl' para árabe).
|
|
1276
1276
|
*
|
|
1277
1277
|
* Esta actualización dinámica es esencial para el renderizado correcto del texto, accesibilidad y SEO.
|
|
1278
1278
|
*/
|
|
@@ -1297,7 +1297,7 @@ import { getHTMLTextDir } from "intlayer";
|
|
|
1297
1297
|
/**
|
|
1298
1298
|
* Actualiza los atributos `lang` y `dir` del elemento HTML <html> según el locale actual.
|
|
1299
1299
|
* - `lang`: Informa a los navegadores y motores de búsqueda sobre el idioma de la página.
|
|
1300
|
-
* - `dir`:
|
|
1300
|
+
* - `dir`: Garantiza el orden correcto de lectura (por ejemplo, 'ltr' para inglés, 'rtl' para árabe).
|
|
1301
1301
|
*
|
|
1302
1302
|
* Esta actualización dinámica es esencial para una correcta representación del texto, accesibilidad y SEO.
|
|
1303
1303
|
*/
|
|
@@ -1324,16 +1324,16 @@ const { getHTMLTextDir } = require("intlayer");
|
|
|
1324
1324
|
* - `lang`: Informa a los navegadores y motores de búsqueda sobre el idioma de la página.
|
|
1325
1325
|
* - `dir`: Asegura el orden correcto de lectura (por ejemplo, 'ltr' para inglés, 'rtl' para árabe).
|
|
1326
1326
|
*
|
|
1327
|
-
* Esta actualización dinámica es esencial para una correcta
|
|
1327
|
+
* Esta actualización dinámica es esencial para una correcta representación del texto, accesibilidad y SEO.
|
|
1328
1328
|
*/
|
|
1329
1329
|
const useI18nHTMLAttributes = () => {
|
|
1330
1330
|
const { locale } = useLocale();
|
|
1331
1331
|
|
|
1332
1332
|
useEffect(() => {
|
|
1333
|
-
// Actualiza el atributo de idioma
|
|
1333
|
+
// Actualiza el atributo de idioma a la configuración regional actual.
|
|
1334
1334
|
document.documentElement.lang = locale;
|
|
1335
1335
|
|
|
1336
|
-
// Establece la dirección del texto según
|
|
1336
|
+
// Establece la dirección del texto según la configuración regional actual.
|
|
1337
1337
|
document.documentElement.dir = getHTMLTextDir(locale);
|
|
1338
1338
|
}, [locale]);
|
|
1339
1339
|
};
|
|
@@ -1373,7 +1373,7 @@ import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
|
|
|
1373
1373
|
import "./App.css";
|
|
1374
1374
|
|
|
1375
1375
|
const AppContent = () => {
|
|
1376
|
-
//
|
|
1376
|
+
// Aplicar el hook para actualizar los atributos lang y dir de la etiqueta <html> según la configuración regional.
|
|
1377
1377
|
useI18nHTMLAttributes();
|
|
1378
1378
|
|
|
1379
1379
|
// ... Resto de tu componente
|
|
@@ -1395,7 +1395,7 @@ const { useI18nHTMLAttributes } = require("./hooks/useI18nHTMLAttributes");
|
|
|
1395
1395
|
require("./App.css");
|
|
1396
1396
|
|
|
1397
1397
|
const AppContent = () => {
|
|
1398
|
-
//
|
|
1398
|
+
// Aplica el hook para actualizar los atributos lang y dir de la etiqueta <html> según la configuración regional.
|
|
1399
1399
|
useI18nHTMLAttributes();
|
|
1400
1400
|
|
|
1401
1401
|
// ... Resto de tu componente
|
|
@@ -1412,19 +1412,19 @@ module.exports = App;
|
|
|
1412
1412
|
|
|
1413
1413
|
Al aplicar estos cambios, tu aplicación:
|
|
1414
1414
|
|
|
1415
|
-
- Asegurará que el atributo
|
|
1415
|
+
- Asegurará que el atributo **language** (`lang`) refleje correctamente la configuración regional actual, lo cual es importante para SEO y el comportamiento del navegador.
|
|
1416
1416
|
- Ajustará la **dirección del texto** (`dir`) según la configuración regional, mejorando la legibilidad y usabilidad para idiomas con diferentes órdenes de lectura.
|
|
1417
1417
|
- Proporcionará una experiencia más **accesible**, ya que las tecnologías de asistencia dependen de estos atributos para funcionar de manera óptima.
|
|
1418
1418
|
|
|
1419
|
-
### (Opcional) Paso 10:
|
|
1419
|
+
### (Opcional) Paso 10: Crear un Componente de Enlace Localizado
|
|
1420
1420
|
|
|
1421
|
-
Para
|
|
1421
|
+
Para asegurar que la navegación de su aplicación respete la configuración regional actual, puede crear un componente personalizado `Link`. Este componente antepone automáticamente a las URLs internas el idioma actual. Por ejemplo, cuando un usuario francófono hace clic en un enlace a la página "Acerca de", es redirigido a `/fr/about` en lugar de `/about`.
|
|
1422
1422
|
|
|
1423
1423
|
Este comportamiento es útil por varias razones:
|
|
1424
1424
|
|
|
1425
|
-
- **SEO y experiencia del usuario**: Las
|
|
1425
|
+
- **SEO y experiencia del usuario**: Las URLs localizadas ayudan a los motores de búsqueda a indexar correctamente las páginas específicas por idioma y proporcionan a los usuarios contenido en su idioma preferido.
|
|
1426
1426
|
- **Consistencia**: Al usar un enlace localizado en toda su aplicación, garantiza que la navegación se mantenga dentro de la configuración regional actual, evitando cambios inesperados de idioma.
|
|
1427
|
-
- **Mantenibilidad**: Centralizar la lógica de localización en un solo componente simplifica la gestión de URLs, haciendo que tu base de código sea más fácil de mantener y
|
|
1427
|
+
- **Mantenibilidad**: Centralizar la lógica de localización en un solo componente simplifica la gestión de URLs, haciendo que tu base de código sea más fácil de mantener y extender a medida que tu aplicación crece.
|
|
1428
1428
|
|
|
1429
1429
|
A continuación se muestra la implementación de un componente `Link` localizado en TypeScript:
|
|
1430
1430
|
|
|
@@ -1523,8 +1523,8 @@ const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
|
|
|
1523
1523
|
|
|
1524
1524
|
/**
|
|
1525
1525
|
* Un componente Link personalizado que adapta el atributo href según la configuración regional actual.
|
|
1526
|
-
* Para enlaces internos, utiliza `getLocalizedUrl` para anteponer la
|
|
1527
|
-
* Esto asegura que la navegación se mantenga dentro del mismo contexto
|
|
1526
|
+
* Para enlaces internos, utiliza `getLocalizedUrl` para anteponer la URL con la configuración regional (por ejemplo, /fr/about).
|
|
1527
|
+
* Esto asegura que la navegación se mantenga dentro del mismo contexto regional.
|
|
1528
1528
|
*/
|
|
1529
1529
|
const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
1530
1530
|
const { locale } = useLocale();
|
|
@@ -1557,7 +1557,7 @@ Link.displayName = "Link";
|
|
|
1557
1557
|
El hook `useLocale` proporciona el locale actual (por ejemplo, `fr` para francés).
|
|
1558
1558
|
|
|
1559
1559
|
- **Localización de la URL**:
|
|
1560
|
-
Para enlaces internos (es decir, no externos), se utiliza `getLocalizedUrl` para
|
|
1560
|
+
Para enlaces internos (es decir, no externos), se utiliza `getLocalizedUrl` para prefijar automáticamente la URL con el locale actual. Esto significa que si tu usuario está en francés, pasar `/about` como `href` se transformará en `/fr/about`.
|
|
1561
1561
|
|
|
1562
1562
|
- **Retorno del Enlace**:
|
|
1563
1563
|
El componente devuelve un elemento `<a>` con la URL localizada, asegurando que la navegación sea coherente con la configuración regional.
|
|
@@ -1572,14 +1572,14 @@ Intlayer utiliza la ampliación de módulos para aprovechar las ventajas de Type
|
|
|
1572
1572
|
|
|
1573
1573
|

|
|
1574
1574
|
|
|
1575
|
-
Asegúrese de que su configuración de TypeScript incluya los tipos
|
|
1575
|
+
Asegúrese de que su configuración de TypeScript incluya los tipos generados automáticamente.
|
|
1576
1576
|
|
|
1577
1577
|
```json5 fileName="tsconfig.json"
|
|
1578
1578
|
{
|
|
1579
1579
|
// ... Sus configuraciones existentes de TypeScript
|
|
1580
1580
|
"include": [
|
|
1581
1581
|
// ... Tus configuraciones existentes de TypeScript
|
|
1582
|
-
".intlayer/**/*.ts", // Incluir los tipos
|
|
1582
|
+
".intlayer/**/*.ts", // Incluir los tipos generados automáticamente
|
|
1583
1583
|
],
|
|
1584
1584
|
}
|
|
1585
1585
|
```
|
|
@@ -1597,15 +1597,15 @@ Para hacerlo, puedes agregar las siguientes instrucciones a tu archivo `.gitigno
|
|
|
1597
1597
|
|
|
1598
1598
|
### Extensión para VS Code
|
|
1599
1599
|
|
|
1600
|
-
Para mejorar tu experiencia de desarrollo con Intlayer, puedes instalar la
|
|
1600
|
+
Para mejorar tu experiencia de desarrollo con Intlayer, puedes instalar la **Extensión oficial de Intlayer para VS Code**.
|
|
1601
1601
|
|
|
1602
1602
|
[Instalar desde el Marketplace de VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
1603
1603
|
|
|
1604
|
-
Esta extensión
|
|
1604
|
+
Esta extensión ofrece:
|
|
1605
1605
|
|
|
1606
1606
|
- **Autocompletado** para las claves de traducción.
|
|
1607
1607
|
- **Detección de errores en tiempo real** para traducciones faltantes.
|
|
1608
|
-
- **
|
|
1608
|
+
- **Vistas previas en línea** del contenido traducido.
|
|
1609
1609
|
- **Acciones rápidas** para crear y actualizar traducciones fácilmente.
|
|
1610
1610
|
|
|
1611
1611
|
Para más detalles sobre cómo usar la extensión, consulta la [documentación de la extensión Intlayer para VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
@@ -1620,4 +1620,4 @@ Para ir más allá, puedes implementar el [editor visual](https://github.com/aym
|
|
|
1620
1620
|
|
|
1621
1621
|
## Historial del documento
|
|
1622
1622
|
|
|
1623
|
-
- 5.5.10 - 2025-06-29:
|
|
1623
|
+
- 5.5.10 - 2025-06-29: Historial inicial
|