@intlayer/docs 5.5.11 → 5.5.12
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 +3 -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_with_vite+react.md +100 -108
- package/docs/de/intlayer_with_vite+react.md +121 -142
- package/docs/en/CI_CD.md +3 -1
- package/docs/en/autoFill.md +3 -1
- package/docs/en/configuration.md +4 -1
- 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 +3 -1
- package/docs/en/intlayer_cli.md +3 -1
- package/docs/en/intlayer_visual_editor.md +3 -1
- package/docs/en/intlayer_with_angular.md +3 -1
- package/docs/en/intlayer_with_create_react_app.md +3 -1
- package/docs/en/intlayer_with_express.md +3 -1
- package/docs/en/intlayer_with_lynx+react.md +3 -1
- package/docs/en/intlayer_with_nextjs_14.md +6 -1
- package/docs/en/intlayer_with_nextjs_15.md +5 -1
- package/docs/en/intlayer_with_nextjs_page_router.md +5 -1
- package/docs/en/intlayer_with_nuxt.md +3 -1
- package/docs/en/intlayer_with_react_native+expo.md +3 -1
- package/docs/en/intlayer_with_vite+preact.md +3 -1
- package/docs/en/intlayer_with_vite+react.md +9 -7
- package/docs/en/intlayer_with_vite+solid.md +3 -1
- package/docs/en/intlayer_with_vite+svelte.md +3 -1
- package/docs/en/intlayer_with_vite+vue.md +3 -1
- package/docs/en/introduction.md +3 -1
- package/docs/en/mcp_server.md +42 -1
- 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_with_vite+react.md +64 -83
- package/docs/es/intlayer_with_vite+react.md +91 -94
- package/docs/fr/intlayer_with_vite+react.md +73 -65
- package/docs/hi/intlayer_with_vite+react.md +107 -107
- package/docs/it/intlayer_with_vite+react.md +156 -112
- package/docs/ja/intlayer_with_vite+react.md +153 -218
- package/docs/ko/intlayer_with_vite+react.md +116 -148
- package/docs/ko/packages/intlayer/getLocalizedUrl.md +1 -23
- package/docs/pt/intlayer_with_vite+react.md +110 -132
- package/docs/ru/intlayer_with_vite+react.md +98 -83
- package/docs/zh/intlayer_with_vite+react.md +147 -184
- 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 +7 -6
- package/src/blog.ts +6 -4
- package/src/common.ts +23 -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,36 @@
|
|
|
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
|
-
-
|
|
17
|
+
- vite-and-react
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
# Comenzando con la internacionalización (i18n) usando Intlayer
|
|
20
|
+
# Comenzando con la internacionalización (i18n) usando Intlayer en Vite y React
|
|
21
21
|
|
|
22
22
|
Consulta la [Plantilla de Aplicación](https://github.com/aymericzip/intlayer-vite-react-template) en GitHub.
|
|
23
23
|
|
|
24
24
|
## ¿Qué es Intlayer?
|
|
25
25
|
|
|
26
|
-
**Intlayer** es una biblioteca innovadora y de código abierto para
|
|
26
|
+
**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
27
|
|
|
28
28
|
Con Intlayer, puedes:
|
|
29
29
|
|
|
30
|
-
- **
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
- **
|
|
30
|
+
- **Gestiona fácilmente las traducciones** usando diccionarios declarativos a nivel de componente.
|
|
31
|
+
- **Localiza dinámicamente metadatos**, rutas y contenido.
|
|
32
|
+
- **Asegura soporte para TypeScript** con tipos autogenerados, mejorando la autocompletación y la detección de errores.
|
|
33
|
+
- **Benefíciate de funciones avanzadas**, como la detección y el cambio dinámico de idioma.
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
@@ -57,13 +57,13 @@ yarn add --save-dev vite-intlayer
|
|
|
57
57
|
|
|
58
58
|
- **intlayer**
|
|
59
59
|
|
|
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),
|
|
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), transpile y [comandos CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/intlayer_cli.md).
|
|
61
61
|
|
|
62
62
|
- **react-intlayer**
|
|
63
63
|
El paquete que integra Intlayer con aplicaciones React. Proporciona proveedores de contexto y hooks para la internacionalización en React.
|
|
64
64
|
|
|
65
65
|
- **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
|
|
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 el idioma preferido del usuario, gestionar cookies y manejar redirecciones de URL.
|
|
67
67
|
|
|
68
68
|
### Paso 2: Configuración de tu proyecto
|
|
69
69
|
|
|
@@ -91,14 +91,13 @@ export default config;
|
|
|
91
91
|
import { Locales } from "intlayer";
|
|
92
92
|
|
|
93
93
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
94
|
-
// Configuración de Intlayer para internacionalización
|
|
95
94
|
const config = {
|
|
96
95
|
internationalization: {
|
|
97
96
|
locales: [
|
|
98
97
|
Locales.ENGLISH,
|
|
99
98
|
Locales.FRENCH,
|
|
100
99
|
Locales.SPANISH,
|
|
101
|
-
// Tus otros
|
|
100
|
+
// Tus otros idiomas
|
|
102
101
|
],
|
|
103
102
|
defaultLocale: Locales.ENGLISH,
|
|
104
103
|
},
|
|
@@ -111,14 +110,13 @@ export default config;
|
|
|
111
110
|
const { Locales } = require("intlayer");
|
|
112
111
|
|
|
113
112
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
114
|
-
// Configuración de Intlayer para internacionalización
|
|
115
113
|
const config = {
|
|
116
114
|
internationalization: {
|
|
117
115
|
locales: [
|
|
118
116
|
Locales.ENGLISH,
|
|
119
117
|
Locales.FRENCH,
|
|
120
118
|
Locales.SPANISH,
|
|
121
|
-
// Tus otros
|
|
119
|
+
// Tus otros idiomas
|
|
122
120
|
],
|
|
123
121
|
defaultLocale: Locales.ENGLISH,
|
|
124
122
|
},
|
|
@@ -127,11 +125,11 @@ const config = {
|
|
|
127
125
|
module.exports = config;
|
|
128
126
|
```
|
|
129
127
|
|
|
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,
|
|
128
|
+
> 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
129
|
|
|
132
130
|
### Paso 3: Integra Intlayer en tu configuración de Vite
|
|
133
131
|
|
|
134
|
-
Agrega el plugin
|
|
132
|
+
Agrega el plugin intlayer en tu configuración.
|
|
135
133
|
|
|
136
134
|
```typescript fileName="vite.config.ts" codeFormat="typescript"
|
|
137
135
|
import { defineConfig } from "vite";
|
|
@@ -166,7 +164,7 @@ module.exports = defineConfig({
|
|
|
166
164
|
});
|
|
167
165
|
```
|
|
168
166
|
|
|
169
|
-
> El plugin `intlayerPlugin()`
|
|
167
|
+
> 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
168
|
|
|
171
169
|
### Paso 4: Declara Tu Contenido
|
|
172
170
|
|
|
@@ -361,7 +359,7 @@ module.exports = appContent;
|
|
|
361
359
|
"reactLogo": {
|
|
362
360
|
"nodeType": "translation",
|
|
363
361
|
"translation": {
|
|
364
|
-
"en": "React
|
|
362
|
+
"en": "Logo React",
|
|
365
363
|
"fr": "Logo React",
|
|
366
364
|
"es": "Logo React"
|
|
367
365
|
}
|
|
@@ -393,7 +391,7 @@ module.exports = appContent;
|
|
|
393
391
|
"readTheDocs": {
|
|
394
392
|
"nodeType": "translation",
|
|
395
393
|
"translation": {
|
|
396
|
-
"en": "
|
|
394
|
+
"en": "Click on the Vite and React logos to learn more",
|
|
397
395
|
"fr": "Cliquez sur les logos Vite et React pour en savoir plus",
|
|
398
396
|
"es": "Haga clic en los logotipos de Vite y React para obtener más información"
|
|
399
397
|
}
|
|
@@ -402,7 +400,7 @@ module.exports = appContent;
|
|
|
402
400
|
}
|
|
403
401
|
```
|
|
404
402
|
|
|
405
|
-
> Sus declaraciones de contenido pueden definirse en cualquier
|
|
403
|
+
> 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
404
|
|
|
407
405
|
> 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
406
|
|
|
@@ -450,7 +448,7 @@ const AppContent: FC = () => {
|
|
|
450
448
|
);
|
|
451
449
|
};
|
|
452
450
|
|
|
453
|
-
const App = () => (
|
|
451
|
+
const App: FC = () => (
|
|
454
452
|
<IntlayerProvider>
|
|
455
453
|
<AppContent />
|
|
456
454
|
</IntlayerProvider>
|
|
@@ -553,7 +551,7 @@ const App = () => (
|
|
|
553
551
|
module.exports = App;
|
|
554
552
|
```
|
|
555
553
|
|
|
556
|
-
> Si
|
|
554
|
+
> 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
555
|
|
|
558
556
|
> ```jsx
|
|
559
557
|
> <img src={content.image.src.value} alt={content.image.value} />
|
|
@@ -611,9 +609,9 @@ const LocaleSwitcher = () => {
|
|
|
611
609
|
};
|
|
612
610
|
```
|
|
613
611
|
|
|
614
|
-
> Para aprender más sobre el hook `useLocale`,
|
|
612
|
+
> 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
613
|
|
|
616
|
-
### (Opcional) Paso 7:
|
|
614
|
+
### (Opcional) Paso 7: Agregar enrutamiento localizado a su aplicación
|
|
617
615
|
|
|
618
616
|
El propósito de este paso es crear rutas únicas para cada idioma. Esto es útil para SEO y URLs amigables con SEO.
|
|
619
617
|
Ejemplo:
|
|
@@ -624,9 +622,9 @@ Ejemplo:
|
|
|
624
622
|
- https://example.com/fr/about
|
|
625
623
|
```
|
|
626
624
|
|
|
627
|
-
> Por defecto, las rutas no tienen prefijo para la configuración regional predeterminada. Si
|
|
625
|
+
> 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
626
|
|
|
629
|
-
Para agregar enrutamiento localizado a
|
|
627
|
+
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
628
|
|
|
631
629
|
```tsx fileName="src/components/LocaleRouter.tsx" codeFormat="typescript"
|
|
632
630
|
// Importando las dependencias y funciones necesarias
|
|
@@ -646,8 +644,8 @@ const { internationalization, middleware } = configuration;
|
|
|
646
644
|
const { locales, defaultLocale } = internationalization;
|
|
647
645
|
|
|
648
646
|
/**
|
|
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
|
|
647
|
+
* Un componente que maneja la localización y envuelve a los hijos con el contexto de locale apropiado.
|
|
648
|
+
* Gestiona la detección y validación del locale basado en la URL.
|
|
651
649
|
*/
|
|
652
650
|
const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
653
651
|
children,
|
|
@@ -664,7 +662,7 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
664
662
|
);
|
|
665
663
|
|
|
666
664
|
/**
|
|
667
|
-
* Si middleware.prefixDefault es
|
|
665
|
+
* Si middleware.prefixDefault es true, la configuración regional predeterminada siempre debe tener prefijo.
|
|
668
666
|
*/
|
|
669
667
|
if (middleware.prefixDefault) {
|
|
670
668
|
// Validar la configuración regional
|
|
@@ -684,8 +682,8 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
684
682
|
);
|
|
685
683
|
} else {
|
|
686
684
|
/**
|
|
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.
|
|
685
|
+
* Cuando middleware.prefixDefault es falso, la configuración regional predeterminada no tiene prefijo.
|
|
686
|
+
* Asegúrate de que la configuración regional actual sea válida y no sea la predeterminada.
|
|
689
687
|
*/
|
|
690
688
|
if (
|
|
691
689
|
currentLocale.toString() !== defaultLocale.toString() &&
|
|
@@ -693,13 +691,13 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
693
691
|
.filter(
|
|
694
692
|
(locale) => locale.toString() !== defaultLocale.toString() // Excluir la configuración regional predeterminada
|
|
695
693
|
)
|
|
696
|
-
.includes(currentLocale) // Verifica si la
|
|
694
|
+
.includes(currentLocale) // Verifica si la configuración regional actual está en la lista de configuraciones regionales válidas
|
|
697
695
|
) {
|
|
698
|
-
// Redirige a la ruta sin el prefijo de
|
|
696
|
+
// Redirige a la ruta sin el prefijo de configuración regional
|
|
699
697
|
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
700
698
|
}
|
|
701
699
|
|
|
702
|
-
// Envuelve los hijos con IntlayerProvider y establece la
|
|
700
|
+
// Envuelve los hijos con IntlayerProvider y establece la configuración regional actual
|
|
703
701
|
return (
|
|
704
702
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
705
703
|
);
|
|
@@ -707,7 +705,7 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
707
705
|
};
|
|
708
706
|
|
|
709
707
|
/**
|
|
710
|
-
* Un componente de enrutador que configura rutas específicas por
|
|
708
|
+
* Un componente de enrutador que configura rutas específicas por configuración regional.
|
|
711
709
|
* Utiliza React Router para gestionar la navegación y renderizar componentes localizados.
|
|
712
710
|
*/
|
|
713
711
|
export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
@@ -719,7 +717,7 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
|
719
717
|
)
|
|
720
718
|
.map((locale) => (
|
|
721
719
|
<Route
|
|
722
|
-
// Patrón de ruta para capturar la localidad (por ejemplo, /en/, /fr/) y coincidir con todas las rutas
|
|
720
|
+
// Patrón de ruta para capturar la localidad (por ejemplo, /en/, /fr/) y coincidir con todas las rutas subsecuentes
|
|
723
721
|
path={`/${locale}/*`}
|
|
724
722
|
key={locale}
|
|
725
723
|
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Envuelve los hijos con la gestión de la localidad
|
|
@@ -727,7 +725,7 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
|
727
725
|
))}
|
|
728
726
|
|
|
729
727
|
{
|
|
730
|
-
// Si
|
|
728
|
+
// Si el prefijo para la localidad por defecto está deshabilitado, renderiza los hijos directamente en la ruta raíz
|
|
731
729
|
!middleware.prefixDefault && (
|
|
732
730
|
<Route
|
|
733
731
|
path="*"
|
|
@@ -743,7 +741,7 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
|
743
741
|
```
|
|
744
742
|
|
|
745
743
|
```jsx fileName="src/components/LocaleRouter.mjx" codeFormat="esm"
|
|
746
|
-
//
|
|
744
|
+
// Importación de dependencias y funciones necesarias
|
|
747
745
|
import { configuration, getPathWithoutLocale } from "intlayer"; // Funciones utilitarias y tipos de 'intlayer'
|
|
748
746
|
// Funciones utilitarias y tipos de 'intlayer'
|
|
749
747
|
import { IntlayerProvider } from "react-intlayer"; // Proveedor para el contexto de internacionalización
|
|
@@ -755,33 +753,32 @@ import {
|
|
|
755
753
|
useLocation,
|
|
756
754
|
} from "react-router-dom"; // Componentes del enrutador para gestionar la navegación
|
|
757
755
|
|
|
758
|
-
//
|
|
756
|
+
// Desestructuración de la configuración desde Intlayer
|
|
759
757
|
const { internationalization, middleware } = configuration;
|
|
760
758
|
const { locales, defaultLocale } = internationalization;
|
|
761
759
|
|
|
762
760
|
/**
|
|
763
761
|
* Un componente que maneja la localización y envuelve a los hijos con el contexto de idioma apropiado.
|
|
764
|
-
/**
|
|
765
762
|
* Gestiona la detección y validación de la localización basada en la URL.
|
|
766
763
|
*/
|
|
767
764
|
const AppLocalized = ({ children, locale }) => {
|
|
768
|
-
const { pathname, search } = useLocation(); // Obtener la ruta actual
|
|
765
|
+
const { pathname, search } = useLocation(); // Obtener la ruta URL actual
|
|
769
766
|
|
|
770
|
-
// Determinar la localización actual, usando la
|
|
767
|
+
// Determinar la localización actual, usando la predeterminada si no se proporciona
|
|
771
768
|
const currentLocale = locale ?? defaultLocale;
|
|
772
769
|
|
|
773
770
|
// Eliminar el prefijo de localización de la ruta para construir una ruta base
|
|
774
771
|
const pathWithoutLocale = getPathWithoutLocale(
|
|
775
|
-
pathname // Ruta actual
|
|
772
|
+
pathname // Ruta URL actual
|
|
776
773
|
);
|
|
777
774
|
|
|
778
775
|
/**
|
|
779
|
-
* Si middleware.prefixDefault es
|
|
776
|
+
* Si middleware.prefixDefault es true, la localización predeterminada siempre debe tener prefijo.
|
|
780
777
|
*/
|
|
781
778
|
if (middleware.prefixDefault) {
|
|
782
779
|
// Validar la localización
|
|
783
780
|
if (!locale || !locales.includes(locale)) {
|
|
784
|
-
// Redirigir a la localización
|
|
781
|
+
// Redirigir a la localización predeterminada con la ruta actualizada
|
|
785
782
|
return (
|
|
786
783
|
<Navigate
|
|
787
784
|
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
@@ -796,7 +793,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
796
793
|
);
|
|
797
794
|
} else {
|
|
798
795
|
/**
|
|
799
|
-
* Cuando middleware.prefixDefault es falso, la localidad por defecto no
|
|
796
|
+
* Cuando middleware.prefixDefault es falso, la localidad por defecto no tiene prefijo.
|
|
800
797
|
* Asegura que la localidad actual sea válida y no la localidad por defecto.
|
|
801
798
|
*/
|
|
802
799
|
if (
|
|
@@ -871,8 +868,8 @@ const { internationalization, middleware } = configuration;
|
|
|
871
868
|
const { locales, defaultLocale } = internationalization;
|
|
872
869
|
|
|
873
870
|
/**
|
|
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
|
|
871
|
+
* Un componente que maneja la localización y envuelve a los hijos con el contexto de locale apropiado.
|
|
872
|
+
* Gestiona la detección y validación del locale basado en la URL.
|
|
876
873
|
*/
|
|
877
874
|
const AppLocalized = ({ children, locale }) => {
|
|
878
875
|
const { pathname, search } = useLocation(); // Obtener la ruta URL actual
|
|
@@ -886,7 +883,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
886
883
|
);
|
|
887
884
|
|
|
888
885
|
/**
|
|
889
|
-
* Si middleware.prefixDefault es
|
|
886
|
+
* Si middleware.prefixDefault es verdadero, la configuración regional predeterminada siempre debe tener prefijo.
|
|
890
887
|
*/
|
|
891
888
|
if (middleware.prefixDefault) {
|
|
892
889
|
// Validar la configuración regional
|
|
@@ -900,22 +897,22 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
900
897
|
);
|
|
901
898
|
}
|
|
902
899
|
|
|
903
|
-
// Envuelve los hijos con IntlayerProvider y establece la
|
|
900
|
+
// Envuelve los hijos con IntlayerProvider y establece la localidad actual
|
|
904
901
|
return (
|
|
905
902
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
906
903
|
);
|
|
907
904
|
} else {
|
|
908
905
|
/**
|
|
909
|
-
* Cuando middleware.prefixDefault es falso, la
|
|
910
|
-
*
|
|
906
|
+
* Cuando middleware.prefixDefault es falso, la localidad por defecto no se antepone.
|
|
907
|
+
* Asegura que la localidad actual sea válida y no la localidad por defecto.
|
|
911
908
|
*/
|
|
912
909
|
if (
|
|
913
910
|
currentLocale.toString() !== defaultLocale.toString() &&
|
|
914
911
|
!locales
|
|
915
912
|
.filter(
|
|
916
|
-
(locale) => locale.toString() !== defaultLocale.toString() // Excluir la
|
|
913
|
+
(locale) => locale.toString() !== defaultLocale.toString() // Excluir la localidad por defecto
|
|
917
914
|
)
|
|
918
|
-
.includes(currentLocale) //
|
|
915
|
+
.includes(currentLocale) // Verifica si la localidad actual está en la lista de localidades válidas
|
|
919
916
|
) {
|
|
920
917
|
// Redirigir a la ruta sin el prefijo de la localidad
|
|
921
918
|
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
@@ -944,18 +941,18 @@ const LocaleRouter = ({ children }) => (
|
|
|
944
941
|
// Patrón de ruta para capturar la localidad (por ejemplo, /en/, /fr/) y coincidir con todas las rutas subsecuentes
|
|
945
942
|
path={`/${locale}/*`}
|
|
946
943
|
key={locale}
|
|
947
|
-
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Envuelve los hijos con la gestión de la
|
|
944
|
+
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Envuelve los hijos con la gestión de la configuración regional
|
|
948
945
|
/>
|
|
949
946
|
))}
|
|
950
947
|
|
|
951
948
|
{
|
|
952
|
-
// Si la prefijación de la
|
|
949
|
+
// Si la prefijación de la configuración regional predeterminada está deshabilitada, renderiza los hijos directamente en la ruta raíz
|
|
953
950
|
!middleware.prefixDefault && (
|
|
954
951
|
<Route
|
|
955
952
|
path="*"
|
|
956
953
|
element={
|
|
957
954
|
<AppLocalized locale={defaultLocale}>{children}</AppLocalized>
|
|
958
|
-
} // Envuelve los hijos con la gestión de la
|
|
955
|
+
} // Envuelve los hijos con la gestión de la configuración regional
|
|
959
956
|
/>
|
|
960
957
|
)
|
|
961
958
|
}
|
|
@@ -1003,7 +1000,7 @@ const App = () => (
|
|
|
1003
1000
|
);
|
|
1004
1001
|
```
|
|
1005
1002
|
|
|
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
|
|
1003
|
+
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
1004
|
|
|
1008
1005
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1009
1006
|
import { defineConfig } from "vite";
|
|
@@ -1084,7 +1081,7 @@ const LocaleSwitcher: FC = () => {
|
|
|
1084
1081
|
key={localeItem}
|
|
1085
1082
|
>
|
|
1086
1083
|
<span>
|
|
1087
|
-
{/*
|
|
1084
|
+
{/* Local - p.ej. FR */}
|
|
1088
1085
|
{localeItem}
|
|
1089
1086
|
</span>
|
|
1090
1087
|
<span>
|
|
@@ -1092,7 +1089,7 @@ const LocaleSwitcher: FC = () => {
|
|
|
1092
1089
|
{getLocaleName(localeItem, locale)}
|
|
1093
1090
|
</span>
|
|
1094
1091
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1095
|
-
{/* Idioma en la localización actual - p.ej. Francés con la localización actual configurada
|
|
1092
|
+
{/* Idioma en la localización actual - p.ej. Francés con la localización actual configurada en Locales.SPANISH */}
|
|
1096
1093
|
{getLocaleName(localeItem)}
|
|
1097
1094
|
</span>
|
|
1098
1095
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
@@ -1156,11 +1153,11 @@ const LocaleSwitcher = () => {
|
|
|
1156
1153
|
{getLocaleName(localeItem, locale)}
|
|
1157
1154
|
</span>
|
|
1158
1155
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1159
|
-
{/* Idioma en la configuración regional actual -
|
|
1156
|
+
{/* Idioma en la configuración regional actual - por ejemplo, Francés con la configuración regional actual establecida en Locales.SPANISH */}
|
|
1160
1157
|
{getLocaleName(localeItem)}
|
|
1161
1158
|
</span>
|
|
1162
1159
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
1163
|
-
{/* Idioma en inglés -
|
|
1160
|
+
{/* Idioma en inglés - por ejemplo, French */}
|
|
1164
1161
|
{getLocaleName(localeItem, Locales.ENGLISH)}
|
|
1165
1162
|
</span>
|
|
1166
1163
|
</a>
|
|
@@ -1212,15 +1209,15 @@ const LocaleSwitcher = () => {
|
|
|
1212
1209
|
key={localeItem}
|
|
1213
1210
|
>
|
|
1214
1211
|
<span>
|
|
1215
|
-
{/*
|
|
1212
|
+
{/* Localidad - por ejemplo, FR */}
|
|
1216
1213
|
{localeItem}
|
|
1217
1214
|
</span>
|
|
1218
1215
|
<span>
|
|
1219
|
-
{/* Idioma en su propia
|
|
1216
|
+
{/* Idioma en su propia Localidad - por ejemplo, Français */}
|
|
1220
1217
|
{getLocaleName(localeItem, locale)}
|
|
1221
1218
|
</span>
|
|
1222
1219
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1223
|
-
{/* Idioma en la
|
|
1220
|
+
{/* Idioma en la Localidad actual - por ejemplo, Francés con la localidad actual configurada en Locales.SPANISH */}
|
|
1224
1221
|
{getLocaleName(localeItem)}
|
|
1225
1222
|
</span>
|
|
1226
1223
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
@@ -1242,15 +1239,15 @@ const LocaleSwitcher = () => {
|
|
|
1242
1239
|
> - [`getLocalizedUrl` hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/packages/intlayer/getLocalizedUrl.md)
|
|
1243
1240
|
> - [`getHTMLTextDir` hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/packages/intlayer/getHTMLTextDir.md)
|
|
1244
1241
|
> - [`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/
|
|
1242
|
+
> - [`lang` attribute](https://developer.mozilla.org/es/docs/Web/HTML/Atributos_globales/lang)
|
|
1243
|
+
> - [`dir` attribute](https://developer.mozilla.org/es/docs/Web/HTML/Atributos_globales/dir)
|
|
1244
|
+
> - [`aria-current` attribute](https://developer.mozilla.org/es/docs/Web/Accessibility/ARIA/Atributos/aria-current)
|
|
1248
1245
|
|
|
1249
1246
|
A continuación se muestra el **Paso 9** actualizado con explicaciones añadidas y ejemplos de código refinados:
|
|
1250
1247
|
|
|
1251
1248
|
---
|
|
1252
1249
|
|
|
1253
|
-
### (Opcional) Paso 9: Cambiar los atributos de idioma y dirección
|
|
1250
|
+
### (Opcional) Paso 9: Cambiar los atributos de idioma y dirección en el HTML
|
|
1254
1251
|
|
|
1255
1252
|
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
1253
|
|
|
@@ -1272,7 +1269,7 @@ import { getHTMLTextDir } from "intlayer";
|
|
|
1272
1269
|
/**
|
|
1273
1270
|
* Actualiza los atributos `lang` y `dir` del elemento HTML <html> según la configuración regional actual.
|
|
1274
1271
|
* - `lang`: Informa a los navegadores y motores de búsqueda sobre el idioma de la página.
|
|
1275
|
-
* - `dir`:
|
|
1272
|
+
* - `dir`: Asegura el orden correcto de lectura (por ejemplo, 'ltr' para inglés, 'rtl' para árabe).
|
|
1276
1273
|
*
|
|
1277
1274
|
* Esta actualización dinámica es esencial para el renderizado correcto del texto, accesibilidad y SEO.
|
|
1278
1275
|
*/
|
|
@@ -1297,7 +1294,7 @@ import { getHTMLTextDir } from "intlayer";
|
|
|
1297
1294
|
/**
|
|
1298
1295
|
* Actualiza los atributos `lang` y `dir` del elemento HTML <html> según el locale actual.
|
|
1299
1296
|
* - `lang`: Informa a los navegadores y motores de búsqueda sobre el idioma de la página.
|
|
1300
|
-
* - `dir`:
|
|
1297
|
+
* - `dir`: Garantiza el orden correcto de lectura (por ejemplo, 'ltr' para inglés, 'rtl' para árabe).
|
|
1301
1298
|
*
|
|
1302
1299
|
* Esta actualización dinámica es esencial para una correcta representación del texto, accesibilidad y SEO.
|
|
1303
1300
|
*/
|
|
@@ -1324,16 +1321,16 @@ const { getHTMLTextDir } = require("intlayer");
|
|
|
1324
1321
|
* - `lang`: Informa a los navegadores y motores de búsqueda sobre el idioma de la página.
|
|
1325
1322
|
* - `dir`: Asegura el orden correcto de lectura (por ejemplo, 'ltr' para inglés, 'rtl' para árabe).
|
|
1326
1323
|
*
|
|
1327
|
-
* Esta actualización dinámica es esencial para una correcta
|
|
1324
|
+
* Esta actualización dinámica es esencial para una correcta representación del texto, accesibilidad y SEO.
|
|
1328
1325
|
*/
|
|
1329
1326
|
const useI18nHTMLAttributes = () => {
|
|
1330
1327
|
const { locale } = useLocale();
|
|
1331
1328
|
|
|
1332
1329
|
useEffect(() => {
|
|
1333
|
-
// Actualiza el atributo de idioma
|
|
1330
|
+
// Actualiza el atributo de idioma a la configuración regional actual.
|
|
1334
1331
|
document.documentElement.lang = locale;
|
|
1335
1332
|
|
|
1336
|
-
// Establece la dirección del texto según
|
|
1333
|
+
// Establece la dirección del texto según la configuración regional actual.
|
|
1337
1334
|
document.documentElement.dir = getHTMLTextDir(locale);
|
|
1338
1335
|
}, [locale]);
|
|
1339
1336
|
};
|
|
@@ -1373,7 +1370,7 @@ import { useI18nHTMLAttributes } from "./hooks/useI18nHTMLAttributes";
|
|
|
1373
1370
|
import "./App.css";
|
|
1374
1371
|
|
|
1375
1372
|
const AppContent = () => {
|
|
1376
|
-
//
|
|
1373
|
+
// Aplicar el hook para actualizar los atributos lang y dir de la etiqueta <html> según la configuración regional.
|
|
1377
1374
|
useI18nHTMLAttributes();
|
|
1378
1375
|
|
|
1379
1376
|
// ... Resto de tu componente
|
|
@@ -1395,7 +1392,7 @@ const { useI18nHTMLAttributes } = require("./hooks/useI18nHTMLAttributes");
|
|
|
1395
1392
|
require("./App.css");
|
|
1396
1393
|
|
|
1397
1394
|
const AppContent = () => {
|
|
1398
|
-
//
|
|
1395
|
+
// Aplica el hook para actualizar los atributos lang y dir de la etiqueta <html> según la configuración regional.
|
|
1399
1396
|
useI18nHTMLAttributes();
|
|
1400
1397
|
|
|
1401
1398
|
// ... Resto de tu componente
|
|
@@ -1412,19 +1409,19 @@ module.exports = App;
|
|
|
1412
1409
|
|
|
1413
1410
|
Al aplicar estos cambios, tu aplicación:
|
|
1414
1411
|
|
|
1415
|
-
- Asegurará que el atributo
|
|
1412
|
+
- 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
1413
|
- 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
1414
|
- Proporcionará una experiencia más **accesible**, ya que las tecnologías de asistencia dependen de estos atributos para funcionar de manera óptima.
|
|
1418
1415
|
|
|
1419
|
-
### (Opcional) Paso 10:
|
|
1416
|
+
### (Opcional) Paso 10: Crear un Componente de Enlace Localizado
|
|
1420
1417
|
|
|
1421
|
-
Para
|
|
1418
|
+
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
1419
|
|
|
1423
1420
|
Este comportamiento es útil por varias razones:
|
|
1424
1421
|
|
|
1425
|
-
- **SEO y experiencia del usuario**: Las
|
|
1422
|
+
- **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
1423
|
- **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
|
|
1424
|
+
- **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
1425
|
|
|
1429
1426
|
A continuación se muestra la implementación de un componente `Link` localizado en TypeScript:
|
|
1430
1427
|
|
|
@@ -1523,8 +1520,8 @@ const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
|
|
|
1523
1520
|
|
|
1524
1521
|
/**
|
|
1525
1522
|
* 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
|
|
1523
|
+
* Para enlaces internos, utiliza `getLocalizedUrl` para anteponer la URL con la configuración regional (por ejemplo, /fr/about).
|
|
1524
|
+
* Esto asegura que la navegación se mantenga dentro del mismo contexto regional.
|
|
1528
1525
|
*/
|
|
1529
1526
|
const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
1530
1527
|
const { locale } = useLocale();
|
|
@@ -1557,7 +1554,7 @@ Link.displayName = "Link";
|
|
|
1557
1554
|
El hook `useLocale` proporciona el locale actual (por ejemplo, `fr` para francés).
|
|
1558
1555
|
|
|
1559
1556
|
- **Localización de la URL**:
|
|
1560
|
-
Para enlaces internos (es decir, no externos), se utiliza `getLocalizedUrl` para
|
|
1557
|
+
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
1558
|
|
|
1562
1559
|
- **Retorno del Enlace**:
|
|
1563
1560
|
El componente devuelve un elemento `<a>` con la URL localizada, asegurando que la navegación sea coherente con la configuración regional.
|
|
@@ -1572,14 +1569,14 @@ Intlayer utiliza la ampliación de módulos para aprovechar las ventajas de Type
|
|
|
1572
1569
|
|
|
1573
1570
|

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