@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,23 +1,23 @@
|
|
|
1
1
|
---
|
|
2
|
-
createdAt:
|
|
3
|
-
updatedAt:
|
|
4
|
-
title:
|
|
5
|
-
description: Scopri come
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2024-03-07
|
|
4
|
+
title: Iniziare con Intlayer in Vite + React
|
|
5
|
+
description: Scopri come aggiungere l'internazionalizzazione (i18n) alla tua applicazione Vite e React utilizzando Intlayer. Segui questa guida per rendere la tua app multilingue.
|
|
6
6
|
keywords:
|
|
7
7
|
- Internazionalizzazione
|
|
8
8
|
- Documentazione
|
|
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
|
-
# Iniziare con l'internazionalizzazione (i18n)
|
|
20
|
+
# Iniziare con l'internazionalizzazione (i18n) con Intlayer, Vite e React
|
|
21
21
|
|
|
22
22
|
Consulta il [Template dell'Applicazione](https://github.com/aymericzip/intlayer-vite-react-template) su GitHub.
|
|
23
23
|
|
|
@@ -27,10 +27,10 @@ Consulta il [Template dell'Applicazione](https://github.com/aymericzip/intlayer-
|
|
|
27
27
|
|
|
28
28
|
Con Intlayer, puoi:
|
|
29
29
|
|
|
30
|
-
- **
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
- **
|
|
30
|
+
- **Gestisci facilmente le traduzioni** utilizzando dizionari dichiarativi a livello di componente.
|
|
31
|
+
- **Localizza dinamicamente i metadata**, le rotte e i contenuti.
|
|
32
|
+
- **Garantisci il supporto a TypeScript** con tipi autogenerati, migliorando l'autocompletamento e il rilevamento degli errori.
|
|
33
|
+
- **Approfitta di funzionalità avanzate**, come il rilevamento e il cambio dinamico della lingua.
|
|
34
34
|
|
|
35
35
|
---
|
|
36
36
|
|
|
@@ -60,14 +60,14 @@ yarn add --save-dev vite-intlayer
|
|
|
60
60
|
Il pacchetto principale che fornisce strumenti di internazionalizzazione per la gestione della configurazione, la traduzione, la [dichiarazione dei contenuti](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/get_started.md), la traspilazione e i [comandi CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_cli.md).
|
|
61
61
|
|
|
62
62
|
- **react-intlayer**
|
|
63
|
-
Il pacchetto che integra Intlayer con
|
|
63
|
+
Il pacchetto che integra Intlayer con le applicazioni React. Fornisce provider di contesto e hook per l'internazionalizzazione in React.
|
|
64
64
|
|
|
65
65
|
- **vite-intlayer**
|
|
66
66
|
Include il plugin Vite per integrare Intlayer con il [bundler Vite](https://vite.dev/guide/why.html#why-bundle-for-production), oltre a middleware per rilevare la lingua preferita dall'utente, gestire i cookie e gestire il reindirizzamento degli URL.
|
|
67
67
|
|
|
68
68
|
### Passo 2: Configurazione del tuo progetto
|
|
69
69
|
|
|
70
|
-
Crea un file di configurazione per
|
|
70
|
+
Crea un file di configurazione per impostare le lingue della tua applicazione:
|
|
71
71
|
|
|
72
72
|
```typescript fileName="intlayer.config.ts" codeFormat="typescript"
|
|
73
73
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
@@ -78,7 +78,7 @@ const config: IntlayerConfig = {
|
|
|
78
78
|
Locales.ENGLISH,
|
|
79
79
|
Locales.FRENCH,
|
|
80
80
|
Locales.SPANISH,
|
|
81
|
-
// Le tue altre
|
|
81
|
+
// Le tue altre localizzazioni
|
|
82
82
|
],
|
|
83
83
|
defaultLocale: Locales.ENGLISH,
|
|
84
84
|
},
|
|
@@ -91,14 +91,13 @@ export default config;
|
|
|
91
91
|
import { Locales } from "intlayer";
|
|
92
92
|
|
|
93
93
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
94
|
-
// Configurazione per Intlayer
|
|
95
94
|
const config = {
|
|
96
95
|
internationalization: {
|
|
97
96
|
locales: [
|
|
98
97
|
Locales.ENGLISH,
|
|
99
98
|
Locales.FRENCH,
|
|
100
99
|
Locales.SPANISH,
|
|
101
|
-
// Le tue altre
|
|
100
|
+
// Le tue altre localizzazioni
|
|
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
|
-
// Configurazione per Intlayer
|
|
115
113
|
const config = {
|
|
116
114
|
internationalization: {
|
|
117
115
|
locales: [
|
|
118
116
|
Locales.ENGLISH,
|
|
119
117
|
Locales.FRENCH,
|
|
120
118
|
Locales.SPANISH,
|
|
121
|
-
// Le tue altre
|
|
119
|
+
// Le tue altre localizzazioni
|
|
122
120
|
],
|
|
123
121
|
defaultLocale: Locales.ENGLISH,
|
|
124
122
|
},
|
|
@@ -166,9 +164,9 @@ module.exports = defineConfig({
|
|
|
166
164
|
});
|
|
167
165
|
```
|
|
168
166
|
|
|
169
|
-
> Il plugin Vite `intlayerPlugin()` viene utilizzato per integrare Intlayer con Vite. Garantisce la creazione dei file di dichiarazione
|
|
167
|
+
> Il plugin Vite `intlayerPlugin()` viene utilizzato per integrare Intlayer con Vite. Garantisce la creazione dei file di dichiarazione del contenuto e li monitora in modalità sviluppo. Definisce le variabili d'ambiente di Intlayer all'interno dell'applicazione Vite. Inoltre, fornisce alias per ottimizzare le prestazioni.
|
|
170
168
|
|
|
171
|
-
### Passo 4: Dichiara
|
|
169
|
+
### Passo 4: Dichiara il Tuo Contenuto
|
|
172
170
|
|
|
173
171
|
Crea e gestisci le tue dichiarazioni di contenuto per memorizzare le traduzioni:
|
|
174
172
|
|
|
@@ -260,7 +258,7 @@ const appContent = {
|
|
|
260
258
|
// Non dimenticare di importare React se usi un nodo React nel tuo contenuto
|
|
261
259
|
en: (
|
|
262
260
|
<>
|
|
263
|
-
|
|
261
|
+
Edit <code>src/App.tsx</code> e salva per testare HMR
|
|
264
262
|
</>
|
|
265
263
|
),
|
|
266
264
|
fr: (
|
|
@@ -276,7 +274,7 @@ const appContent = {
|
|
|
276
274
|
},
|
|
277
275
|
|
|
278
276
|
readTheDocs: t({
|
|
279
|
-
en: "
|
|
277
|
+
en: "Clicca sui loghi di Vite e React per saperne di più",
|
|
280
278
|
fr: "Cliquez sur les logos Vite et React pour en savoir plus",
|
|
281
279
|
es: "Haga clic en los logotipos de Vite y React para obtener más información",
|
|
282
280
|
}),
|
|
@@ -297,13 +295,11 @@ const appContent = {
|
|
|
297
295
|
en: "Vite logo",
|
|
298
296
|
fr: "Logo Vite",
|
|
299
297
|
es: "Logo Vite",
|
|
300
|
-
it: "Logo Vite",
|
|
301
298
|
}),
|
|
302
299
|
reactLogo: t({
|
|
303
300
|
en: "React logo",
|
|
304
301
|
fr: "Logo React",
|
|
305
302
|
es: "Logo React",
|
|
306
|
-
it: "Logo React",
|
|
307
303
|
}),
|
|
308
304
|
|
|
309
305
|
title: "Vite + React",
|
|
@@ -312,7 +308,6 @@ const appContent = {
|
|
|
312
308
|
en: "count is ",
|
|
313
309
|
fr: "le compte est ",
|
|
314
310
|
es: "el recuento es ",
|
|
315
|
-
it: "il conteggio è ",
|
|
316
311
|
}),
|
|
317
312
|
|
|
318
313
|
edit:
|
|
@@ -322,7 +317,7 @@ const appContent = {
|
|
|
322
317
|
// Non dimenticare di importare React se usi un nodo React nel tuo contenuto
|
|
323
318
|
en: (
|
|
324
319
|
<>
|
|
325
|
-
Edit <code>src/App.tsx</code>
|
|
320
|
+
Edit <code>src/App.tsx</code> e salva per testare HMR
|
|
326
321
|
</>
|
|
327
322
|
),
|
|
328
323
|
fr: (
|
|
@@ -332,7 +327,7 @@ const appContent = {
|
|
|
332
327
|
),
|
|
333
328
|
es: (
|
|
334
329
|
<>
|
|
335
|
-
|
|
330
|
+
Edita <code>src/App.tsx</code> e salva per testare HMR
|
|
336
331
|
</>
|
|
337
332
|
),
|
|
338
333
|
},
|
|
@@ -411,13 +406,13 @@ module.exports = appContent;
|
|
|
411
406
|
|
|
412
407
|
> Le tue dichiarazioni di contenuto possono essere definite ovunque nella tua applicazione non appena sono incluse nella directory `contentDir` (di default, `./src`). E devono corrispondere all'estensione del file di dichiarazione del contenuto (di default, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
413
408
|
|
|
414
|
-
> Per maggiori dettagli, consulta la [documentazione
|
|
409
|
+
> Per maggiori dettagli, consulta la [documentazione sulle dichiarazioni di contenuto](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/get_started.md).
|
|
415
410
|
|
|
416
411
|
> Se il tuo file di contenuto include codice TSX, dovresti considerare di importare `import React from "react";` nel tuo file di contenuto.
|
|
417
412
|
|
|
418
413
|
### Passo 5: Utilizza Intlayer nel tuo Codice
|
|
419
414
|
|
|
420
|
-
Accedi ai tuoi dizionari di contenuti in tutta
|
|
415
|
+
Accedi ai tuoi dizionari di contenuti in tutta la tua applicazione:
|
|
421
416
|
|
|
422
417
|
```tsx {5,9} fileName="src/App.tsx" codeFormat="typescript"
|
|
423
418
|
import { useState, type FC } from "react";
|
|
@@ -457,7 +452,7 @@ const AppContent: FC = () => {
|
|
|
457
452
|
);
|
|
458
453
|
};
|
|
459
454
|
|
|
460
|
-
const App = () => (
|
|
455
|
+
const App: FC = () => (
|
|
461
456
|
<IntlayerProvider>
|
|
462
457
|
<AppContent />
|
|
463
458
|
</IntlayerProvider>
|
|
@@ -560,7 +555,7 @@ const App = () => (
|
|
|
560
555
|
module.exports = App;
|
|
561
556
|
```
|
|
562
557
|
|
|
563
|
-
> Se vuoi usare il tuo contenuto in un attributo
|
|
558
|
+
> Se vuoi usare il tuo contenuto in un attributo `string`, come `alt`, `title`, `href`, `aria-label`, ecc., devi chiamare il valore della funzione, come:
|
|
564
559
|
|
|
565
560
|
> ```jsx
|
|
566
561
|
> <img src={content.image.src.value} alt={content.image.value} />
|
|
@@ -582,7 +577,7 @@ const LocaleSwitcher: FC = () => {
|
|
|
582
577
|
|
|
583
578
|
return (
|
|
584
579
|
<button onClick={() => setLocale(Locales.English)}>
|
|
585
|
-
Cambia lingua in
|
|
580
|
+
Cambia lingua in Inglese
|
|
586
581
|
</button>
|
|
587
582
|
);
|
|
588
583
|
};
|
|
@@ -597,7 +592,7 @@ const LocaleSwitcher = () => {
|
|
|
597
592
|
|
|
598
593
|
return (
|
|
599
594
|
<button onClick={() => setLocale(Locales.English)}>
|
|
600
|
-
Cambia lingua in
|
|
595
|
+
Cambia lingua in Inglese
|
|
601
596
|
</button>
|
|
602
597
|
);
|
|
603
598
|
};
|
|
@@ -612,7 +607,7 @@ const LocaleSwitcher = () => {
|
|
|
612
607
|
|
|
613
608
|
return (
|
|
614
609
|
<button onClick={() => setLocale(Locales.English)}>
|
|
615
|
-
Cambia lingua in
|
|
610
|
+
Cambia lingua in Inglese
|
|
616
611
|
</button>
|
|
617
612
|
);
|
|
618
613
|
};
|
|
@@ -620,9 +615,9 @@ const LocaleSwitcher = () => {
|
|
|
620
615
|
|
|
621
616
|
> Per saperne di più sull'hook `useLocale`, consulta la [documentazione](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/packages/react-intlayer/useLocale.md).
|
|
622
617
|
|
|
623
|
-
### (Opzionale) Passo 7:
|
|
618
|
+
### (Opzionale) Passo 7: Aggiungere il routing localizzato alla tua applicazione
|
|
624
619
|
|
|
625
|
-
Lo scopo di questo passaggio è creare
|
|
620
|
+
Lo scopo di questo passaggio è creare rotte uniche per ogni lingua. Questo è utile per la SEO e per URL amichevoli per i motori di ricerca.
|
|
626
621
|
Esempio:
|
|
627
622
|
|
|
628
623
|
```plaintext
|
|
@@ -631,13 +626,13 @@ Esempio:
|
|
|
631
626
|
- https://example.com/fr/about
|
|
632
627
|
```
|
|
633
628
|
|
|
634
|
-
> Per impostazione predefinita,
|
|
629
|
+
> Per impostazione predefinita, i percorsi non sono prefissati per la lingua predefinita. Se desideri aggiungere un prefisso anche per la lingua predefinita, puoi impostare l'opzione `middleware.prefixDefault` su `true` nella tua configurazione. Consulta la [documentazione sulla configurazione](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/configuration.md) per maggiori informazioni.
|
|
635
630
|
|
|
636
631
|
Per aggiungere il routing localizzato alla tua applicazione, puoi creare un componente `LocaleRouter` che avvolge le rotte della tua applicazione e gestisce il routing basato sulla lingua. Ecco un esempio che utilizza [React Router](https://reactrouter.com/home):
|
|
637
632
|
|
|
638
633
|
```tsx fileName="src/components/LocaleRouter.tsx" codeFormat="typescript"
|
|
639
|
-
//
|
|
640
|
-
import { type Locales, configuration, getPathWithoutLocale } from "intlayer"; // Funzioni e tipi
|
|
634
|
+
// Importing necessary dependencies and functions
|
|
635
|
+
import { type Locales, configuration, getPathWithoutLocale } from "intlayer"; // Funzioni di utilità e tipi da 'intlayer'
|
|
641
636
|
import type { FC, PropsWithChildren } from "react"; // Tipi React per componenti funzionali e props
|
|
642
637
|
import { IntlayerProvider } from "react-intlayer"; // Provider per il contesto di internazionalizzazione
|
|
643
638
|
import {
|
|
@@ -654,7 +649,7 @@ const { locales, defaultLocale } = internationalization;
|
|
|
654
649
|
|
|
655
650
|
/**
|
|
656
651
|
* Un componente che gestisce la localizzazione e avvolge i figli con il contesto locale appropriato.
|
|
657
|
-
* Gestisce il rilevamento e la validazione della
|
|
652
|
+
* Gestisce il rilevamento e la validazione della lingua basata sull'URL.
|
|
658
653
|
*/
|
|
659
654
|
const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
660
655
|
children,
|
|
@@ -662,25 +657,25 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
662
657
|
}) => {
|
|
663
658
|
const { pathname, search } = useLocation(); // Ottieni il percorso URL corrente
|
|
664
659
|
|
|
665
|
-
// Determina la
|
|
660
|
+
// Determina la locale corrente, utilizzando quella di default se non fornita
|
|
666
661
|
const currentLocale = locale ?? defaultLocale;
|
|
667
662
|
|
|
668
|
-
//
|
|
663
|
+
// Rimuovi il prefisso della locale dal percorso per costruire un percorso base
|
|
669
664
|
const pathWithoutLocale = getPathWithoutLocale(
|
|
670
665
|
pathname // Percorso URL corrente
|
|
671
666
|
);
|
|
672
667
|
|
|
673
668
|
/**
|
|
674
|
-
* Se middleware.prefixDefault è true, la
|
|
669
|
+
* Se middleware.prefixDefault è true, la locale di default deve sempre essere prefissata.
|
|
675
670
|
*/
|
|
676
671
|
if (middleware.prefixDefault) {
|
|
677
|
-
// Valida la
|
|
672
|
+
// Valida la locale
|
|
678
673
|
if (!locale || !locales.includes(locale)) {
|
|
679
|
-
// Reindirizza alla
|
|
674
|
+
// Reindirizza alla locale di default con il percorso aggiornato
|
|
680
675
|
return (
|
|
681
676
|
<Navigate
|
|
682
677
|
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
683
|
-
replace // Sostituisce la voce corrente
|
|
678
|
+
replace // Sostituisce la voce corrente nella cronologia con quella nuova
|
|
684
679
|
/>
|
|
685
680
|
);
|
|
686
681
|
}
|
|
@@ -692,7 +687,7 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
692
687
|
} else {
|
|
693
688
|
/**
|
|
694
689
|
* Quando middleware.prefixDefault è falso, la locale predefinita non è prefissata.
|
|
695
|
-
*
|
|
690
|
+
* Assicurarsi che la locale corrente sia valida e non la locale predefinita.
|
|
696
691
|
*/
|
|
697
692
|
if (
|
|
698
693
|
currentLocale.toString() !== defaultLocale.toString() &&
|
|
@@ -700,13 +695,13 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
700
695
|
.filter(
|
|
701
696
|
(locale) => locale.toString() !== defaultLocale.toString() // Esclude la locale predefinita
|
|
702
697
|
)
|
|
703
|
-
.includes(currentLocale) // Controlla se la
|
|
698
|
+
.includes(currentLocale) // Controlla se la locale corrente è nella lista delle locale valide
|
|
704
699
|
) {
|
|
705
|
-
// Reindirizza al percorso senza prefisso della
|
|
700
|
+
// Reindirizza al percorso senza prefisso della locale
|
|
706
701
|
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
707
702
|
}
|
|
708
703
|
|
|
709
|
-
// Avvolge i figli con IntlayerProvider e imposta la
|
|
704
|
+
// Avvolge i figli con IntlayerProvider e imposta la locale corrente
|
|
710
705
|
return (
|
|
711
706
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
712
707
|
);
|
|
@@ -714,8 +709,8 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
|
|
|
714
709
|
};
|
|
715
710
|
|
|
716
711
|
/**
|
|
717
|
-
* Un componente router che configura le rotte specifiche per
|
|
718
|
-
* Usa React Router per gestire la navigazione e
|
|
712
|
+
* Un componente router che configura le rotte specifiche per la locale.
|
|
713
|
+
* Usa React Router per gestire la navigazione e renderizzare componenti localizzati.
|
|
719
714
|
*/
|
|
720
715
|
export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
721
716
|
<BrowserRouter>
|
|
@@ -734,7 +729,7 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
|
734
729
|
))}
|
|
735
730
|
|
|
736
731
|
{
|
|
737
|
-
// Se il prefisso per la locale predefinita è disabilitato, renderizza i figli direttamente
|
|
732
|
+
// Se il prefisso per la locale predefinita è disabilitato, renderizza i figli direttamente nel percorso root
|
|
738
733
|
!middleware.prefixDefault && (
|
|
739
734
|
<Route
|
|
740
735
|
path="*"
|
|
@@ -750,7 +745,7 @@ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
|
|
|
750
745
|
```
|
|
751
746
|
|
|
752
747
|
```jsx fileName="src/components/LocaleRouter.mjx" codeFormat="esm"
|
|
753
|
-
// Importazione delle dipendenze e
|
|
748
|
+
// Importazione delle dipendenze e funzioni necessarie
|
|
754
749
|
import { configuration, getPathWithoutLocale } from "intlayer"; // Funzioni e tipi di utilità da 'intlayer'
|
|
755
750
|
// Funzioni e tipi di utilità da 'intlayer'
|
|
756
751
|
import { IntlayerProvider } from "react-intlayer"; // Provider per il contesto di internazionalizzazione
|
|
@@ -760,19 +755,19 @@ import {
|
|
|
760
755
|
Route,
|
|
761
756
|
Navigate,
|
|
762
757
|
useLocation,
|
|
763
|
-
} from "react-router-dom"; // Componenti del router per
|
|
758
|
+
} from "react-router-dom"; // Componenti del router per la gestione della navigazione
|
|
764
759
|
|
|
765
760
|
// Destrutturazione della configurazione da Intlayer
|
|
766
761
|
const { internationalization, middleware } = configuration;
|
|
767
762
|
const { locales, defaultLocale } = internationalization;
|
|
768
763
|
|
|
769
764
|
/**
|
|
770
|
-
* Un componente che gestisce la localizzazione e avvolge i
|
|
765
|
+
* Un componente che gestisce la localizzazione e avvolge i figli con il contesto della locale appropriata.
|
|
771
766
|
/**
|
|
772
767
|
* Gestisce il rilevamento e la validazione della localizzazione basata sull'URL.
|
|
773
768
|
*/
|
|
774
769
|
const AppLocalized = ({ children, locale }) => {
|
|
775
|
-
const { pathname, search } = useLocation(); //
|
|
770
|
+
const { pathname, search } = useLocation(); // Ottiene il percorso URL corrente
|
|
776
771
|
|
|
777
772
|
// Determina la localizzazione corrente, utilizzando quella di default se non fornita
|
|
778
773
|
const currentLocale = locale ?? defaultLocale;
|
|
@@ -792,7 +787,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
792
787
|
return (
|
|
793
788
|
<Navigate
|
|
794
789
|
to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
|
|
795
|
-
replace // Sostituisce la voce corrente
|
|
790
|
+
replace // Sostituisce la voce corrente della cronologia con quella nuova
|
|
796
791
|
/>
|
|
797
792
|
);
|
|
798
793
|
}
|
|
@@ -803,8 +798,8 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
803
798
|
);
|
|
804
799
|
} else {
|
|
805
800
|
/**
|
|
806
|
-
* Quando middleware.prefixDefault è
|
|
807
|
-
*
|
|
801
|
+
* Quando middleware.prefixDefault è false, la locale predefinita non è prefissata.
|
|
802
|
+
* Assicura che la locale corrente sia valida e non sia la locale predefinita.
|
|
808
803
|
*/
|
|
809
804
|
if (
|
|
810
805
|
currentLocale.toString() !== defaultLocale.toString() &&
|
|
@@ -826,7 +821,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
826
821
|
};
|
|
827
822
|
|
|
828
823
|
/**
|
|
829
|
-
* Un componente router che configura le rotte specifiche per localizzazione.
|
|
824
|
+
* Un componente router che configura le rotte specifiche per la localizzazione.
|
|
830
825
|
* Utilizza React Router per gestire la navigazione e rendere i componenti localizzati.
|
|
831
826
|
*/
|
|
832
827
|
export const LocaleRouter = ({ children }) => (
|
|
@@ -838,7 +833,7 @@ export const LocaleRouter = ({ children }) => (
|
|
|
838
833
|
)
|
|
839
834
|
.map((locale) => (
|
|
840
835
|
<Route
|
|
841
|
-
//
|
|
836
|
+
// Modello di percorso per catturare la locale (es. /en/, /fr/) e abbinare tutti i percorsi successivi
|
|
842
837
|
path={`/${locale}/*`}
|
|
843
838
|
key={locale}
|
|
844
839
|
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Avvolge i figli con la gestione della locale
|
|
@@ -846,7 +841,7 @@ export const LocaleRouter = ({ children }) => (
|
|
|
846
841
|
))}
|
|
847
842
|
|
|
848
843
|
{
|
|
849
|
-
// Se il prefisso
|
|
844
|
+
// Se il prefisso per la locale predefinita è disabilitato, renderizza i figli direttamente al percorso root
|
|
850
845
|
!middleware.prefixDefault && (
|
|
851
846
|
<Route
|
|
852
847
|
path="*"
|
|
@@ -862,9 +857,24 @@ export const LocaleRouter = ({ children }) => (
|
|
|
862
857
|
```
|
|
863
858
|
|
|
864
859
|
```jsx fileName="src/components/LocaleRouter.cjx" codeFormat="commonjs"
|
|
860
|
+
// Importazione delle dipendenze e delle funzioni necessarie
|
|
861
|
+
const { configuration, getPathWithoutLocale } = require("intlayer"); // Funzioni e tipi di utilità da 'intlayer'
|
|
862
|
+
const { IntlayerProvider, useLocale } = require("react-intlayer"); // Provider per il contesto di internazionalizzazione
|
|
863
|
+
const {
|
|
864
|
+
BrowserRouter,
|
|
865
|
+
Routes,
|
|
866
|
+
Route,
|
|
867
|
+
Navigate,
|
|
868
|
+
useLocation,
|
|
869
|
+
} = require("react-router-dom"); // Componenti del router per la gestione della navigazione
|
|
870
|
+
|
|
871
|
+
// Destrutturazione della configurazione da Intlayer
|
|
872
|
+
const { internationalization, middleware } = configuration;
|
|
873
|
+
const { locales, defaultLocale } = internationalization;
|
|
874
|
+
|
|
865
875
|
/**
|
|
866
|
-
* Un componente che gestisce la localizzazione e avvolge i figli con il contesto
|
|
867
|
-
* Gestisce il rilevamento e la validazione della
|
|
876
|
+
* Un componente che gestisce la localizzazione e avvolge i figli con il contesto locale appropriato.
|
|
877
|
+
* Gestisce il rilevamento e la validazione della locale basata sull'URL.
|
|
868
878
|
*/
|
|
869
879
|
const AppLocalized = ({ children, locale }) => {
|
|
870
880
|
const { pathname, search } = useLocation(); // Ottieni il percorso URL corrente
|
|
@@ -872,7 +882,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
872
882
|
// Determina la locale corrente, utilizzando quella di default se non fornita
|
|
873
883
|
const currentLocale = locale ?? defaultLocale;
|
|
874
884
|
|
|
875
|
-
//
|
|
885
|
+
// Rimuove il prefisso della locale dal percorso per costruire un percorso base
|
|
876
886
|
const pathWithoutLocale = getPathWithoutLocale(
|
|
877
887
|
pathname // Percorso URL corrente
|
|
878
888
|
);
|
|
@@ -898,22 +908,22 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
898
908
|
);
|
|
899
909
|
} else {
|
|
900
910
|
/**
|
|
901
|
-
* Quando middleware.prefixDefault è falso, la locale
|
|
902
|
-
* Assicurarsi che la locale corrente sia valida e non la locale
|
|
911
|
+
* Quando middleware.prefixDefault è falso, la locale di default non è prefissata.
|
|
912
|
+
* Assicurarsi che la locale corrente sia valida e non la locale di default.
|
|
903
913
|
*/
|
|
904
914
|
if (
|
|
905
915
|
currentLocale.toString() !== defaultLocale.toString() &&
|
|
906
916
|
!locales
|
|
907
917
|
.filter(
|
|
908
|
-
(locale) => locale.toString() !== defaultLocale.toString() // Esclude la locale
|
|
918
|
+
(locale) => locale.toString() !== defaultLocale.toString() // Esclude la locale di default
|
|
909
919
|
)
|
|
910
|
-
.includes(currentLocale) //
|
|
920
|
+
.includes(currentLocale) // Controlla se la locale corrente è nella lista delle locale valide
|
|
911
921
|
) {
|
|
912
|
-
// Reindirizza al percorso senza prefisso della
|
|
922
|
+
// Reindirizza al percorso senza prefisso della lingua
|
|
913
923
|
return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
|
|
914
924
|
}
|
|
915
925
|
|
|
916
|
-
// Avvolge i figli con IntlayerProvider e imposta la
|
|
926
|
+
// Avvolge i figli con IntlayerProvider e imposta la lingua corrente
|
|
917
927
|
return (
|
|
918
928
|
<IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
|
|
919
929
|
);
|
|
@@ -921,7 +931,7 @@ const AppLocalized = ({ children, locale }) => {
|
|
|
921
931
|
};
|
|
922
932
|
|
|
923
933
|
/**
|
|
924
|
-
* Un componente router che configura le rotte specifiche per
|
|
934
|
+
* Un componente router che configura le rotte specifiche per la lingua.
|
|
925
935
|
* Utilizza React Router per gestire la navigazione e rendere i componenti localizzati.
|
|
926
936
|
*/
|
|
927
937
|
const LocaleRouter = ({ children }) => (
|
|
@@ -933,7 +943,7 @@ const LocaleRouter = ({ children }) => (
|
|
|
933
943
|
)
|
|
934
944
|
.map((locale) => (
|
|
935
945
|
<Route
|
|
936
|
-
//
|
|
946
|
+
// Pattern della rotta per catturare la lingua (es. /en/, /fr/) e corrispondere a tutti i percorsi successivi
|
|
937
947
|
path={`/${locale}/*`}
|
|
938
948
|
key={locale}
|
|
939
949
|
element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Avvolge i figli con la gestione della localizzazione
|
|
@@ -941,7 +951,7 @@ const LocaleRouter = ({ children }) => (
|
|
|
941
951
|
))}
|
|
942
952
|
|
|
943
953
|
{
|
|
944
|
-
// Se il prefisso per la localizzazione predefinita è disabilitato, renderizza i figli direttamente al percorso
|
|
954
|
+
// Se il prefisso per la localizzazione predefinita è disabilitato, renderizza i figli direttamente al percorso radice
|
|
945
955
|
!middleware.prefixDefault && (
|
|
946
956
|
<Route
|
|
947
957
|
path="*"
|
|
@@ -956,7 +966,7 @@ const LocaleRouter = ({ children }) => (
|
|
|
956
966
|
);
|
|
957
967
|
```
|
|
958
968
|
|
|
959
|
-
|
|
969
|
+
Quindi, puoi utilizzare il componente `LocaleRouter` nella tua applicazione:
|
|
960
970
|
|
|
961
971
|
```tsx fileName="src/App.tsx" codeFormat="typescript"
|
|
962
972
|
import { LocaleRouter } from "./components/LocaleRouter";
|
|
@@ -995,7 +1005,7 @@ const App = () => (
|
|
|
995
1005
|
);
|
|
996
1006
|
```
|
|
997
1007
|
|
|
998
|
-
In parallelo, puoi anche utilizzare il `intLayerMiddlewarePlugin` per aggiungere il routing lato server alla tua applicazione. Questo plugin rileverà automaticamente la locale corrente basandosi sull'URL e imposterà il cookie della locale appropriata. Se non viene specificata alcuna locale, il plugin determinerà la locale più
|
|
1008
|
+
In parallelo, puoi anche utilizzare il `intLayerMiddlewarePlugin` per aggiungere il routing lato server alla tua applicazione. Questo plugin rileverà automaticamente la locale corrente basandosi sull'URL e imposterà il cookie della locale appropriata. Se non viene specificata alcuna locale, il plugin determinerà la locale più adatta in base alle preferenze linguistiche del browser dell'utente. Se non viene rilevata alcuna locale, verrà effettuato un reindirizzamento alla locale predefinita.
|
|
999
1009
|
|
|
1000
1010
|
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
1001
1011
|
import { defineConfig } from "vite";
|
|
@@ -1032,7 +1042,7 @@ module.exports = defineConfig({
|
|
|
1032
1042
|
|
|
1033
1043
|
### (Opzionale) Passo 8: Cambiare l'URL quando la lingua cambia
|
|
1034
1044
|
|
|
1035
|
-
Per cambiare l'URL quando la lingua cambia, puoi usare la proprietà `onLocaleChange` fornita
|
|
1045
|
+
Per cambiare l'URL quando la lingua cambia, puoi usare la proprietà `onLocaleChange` fornita dall'hook `useLocale`. Parallelamente, puoi usare gli hook `useLocation` e `useNavigate` di `react-router-dom` per aggiornare il percorso dell'URL.
|
|
1036
1046
|
|
|
1037
1047
|
```tsx fileName="src/components/LocaleSwitcher.tsx" codeFormat="typescript"
|
|
1038
1048
|
import { useLocation, useNavigate } from "react-router-dom";
|
|
@@ -1076,15 +1086,15 @@ const LocaleSwitcher: FC = () => {
|
|
|
1076
1086
|
key={localeItem}
|
|
1077
1087
|
>
|
|
1078
1088
|
<span>
|
|
1079
|
-
{/*
|
|
1089
|
+
{/* Località - es. FR */}
|
|
1080
1090
|
{localeItem}
|
|
1081
1091
|
</span>
|
|
1082
1092
|
<span>
|
|
1083
|
-
{/* Lingua nella sua stessa
|
|
1093
|
+
{/* Lingua nella sua stessa località - es. Français */}
|
|
1084
1094
|
{getLocaleName(localeItem, locale)}
|
|
1085
1095
|
</span>
|
|
1086
1096
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1087
|
-
{/* Lingua nella
|
|
1097
|
+
{/* Lingua nella località corrente - es. Francés con la località corrente impostata su Locales.SPANISH */}
|
|
1088
1098
|
{getLocaleName(localeItem)}
|
|
1089
1099
|
</span>
|
|
1090
1100
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
@@ -1148,7 +1158,7 @@ const LocaleSwitcher = () => {
|
|
|
1148
1158
|
{getLocaleName(localeItem, locale)}
|
|
1149
1159
|
</span>
|
|
1150
1160
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1151
|
-
{/* Lingua nella
|
|
1161
|
+
{/* Lingua nella localizzazione corrente - es. Francés con la localizzazione corrente impostata su Locales.SPANISH */}
|
|
1152
1162
|
{getLocaleName(localeItem)}
|
|
1153
1163
|
</span>
|
|
1154
1164
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
@@ -1204,15 +1214,15 @@ const LocaleSwitcher = () => {
|
|
|
1204
1214
|
key={localeItem}
|
|
1205
1215
|
>
|
|
1206
1216
|
<span>
|
|
1207
|
-
{/*
|
|
1217
|
+
{/* Locale - es. FR */}
|
|
1208
1218
|
{localeItem}
|
|
1209
1219
|
</span>
|
|
1210
1220
|
<span>
|
|
1211
|
-
{/* Lingua nella sua stessa
|
|
1221
|
+
{/* Lingua nella sua stessa Locale - es. Français */}
|
|
1212
1222
|
{getLocaleName(localeItem, locale)}
|
|
1213
1223
|
</span>
|
|
1214
1224
|
<span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
|
|
1215
|
-
{/* Lingua nella
|
|
1225
|
+
{/* Lingua nella Locale corrente - es. Francés con la locale corrente impostata su Locales.SPANISH */}
|
|
1216
1226
|
{getLocaleName(localeItem)}
|
|
1217
1227
|
</span>
|
|
1218
1228
|
<span dir="ltr" lang={Locales.ENGLISH}>
|
|
@@ -1242,19 +1252,19 @@ Di seguito il **Passo 9** aggiornato con spiegazioni aggiuntive ed esempi di cod
|
|
|
1242
1252
|
|
|
1243
1253
|
---
|
|
1244
1254
|
|
|
1245
|
-
### (Opzionale) Passo 9: Cambiare gli attributi di lingua e direzione dell
|
|
1255
|
+
### (Opzionale) Passo 9: Cambiare gli attributi di lingua e direzione dell’HTML
|
|
1246
1256
|
|
|
1247
1257
|
Quando la tua applicazione supporta più lingue, è fondamentale aggiornare gli attributi `lang` e `dir` del tag `<html>` per corrispondere alla locale corrente. Questo garantisce:
|
|
1248
1258
|
|
|
1249
1259
|
- **Accessibilità**: I lettori di schermo e le tecnologie assistive si basano sull'attributo `lang` corretto per pronunciare e interpretare accuratamente il contenuto.
|
|
1250
1260
|
- **Rendering del testo**: L'attributo `dir` (direzione) assicura che il testo venga visualizzato nell'ordine corretto (ad esempio, da sinistra a destra per l'inglese, da destra a sinistra per l'arabo o l'ebraico), essenziale per la leggibilità.
|
|
1251
|
-
- **SEO**: I motori di ricerca utilizzano l'attributo `lang` per determinare la lingua della tua pagina, aiutando a
|
|
1261
|
+
- **SEO**: I motori di ricerca utilizzano l'attributo `lang` per determinare la lingua della tua pagina, aiutando a mostrare il contenuto localizzato appropriato nei risultati di ricerca.
|
|
1252
1262
|
|
|
1253
1263
|
Aggiornando dinamicamente questi attributi quando la lingua cambia, garantisci un'esperienza coerente e accessibile per gli utenti in tutte le lingue supportate.
|
|
1254
1264
|
|
|
1255
1265
|
#### Implementazione del Hook
|
|
1256
1266
|
|
|
1257
|
-
Crea un hook personalizzato per gestire gli attributi HTML.
|
|
1267
|
+
Crea un hook personalizzato per gestire gli attributi HTML. L'hook ascolta i cambiamenti della lingua e aggiorna gli attributi di conseguenza:
|
|
1258
1268
|
|
|
1259
1269
|
```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
|
|
1260
1270
|
import { useEffect } from "react";
|
|
@@ -1263,7 +1273,7 @@ import { getHTMLTextDir } from "intlayer";
|
|
|
1263
1273
|
|
|
1264
1274
|
/**
|
|
1265
1275
|
* Aggiorna gli attributi `lang` e `dir` dell'elemento HTML <html> in base alla lingua corrente.
|
|
1266
|
-
* - `lang`: Informa
|
|
1276
|
+
* - `lang`: Informa browser e motori di ricerca sulla lingua della pagina.
|
|
1267
1277
|
* - `dir`: Garantisce l'ordine di lettura corretto (es. 'ltr' per inglese, 'rtl' per arabo).
|
|
1268
1278
|
*
|
|
1269
1279
|
* Questo aggiornamento dinamico è essenziale per una corretta resa del testo, accessibilità e SEO.
|
|
@@ -1272,10 +1282,10 @@ export const useI18nHTMLAttributes = () => {
|
|
|
1272
1282
|
const { locale } = useLocale();
|
|
1273
1283
|
|
|
1274
1284
|
useEffect(() => {
|
|
1275
|
-
// Aggiorna l'attributo della lingua
|
|
1285
|
+
// Aggiorna l'attributo della lingua all'attuale locale.
|
|
1276
1286
|
document.documentElement.lang = locale;
|
|
1277
1287
|
|
|
1278
|
-
// Imposta la direzione del testo in base
|
|
1288
|
+
// Imposta la direzione del testo in base all'attuale locale.
|
|
1279
1289
|
document.documentElement.dir = getHTMLTextDir(locale);
|
|
1280
1290
|
}, [locale]);
|
|
1281
1291
|
};
|
|
@@ -1287,7 +1297,7 @@ import { useLocale } from "react-intlayer";
|
|
|
1287
1297
|
import { getHTMLTextDir } from "intlayer";
|
|
1288
1298
|
|
|
1289
1299
|
/**
|
|
1290
|
-
* Aggiorna gli attributi `lang` e `dir` dell'elemento HTML <html> in base
|
|
1300
|
+
* Aggiorna gli attributi `lang` e `dir` dell'elemento HTML <html> in base al locale corrente.
|
|
1291
1301
|
* - `lang`: Informa i browser e i motori di ricerca sulla lingua della pagina.
|
|
1292
1302
|
* - `dir`: Garantisce l'ordine di lettura corretto (ad esempio, 'ltr' per l'inglese, 'rtl' per l'arabo).
|
|
1293
1303
|
*
|
|
@@ -1404,17 +1414,33 @@ module.exports = App;
|
|
|
1404
1414
|
|
|
1405
1415
|
Applicando queste modifiche, la tua applicazione:
|
|
1406
1416
|
|
|
1407
|
-
- Garantirà che l'attributo **language** (`lang`) rifletta correttamente la locale corrente, importante per SEO e comportamento del browser.
|
|
1408
|
-
- Adatterà la **direzione del testo** (`dir`) in base alla locale, migliorando leggibilità e usabilità per lingue con ordini di lettura differenti.
|
|
1409
|
-
- Fornirà un'esperienza più **accessibile**, poiché le tecnologie assistive
|
|
1417
|
+
- Garantirà che l'attributo **language** (`lang`) rifletta correttamente la locale corrente, importante per la SEO e il comportamento del browser.
|
|
1418
|
+
- Adatterà la **direzione del testo** (`dir`) in base alla locale, migliorando la leggibilità e l'usabilità per lingue con ordini di lettura differenti.
|
|
1419
|
+
- Fornirà un'esperienza più **accessibile**, poiché le tecnologie assistive si basano su questi attributi per funzionare al meglio.
|
|
1420
|
+
|
|
1421
|
+
### (Opzionale) Passo 10: Creare un componente Link localizzato
|
|
1422
|
+
|
|
1423
|
+
// Applica l'hook per aggiornare gli attributi lang e dir del tag <html> in base alla locale.
|
|
1424
|
+
useI18nHTMLAttributes();
|
|
1425
|
+
|
|
1426
|
+
// ... Resto del tuo componente
|
|
1427
|
+
};
|
|
1428
|
+
|
|
1429
|
+
const App = () => (
|
|
1430
|
+
<IntlayerProvider>
|
|
1431
|
+
<AppContent />
|
|
1432
|
+
</IntlayerProvider>
|
|
1433
|
+
);
|
|
1434
|
+
|
|
1435
|
+
module.exports = App;
|
|
1410
1436
|
|
|
1411
|
-
|
|
1437
|
+
````
|
|
1412
1438
|
|
|
1413
1439
|
Applicando queste modifiche, la tua applicazione:
|
|
1414
1440
|
|
|
1415
|
-
- Garantirà che l'attributo **
|
|
1441
|
+
- Garantirà che l'attributo **lingua** (`lang`) rifletta correttamente la locale corrente, cosa importante per la SEO e il comportamento del browser.
|
|
1416
1442
|
- Adatterà la **direzione del testo** (`dir`) in base alla locale, migliorando la leggibilità e l'usabilità per le lingue con ordini di lettura differenti.
|
|
1417
|
-
- Fornirà un'esperienza più **accessibile**, poiché le tecnologie assistive dipendono da questi attributi per funzionare
|
|
1443
|
+
- Fornirà un'esperienza più **accessibile**, poiché le tecnologie assistive dipendono da questi attributi per funzionare in modo ottimale.
|
|
1418
1444
|
|
|
1419
1445
|
### (Opzionale) Passo 10: Creare un componente Link localizzato
|
|
1420
1446
|
|
|
@@ -1423,7 +1449,7 @@ Per garantire che la navigazione della tua applicazione rispetti la lingua corre
|
|
|
1423
1449
|
Questo comportamento è utile per diversi motivi:
|
|
1424
1450
|
|
|
1425
1451
|
- **SEO e esperienza utente**: Gli URL localizzati aiutano i motori di ricerca a indicizzare correttamente le pagine specifiche per lingua e forniscono agli utenti contenuti nella loro lingua preferita.
|
|
1426
|
-
- **Coerenza**: Utilizzando un link localizzato in tutta l'applicazione, garantisci che la navigazione rimanga all'interno della lingua corrente, evitando cambiamenti di lingua
|
|
1452
|
+
- **Coerenza**: Utilizzando un link localizzato in tutta l'applicazione, garantisci che la navigazione rimanga all'interno della lingua corrente, evitando cambiamenti di lingua imprevisti.
|
|
1427
1453
|
- **Manutenibilità**: Centralizzare la logica di localizzazione in un unico componente semplifica la gestione degli URL, rendendo il tuo codice più facile da mantenere ed estendere man mano che la tua applicazione cresce.
|
|
1428
1454
|
|
|
1429
1455
|
Di seguito è riportata l'implementazione di un componente `Link` localizzato in TypeScript:
|
|
@@ -1452,8 +1478,8 @@ export const checkIsExternalLink = (href?: string): boolean =>
|
|
|
1452
1478
|
|
|
1453
1479
|
/**
|
|
1454
1480
|
* Un componente Link personalizzato che adatta l'attributo href in base alla locale corrente.
|
|
1455
|
-
* Per i link interni, utilizza `getLocalizedUrl` per
|
|
1456
|
-
* Questo garantisce che la navigazione rimanga all'interno dello stesso contesto locale.
|
|
1481
|
+
* Per i link interni, utilizza `getLocalizedUrl` per aggiungere il prefisso della locale all'URL (es. /fr/about).
|
|
1482
|
+
* Questo garantisce che la navigazione rimanga all'interno dello stesso contesto di locale.
|
|
1457
1483
|
*/
|
|
1458
1484
|
export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
|
|
1459
1485
|
({ href, children, ...props }, ref) => {
|
|
@@ -1473,7 +1499,7 @@ export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
|
|
|
1473
1499
|
);
|
|
1474
1500
|
|
|
1475
1501
|
Link.displayName = "Link";
|
|
1476
|
-
|
|
1502
|
+
````
|
|
1477
1503
|
|
|
1478
1504
|
```jsx fileName="src/components/Link.mjx" codeFormat="esm"
|
|
1479
1505
|
import { getLocalizedUrl } from "intlayer";
|
|
@@ -1488,9 +1514,9 @@ export const checkIsExternalLink = (href?: string): boolean =>
|
|
|
1488
1514
|
/^https?:\/\//.test(href ?? "");
|
|
1489
1515
|
|
|
1490
1516
|
/**
|
|
1491
|
-
*
|
|
1517
|
+
* Un componente Link personalizzato che adatta l'attributo href in base alla locale corrente.
|
|
1492
1518
|
* Per i link interni, utilizza `getLocalizedUrl` per aggiungere il prefisso della locale all'URL (es. /fr/about).
|
|
1493
|
-
* Questo garantisce che la navigazione rimanga all'interno dello stesso contesto locale.
|
|
1519
|
+
* Questo garantisce che la navigazione rimanga all'interno dello stesso contesto di locale.
|
|
1494
1520
|
*/
|
|
1495
1521
|
export const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
1496
1522
|
const { locale } = useLocale();
|
|
@@ -1524,7 +1550,7 @@ const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
|
|
|
1524
1550
|
/**
|
|
1525
1551
|
* Un componente Link personalizzato che adatta l'attributo href in base alla locale corrente.
|
|
1526
1552
|
* Per i link interni, utilizza `getLocalizedUrl` per anteporre la locale all'URL (es. /fr/about).
|
|
1527
|
-
* Questo garantisce che la navigazione rimanga all'interno dello stesso contesto locale.
|
|
1553
|
+
* Questo garantisce che la navigazione rimanga all'interno dello stesso contesto di locale.
|
|
1528
1554
|
*/
|
|
1529
1555
|
const Link = forwardRef(({ href, children, ...props }, ref) => {
|
|
1530
1556
|
const { locale } = useLocale();
|
|
@@ -1554,14 +1580,32 @@ Link.displayName = "Link";
|
|
|
1554
1580
|
La funzione di supporto `checkIsExternalLink` determina se un URL è esterno. I link esterni vengono lasciati invariati perché non necessitano di localizzazione.
|
|
1555
1581
|
|
|
1556
1582
|
- **Recupero della Locale Corrente**:
|
|
1557
|
-
L'hook `useLocale` fornisce la locale corrente (ad esempio, `fr` per
|
|
1583
|
+
L'hook `useLocale` fornisce la locale corrente (ad esempio, `fr` per francese).
|
|
1558
1584
|
|
|
1559
1585
|
- **Localizzazione dell'URL**:
|
|
1560
|
-
Per i link interni (cioè non esterni), `getLocalizedUrl` viene utilizzato per aggiungere automaticamente il prefisso della locale corrente all'URL. Ciò significa che se l'utente è in francese, passando `/about` come `href
|
|
1586
|
+
Per i link interni (cioè non esterni), `getLocalizedUrl` viene utilizzato per aggiungere automaticamente il prefisso della locale corrente all'URL. Ciò significa che se l'utente è in francese, passando `/about` come `href` verrà trasformato in `/fr/about`.
|
|
1561
1587
|
|
|
1562
1588
|
- **Restituzione del Link**:
|
|
1563
1589
|
Il componente restituisce un elemento `<a>` con l'URL localizzato, garantendo che la navigazione sia coerente con la lingua selezionata.
|
|
1564
1590
|
|
|
1591
|
+
Integrando questo componente `Link` in tutta la tua applicazione, mantieni un'esperienza utente coerente e consapevole della lingua, beneficiando anche di un miglior SEO e usabilità.
|
|
1592
|
+
|
|
1593
|
+
### Configurare TypeScript
|
|
1594
|
+
|
|
1595
|
+
Intlayer utilizza l'augmentation dei moduli per sfruttare i vantaggi di TypeScript e rendere il tuo codice più robusto.
|
|
1596
|
+
|
|
1597
|
+

|
|
1598
|
+
|
|
1599
|
+

|
|
1600
|
+
|
|
1601
|
+
Assicurati che la tua configurazione di TypeScript includa i tipi generati automaticamente.
|
|
1602
|
+
|
|
1603
|
+
````json5 fileName="tsconfig.json"
|
|
1604
|
+
{
|
|
1605
|
+
// ... Le tue configurazioni TypeScript esistenti
|
|
1606
|
+
"include": [
|
|
1607
|
+
Il componente restituisce un elemento `<a>` con l'URL localizzato, garantendo che la navigazione sia coerente con la lingua selezionata.
|
|
1608
|
+
|
|
1565
1609
|
Integrando questo componente `Link` in tutta la tua applicazione, mantieni un'esperienza utente coerente e consapevole della lingua, beneficiando inoltre di un miglior SEO e usabilità.
|
|
1566
1610
|
|
|
1567
1611
|
### Configurare TypeScript
|
|
@@ -1572,7 +1616,7 @@ Intlayer utilizza l'augmentation dei moduli per sfruttare i vantaggi di TypeScri
|
|
|
1572
1616
|
|
|
1573
1617
|

|
|
1574
1618
|
|
|
1575
|
-
Assicurati che la configurazione
|
|
1619
|
+
Assicurati che la tua configurazione TypeScript includa i tipi generati automaticamente.
|
|
1576
1620
|
|
|
1577
1621
|
```json5 fileName="tsconfig.json"
|
|
1578
1622
|
{
|
|
@@ -1582,7 +1626,7 @@ Assicurati che la configurazione di TypeScript includa i tipi generati automatic
|
|
|
1582
1626
|
".intlayer/**/*.ts", // Includi i tipi generati automaticamente
|
|
1583
1627
|
],
|
|
1584
1628
|
}
|
|
1585
|
-
|
|
1629
|
+
````
|
|
1586
1630
|
|
|
1587
1631
|
### Configurazione Git
|
|
1588
1632
|
|
|
@@ -1597,14 +1641,14 @@ Per farlo, puoi aggiungere le seguenti istruzioni al tuo file `.gitignore`:
|
|
|
1597
1641
|
|
|
1598
1642
|
### Estensione VS Code
|
|
1599
1643
|
|
|
1600
|
-
Per migliorare la tua esperienza di sviluppo con Intlayer, puoi installare l
|
|
1644
|
+
Per migliorare la tua esperienza di sviluppo con Intlayer, puoi installare l'estensione ufficiale **Intlayer VS Code Extension**.
|
|
1601
1645
|
|
|
1602
1646
|
[Installa dal Marketplace di VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
1603
1647
|
|
|
1604
1648
|
Questa estensione offre:
|
|
1605
1649
|
|
|
1606
1650
|
- **Completamento automatico** per le chiavi di traduzione.
|
|
1607
|
-
- **Rilevamento errori in tempo reale** per traduzioni mancanti.
|
|
1651
|
+
- **Rilevamento errori in tempo reale** per le traduzioni mancanti.
|
|
1608
1652
|
- **Anteprime inline** del contenuto tradotto.
|
|
1609
1653
|
- **Azioni rapide** per creare e aggiornare facilmente le traduzioni.
|
|
1610
1654
|
|
|
@@ -1614,7 +1658,7 @@ Per maggiori dettagli su come utilizzare l'estensione, consulta la [documentazio
|
|
|
1614
1658
|
|
|
1615
1659
|
### Approfondimenti
|
|
1616
1660
|
|
|
1617
|
-
Per approfondire, puoi implementare l'[editor visuale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_visual_editor.md)
|
|
1661
|
+
Per approfondire, puoi implementare l'[editor visuale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_visual_editor.md) o esternalizzare i tuoi contenuti utilizzando il [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_CMS.md).
|
|
1618
1662
|
|
|
1619
1663
|
---
|
|
1620
1664
|
|