@intlayer/docs 7.3.14 → 7.3.15

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.
Files changed (159) hide show
  1. package/blog/ar/intlayer_with_i18next.md +3 -0
  2. package/blog/ar/intlayer_with_next-i18next.md +3 -0
  3. package/blog/ar/intlayer_with_next-intl.md +3 -0
  4. package/blog/ar/intlayer_with_react-i18next.md +3 -0
  5. package/blog/ar/intlayer_with_react-intl.md +3 -0
  6. package/blog/ar/intlayer_with_vue-i18n.md +3 -0
  7. package/blog/de/intlayer_with_i18next.md +3 -0
  8. package/blog/de/intlayer_with_next-i18next.md +3 -0
  9. package/blog/de/intlayer_with_next-intl.md +3 -0
  10. package/blog/de/intlayer_with_react-i18next.md +3 -0
  11. package/blog/de/intlayer_with_react-intl.md +3 -0
  12. package/blog/de/intlayer_with_vue-i18n.md +3 -0
  13. package/blog/en/intlayer_with_i18next.md +7 -0
  14. package/blog/en/intlayer_with_next-i18next.md +3 -0
  15. package/blog/en/intlayer_with_next-intl.md +7 -0
  16. package/blog/en/intlayer_with_react-i18next.md +3 -0
  17. package/blog/en/intlayer_with_react-intl.md +3 -0
  18. package/blog/en/intlayer_with_vue-i18n.md +3 -0
  19. package/blog/en-GB/intlayer_with_i18next.md +3 -0
  20. package/blog/en-GB/intlayer_with_next-i18next.md +3 -0
  21. package/blog/en-GB/intlayer_with_next-intl.md +3 -0
  22. package/blog/en-GB/intlayer_with_react-i18next.md +3 -0
  23. package/blog/en-GB/intlayer_with_react-intl.md +3 -0
  24. package/blog/en-GB/intlayer_with_vue-i18n.md +3 -0
  25. package/blog/es/intlayer_with_i18next.md +3 -0
  26. package/blog/es/intlayer_with_next-i18next.md +3 -0
  27. package/blog/es/intlayer_with_next-intl.md +3 -0
  28. package/blog/es/intlayer_with_react-i18next.md +3 -0
  29. package/blog/es/intlayer_with_react-intl.md +3 -0
  30. package/blog/es/intlayer_with_vue-i18n.md +3 -0
  31. package/blog/fr/intlayer_with_i18next.md +3 -0
  32. package/blog/fr/intlayer_with_next-i18next.md +3 -0
  33. package/blog/fr/intlayer_with_next-intl.md +3 -0
  34. package/blog/fr/intlayer_with_react-i18next.md +3 -0
  35. package/blog/fr/intlayer_with_react-intl.md +3 -0
  36. package/blog/fr/intlayer_with_vue-i18n.md +3 -0
  37. package/blog/hi/intlayer_with_i18next.md +3 -0
  38. package/blog/hi/intlayer_with_next-i18next.md +3 -0
  39. package/blog/hi/intlayer_with_next-intl.md +3 -0
  40. package/blog/hi/intlayer_with_react-i18next.md +3 -0
  41. package/blog/hi/intlayer_with_react-intl.md +3 -0
  42. package/blog/hi/intlayer_with_vue-i18n.md +3 -0
  43. package/blog/id/intlayer_with_i18next.md +3 -0
  44. package/blog/id/intlayer_with_next-i18next.md +3 -0
  45. package/blog/id/intlayer_with_next-intl.md +3 -0
  46. package/blog/id/intlayer_with_react-i18next.md +3 -0
  47. package/blog/id/intlayer_with_react-intl.md +3 -0
  48. package/blog/id/intlayer_with_vue-i18n.md +3 -0
  49. package/blog/it/intlayer_with_i18next.md +3 -0
  50. package/blog/it/intlayer_with_next-i18next.md +3 -0
  51. package/blog/it/intlayer_with_next-intl.md +3 -0
  52. package/blog/it/intlayer_with_react-i18next.md +3 -0
  53. package/blog/it/intlayer_with_react-intl.md +3 -0
  54. package/blog/it/intlayer_with_vue-i18n.md +3 -0
  55. package/blog/ja/intlayer_with_i18next.md +3 -0
  56. package/blog/ja/intlayer_with_next-i18next.md +3 -0
  57. package/blog/ja/intlayer_with_next-intl.md +3 -0
  58. package/blog/ja/intlayer_with_react-i18next.md +3 -0
  59. package/blog/ja/intlayer_with_react-intl.md +3 -0
  60. package/blog/ja/intlayer_with_vue-i18n.md +3 -0
  61. package/blog/ko/intlayer_with_i18next.md +3 -0
  62. package/blog/ko/intlayer_with_next-i18next.md +3 -0
  63. package/blog/ko/intlayer_with_next-intl.md +3 -0
  64. package/blog/ko/intlayer_with_react-i18next.md +3 -0
  65. package/blog/ko/intlayer_with_react-intl.md +3 -0
  66. package/blog/ko/intlayer_with_vue-i18n.md +3 -0
  67. package/blog/pl/intlayer_with_i18next.md +3 -0
  68. package/blog/pl/intlayer_with_next-i18next.md +3 -0
  69. package/blog/pl/intlayer_with_next-intl.md +3 -0
  70. package/blog/pl/intlayer_with_react-i18next.md +3 -0
  71. package/blog/pl/intlayer_with_react-intl.md +3 -0
  72. package/blog/pl/intlayer_with_vue-i18n.md +3 -0
  73. package/blog/pt/intlayer_with_i18next.md +3 -0
  74. package/blog/pt/intlayer_with_next-i18next.md +3 -0
  75. package/blog/pt/intlayer_with_next-intl.md +3 -0
  76. package/blog/pt/intlayer_with_react-i18next.md +3 -0
  77. package/blog/pt/intlayer_with_react-intl.md +3 -0
  78. package/blog/pt/intlayer_with_vue-i18n.md +3 -0
  79. package/blog/ru/intlayer_with_i18next.md +3 -0
  80. package/blog/ru/intlayer_with_next-i18next.md +3 -0
  81. package/blog/ru/intlayer_with_next-intl.md +3 -0
  82. package/blog/ru/intlayer_with_react-i18next.md +3 -0
  83. package/blog/ru/intlayer_with_react-intl.md +3 -0
  84. package/blog/ru/intlayer_with_vue-i18n.md +3 -0
  85. package/blog/tr/intlayer_with_i18next.md +3 -0
  86. package/blog/tr/intlayer_with_next-i18next.md +3 -0
  87. package/blog/tr/intlayer_with_next-intl.md +3 -0
  88. package/blog/tr/intlayer_with_react-i18next.md +3 -0
  89. package/blog/tr/intlayer_with_vue-i18n.md +3 -0
  90. package/blog/vi/intlayer_with_i18next.md +3 -0
  91. package/blog/vi/intlayer_with_next-i18next.md +3 -0
  92. package/blog/vi/intlayer_with_next-intl.md +3 -0
  93. package/blog/vi/intlayer_with_react-i18next.md +3 -0
  94. package/blog/vi/intlayer_with_react-intl.md +3 -0
  95. package/blog/vi/intlayer_with_vue-i18n.md +3 -0
  96. package/blog/zh/intlayer_with_i18next.md +3 -0
  97. package/blog/zh/intlayer_with_next-i18next.md +3 -0
  98. package/blog/zh/intlayer_with_next-intl.md +3 -0
  99. package/blog/zh/intlayer_with_react-i18next.md +3 -0
  100. package/blog/zh/intlayer_with_react-intl.md +3 -0
  101. package/blog/zh/intlayer_with_vue-i18n.md +3 -0
  102. package/docs/ar/intlayer_with_lynx+react.md +1 -1
  103. package/docs/ar/intlayer_with_vite+react.md +99 -331
  104. package/docs/ar/plugins/sync-json.md +3 -0
  105. package/docs/de/intlayer_with_lynx+react.md +1 -1
  106. package/docs/de/intlayer_with_vite+react.md +116 -380
  107. package/docs/de/plugins/sync-json.md +3 -0
  108. package/docs/en/intlayer_with_vite+react.md +6 -10
  109. package/docs/en/plugins/sync-json.md +3 -0
  110. package/docs/en-GB/intlayer_with_vite+react.md +62 -74
  111. package/docs/en-GB/plugins/sync-json.md +3 -0
  112. package/docs/es/intlayer_with_vite+react.md +101 -333
  113. package/docs/es/plugins/sync-json.md +3 -0
  114. package/docs/fr/intlayer_with_vite+react.md +101 -357
  115. package/docs/fr/plugins/sync-json.md +3 -0
  116. package/docs/hi/intlayer_with_vite+react.md +120 -333
  117. package/docs/hi/plugins/sync-json.md +3 -0
  118. package/docs/id/intlayer_with_vite+react.md +7 -13
  119. package/docs/id/plugins/sync-json.md +3 -0
  120. package/docs/it/intlayer_with_lynx+react.md +1 -1
  121. package/docs/it/intlayer_with_vite+react.md +121 -393
  122. package/docs/it/plugins/sync-json.md +3 -0
  123. package/docs/ja/intlayer_with_vite+react.md +106 -378
  124. package/docs/ja/plugins/sync-json.md +3 -0
  125. package/docs/ko/intlayer_with_lynx+react.md +1 -1
  126. package/docs/ko/intlayer_with_vite+react.md +90 -322
  127. package/docs/ko/plugins/sync-json.md +3 -0
  128. package/docs/pl/intlayer_with_vite+react.md +25 -21
  129. package/docs/pl/plugins/sync-json.md +3 -0
  130. package/docs/pt/intlayer_with_vite+react.md +96 -328
  131. package/docs/pt/plugins/sync-json.md +3 -0
  132. package/docs/ru/intlayer_with_lynx+react.md +1 -1
  133. package/docs/ru/intlayer_with_vite+react.md +109 -362
  134. package/docs/ru/plugins/sync-json.md +3 -0
  135. package/docs/tr/intlayer_with_vite+react.md +132 -366
  136. package/docs/tr/plugins/sync-json.md +3 -0
  137. package/docs/vi/intlayer_with_vite+react.md +16 -19
  138. package/docs/vi/plugins/sync-json.md +3 -0
  139. package/docs/zh/intlayer_with_tanstack.md +1 -1
  140. package/docs/zh/intlayer_with_vite+react.md +91 -374
  141. package/docs/zh/plugins/sync-json.md +3 -0
  142. package/frequent_questions/ar/customized_locale_list.md +1 -1
  143. package/frequent_questions/de/customized_locale_list.md +1 -1
  144. package/frequent_questions/en/customized_locale_list.md +1 -1
  145. package/frequent_questions/en-GB/customized_locale_list.md +1 -1
  146. package/frequent_questions/es/customized_locale_list.md +1 -1
  147. package/frequent_questions/fr/customized_locale_list.md +1 -1
  148. package/frequent_questions/hi/customized_locale_list.md +1 -1
  149. package/frequent_questions/id/customized_locale_list.md +1 -1
  150. package/frequent_questions/it/customized_locale_list.md +1 -1
  151. package/frequent_questions/ja/customized_locale_list.md +1 -1
  152. package/frequent_questions/ko/customized_locale_list.md +1 -1
  153. package/frequent_questions/pl/customized_locale_list.md +1 -1
  154. package/frequent_questions/pt/customized_locale_list.md +1 -1
  155. package/frequent_questions/ru/customized_locale_list.md +1 -1
  156. package/frequent_questions/tr/customized_locale_list.md +1 -1
  157. package/frequent_questions/vi/customized_locale_list.md +1 -1
  158. package/frequent_questions/zh/customized_locale_list.md +1 -1
  159. package/package.json +6 -6
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  createdAt: 2024-03-07
3
- updatedAt: 2024-03-07
4
- title: Come tradurre la tua Vite and React – guida i18n 2025
3
+ updatedAt: 2025-12-10
4
+ title: Come tradurre la tua applicazione Vite e React – guida i18n 2025
5
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
@@ -16,23 +16,19 @@ slugs:
16
16
  - environment
17
17
  - vite-and-react
18
18
  applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
19
- youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4---
19
+ youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
20
20
  history:
21
21
  - version: 5.5.10
22
22
  date: 2025-06-29
23
23
  changes: Inizio cronologia
24
24
  ---
25
25
 
26
- # Iniziare con l'internazionalizzazione (i18n) con Intlayer, Vite e React
26
+ # Traduci il tuo sito web Vite e React usando Intlayer | Internazionalizzazione (i18n)
27
27
 
28
28
  ## Indice
29
29
 
30
30
  <TOC/>
31
31
 
32
- <iframe title="The best i18n solution for Vite and React? Discover Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?si=VaKmrYMmXjo3xpk2"/>
33
-
34
- Consulta il [Template dell'Applicazione](https://github.com/aymericzip/intlayer-vite-react-template) su GitHub.
35
-
36
32
  ## Cos'è Intlayer?
37
33
 
38
34
  **Intlayer** è una libreria innovativa e open-source per l'internazionalizzazione (i18n) progettata per semplificare il supporto multilingue nelle moderne applicazioni web.
@@ -48,6 +44,27 @@ Con Intlayer, puoi:
48
44
 
49
45
  ## Guida passo-passo per configurare Intlayer in un'applicazione Vite e React
50
46
 
47
+ <Tab defaultTab="video">
48
+ <TabItem label="Video" value="video">
49
+
50
+ <iframe title="The best i18n solution for Vite and React? Discover Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?si=VaKmrYMmXjo3xpk2"/>
51
+
52
+ </TabItem>
53
+ <TabItem label="Code" value="code">
54
+
55
+ <iframe
56
+ src="https://stackblitz.com/github/aymericzip/intlayer-vite-react-template?embed=1&ctl=1&file=intlayer.config.ts"
57
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
58
+ title="Demo CodeSandbox - How to Internationalize your application using Intlayer"
59
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
60
+ loading="lazy"
61
+ />
62
+
63
+ </TabItem>
64
+ </Tab>
65
+
66
+ Consulta il [Template dell'Applicazione](https://github.com/aymericzip/intlayer-vite-react-template) su GitHub.
67
+
51
68
  ### Passo 1: Installa le dipendenze
52
69
 
53
70
  Installa i pacchetti necessari usando npm:
@@ -68,8 +85,7 @@ yarn add vite-intlayer --save-dev
68
85
  ```
69
86
 
70
87
  - **intlayer**
71
-
72
- 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).
88
+ 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/content_file.md), la traspilazione e i [comandi CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/cli/index.md).
73
89
 
74
90
  - **react-intlayer**
75
91
  Il pacchetto che integra Intlayer con le applicazioni React. Fornisce provider di contesto e hook per l'internazionalizzazione in React.
@@ -418,7 +434,7 @@ module.exports = appContent;
418
434
 
419
435
  > 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}`).
420
436
 
421
- > Per maggiori dettagli, consulta la [documentazione sulle dichiarazioni di contenuto](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/get_started.md).
437
+ > Per maggiori dettagli, consulta la [documentazione sulle dichiarazioni di contenuto](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md).
422
438
 
423
439
  > Se il tuo file di contenuto include codice TSX, dovresti considerare di importare `import React from "react";` nel tuo file di contenuto.
424
440
 
@@ -567,7 +583,7 @@ const App = () => (
567
583
  module.exports = App;
568
584
  ```
569
585
 
570
- > Se vuoi usare il tuo contenuto in un attributo `string`, come `alt`, `title`, `href`, `aria-label`, ecc., devi chiamare il valore della funzione, come:
586
+ > Se vuoi usare il tuo contenuto in un attributo di tipo `string`, come `alt`, `title`, `href`, `aria-label`, ecc., devi chiamare il valore della funzione, come:
571
587
 
572
588
  > ```jsx
573
589
  > <img src={content.image.src.value} alt={content.image.value} />
@@ -638,87 +654,15 @@ Esempio:
638
654
  - https://example.com/fr/about
639
655
  ```
640
656
 
641
- > 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.
657
+ 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.
642
658
 
643
659
  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):
644
660
 
645
661
  ```tsx fileName="src/components/LocaleRouter.tsx" codeFormat="typescript"
646
- // Importing necessary dependencies and functions
647
- import { type Locales, configuration, getPathWithoutLocale } from "intlayer"; // Funzioni di utilità e tipi da 'intlayer'
662
+ import { localeMap } from "intlayer"; // Funzioni di utilità e tipi da 'intlayer'
648
663
  import type { FC, PropsWithChildren } from "react"; // Tipi React per componenti funzionali e props
649
664
  import { IntlayerProvider } from "react-intlayer"; // Provider per il contesto di internazionalizzazione
650
- import {
651
- BrowserRouter,
652
- Routes,
653
- Route,
654
- Navigate,
655
- useLocation,
656
- } from "react-router-dom"; // Componenti router per la gestione della navigazione
657
-
658
- // Destrutturazione della configurazione da Intlayer
659
- const { internationalization, middleware } = configuration;
660
- const { locales, defaultLocale } = internationalization;
661
-
662
- /**
663
- * Un componente che gestisce la localizzazione e avvolge i figli con il contesto locale appropriato.
664
- * Gestisce il rilevamento e la validazione della lingua basata sull'URL.
665
- */
666
- const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
667
- children,
668
- locale,
669
- }) => {
670
- const { pathname, search } = useLocation(); // Ottieni il percorso URL corrente
671
-
672
- // Determina la locale corrente, utilizzando quella di default se non fornita
673
- const currentLocale = locale ?? defaultLocale;
674
-
675
- // Rimuovi il prefisso della locale dal percorso per costruire un percorso base
676
- const pathWithoutLocale = getPathWithoutLocale(
677
- pathname // Percorso URL corrente
678
- );
679
-
680
- /**
681
- * Se middleware.prefixDefault è true, la locale di default deve sempre essere prefissata.
682
- */
683
- if (middleware.prefixDefault) {
684
- // Valida la locale
685
- if (!locale || !locales.includes(locale)) {
686
- // Reindirizza alla locale di default con il percorso aggiornato
687
- return (
688
- <Navigate
689
- to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
690
- replace // Sostituisce la voce corrente nella cronologia con quella nuova
691
- />
692
- );
693
- }
694
-
695
- // Avvolge i figli con IntlayerProvider e imposta la locale corrente
696
- return (
697
- <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
698
- );
699
- } else {
700
- /**
701
- * Quando middleware.prefixDefault è falso, la locale predefinita non è prefissata.
702
- * Assicurarsi che la locale corrente sia valida e non la locale predefinita.
703
- */
704
- if (
705
- currentLocale.toString() !== defaultLocale.toString() &&
706
- !locales
707
- .filter(
708
- (locale) => locale.toString() !== defaultLocale.toString() // Esclude la locale predefinita
709
- )
710
- .includes(currentLocale) // Controlla se la locale corrente è nella lista delle locale valide
711
- ) {
712
- // Reindirizza al percorso senza prefisso della locale
713
- return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
714
- }
715
-
716
- // Avvolge i figli con IntlayerProvider e imposta la locale corrente
717
- return (
718
- <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
719
- );
720
- }
721
- };
665
+ import { BrowserRouter, Route, Routes } from "react-router-dom"; // Componenti router per la gestione della navigazione
722
666
 
723
667
  /**
724
668
  * Un componente router che configura le rotte specifiche per la locale.
@@ -727,257 +671,81 @@ const AppLocalized: FC<PropsWithChildren<{ locale: Locales }>> = ({
727
671
  export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
728
672
  <BrowserRouter>
729
673
  <Routes>
730
- {locales
731
- .filter(
732
- (locale) => middleware.prefixDefault || locale !== defaultLocale
733
- )
734
- .map((locale) => (
735
- <Route
736
- // Modello di percorso per catturare la locale (es. /en/, /fr/) e corrispondere a tutti i percorsi successivi
737
- path={`/${locale}/*`}
738
- key={locale}
739
- element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Avvolge i figli con la gestione della locale
740
- />
741
- ))}
742
-
743
- {
744
- // Se il prefisso per la locale predefinita è disabilitato, renderizza i figli direttamente nel percorso root
745
- !middleware.prefixDefault && (
746
- <Route
747
- path="*"
748
- element={
749
- <AppLocalized locale={defaultLocale}>{children}</AppLocalized>
750
- } // Avvolge i figli con la gestione della locale
751
- />
752
- )
753
- }
674
+ {localeMap(({ locale, urlPrefix }) => (
675
+ <Route
676
+ // Pattern di rotta per catturare la locale (es. /en/, /fr/) e corrispondere a tutti i percorsi successivi
677
+ path={`${urlPrefix}/*`}
678
+ key={locale}
679
+ element={
680
+ <IntlayerProvider locale={locale}>{children}</IntlayerProvider>
681
+ } // Avvolge i figli con la gestione della locale
682
+ />
683
+ ))}
754
684
  </Routes>
755
685
  </BrowserRouter>
756
686
  );
757
687
  ```
758
688
 
759
689
  ```jsx fileName="src/components/LocaleRouter.mjx" codeFormat="esm"
760
- // Importazione delle dipendenze e funzioni necessarie
761
- import { configuration, getPathWithoutLocale } from "intlayer"; // Funzioni e tipi di utilità da 'intlayer'
762
- // Funzioni e tipi di utilità da 'intlayer'
763
- import { IntlayerProvider } from "react-intlayer"; // Provider per il contesto di internazionalizzazione
764
- import {
765
- BrowserRouter,
766
- Routes,
767
- Route,
768
- Navigate,
769
- useLocation,
770
- } from "react-router-dom"; // Componenti del router per la gestione della navigazione
771
-
772
- // Destrutturazione della configurazione da Intlayer
773
- const { internationalization, middleware } = configuration;
774
- const { locales, defaultLocale } = internationalization;
775
-
776
- /**
777
- * Un componente che gestisce la localizzazione e avvolge i figli con il contesto della locale appropriata.
778
- /**
779
- * Gestisce il rilevamento e la validazione della localizzazione basata sull'URL.
780
- */
781
- const AppLocalized = ({ children, locale }) => {
782
- const { pathname, search } = useLocation(); // Ottiene il percorso URL corrente
783
-
784
- // Determina la localizzazione corrente, utilizzando quella di default se non fornita
785
- const currentLocale = locale ?? defaultLocale;
786
-
787
- // Rimuove il prefisso della localizzazione dal percorso per costruire un percorso base
788
- const pathWithoutLocale = getPathWithoutLocale(
789
- pathname // Percorso URL corrente
790
- );
791
-
792
- /**
793
- * Se middleware.prefixDefault è true, la localizzazione di default deve sempre essere prefissata.
794
- */
795
- if (middleware.prefixDefault) {
796
- // Valida la localizzazione
797
- if (!locale || !locales.includes(locale)) {
798
- // Reindirizza alla localizzazione di default con il percorso aggiornato
799
- return (
800
- <Navigate
801
- to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
802
- replace // Sostituisce la voce corrente della cronologia con quella nuova
803
- />
804
- );
805
- }
806
-
807
- // Avvolge i figli con IntlayerProvider e imposta la locale corrente
808
- return (
809
- <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
810
- );
811
- } else {
812
- /**
813
- * Quando middleware.prefixDefault è false, la locale predefinita non è prefissata.
814
- * Assicura che la locale corrente sia valida e non sia la locale predefinita.
815
- */
816
- if (
817
- currentLocale.toString() !== defaultLocale.toString() &&
818
- !locales
819
- .filter(
820
- (locale) => locale.toString() !== defaultLocale.toString() // Esclude la locale predefinita
821
- )
822
- .includes(currentLocale) // Verifica se la locale corrente è nella lista delle localizzazioni valide
823
- ) {
824
- // Reindirizza al percorso senza prefisso della localizzazione
825
- return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
826
- }
827
-
828
- // Avvolge i figli con IntlayerProvider e imposta la localizzazione corrente
829
- return (
830
- <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
831
- );
832
- }
833
- };
690
+ import { localeMap } from 'intlayer'; // Funzioni e tipi di utilità da 'intlayer'
691
+ import type { FC, PropsWithChildren } from 'react'; // Tipi React per componenti funzionali e props
692
+ import { IntlayerProvider } from 'react-intlayer'; // Provider per il contesto di internazionalizzazione
693
+ import { BrowserRouter, Route, Routes } from 'react-router-dom'; // Componenti router per la gestione della navigazione
834
694
 
835
695
  /**
836
696
  * Un componente router che configura le rotte specifiche per la localizzazione.
837
697
  * Utilizza React Router per gestire la navigazione e rendere i componenti localizzati.
838
698
  */
839
- export const LocaleRouter = ({ children }) => (
699
+ export const LocaleRouter: FC<PropsWithChildren> = ({ children }) => (
840
700
  <BrowserRouter>
841
701
  <Routes>
842
- {locales
843
- .filter(
844
- (locale) => middleware.prefixDefault || locale !== defaultLocale
845
- )
846
- .map((locale) => (
847
- <Route
848
- // Modello di percorso per catturare la locale (es. /en/, /fr/) e abbinare tutti i percorsi successivi
849
- path={`/${locale}/*`}
850
- key={locale}
851
- element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Avvolge i figli con la gestione della locale
852
- />
853
- ))}
854
-
855
- {
856
- // Se il prefisso per la locale predefinita è disabilitato, renderizza i figli direttamente al percorso root
857
- !middleware.prefixDefault && (
858
- <Route
859
- path="*"
860
- element={
861
- <AppLocalized locale={defaultLocale}>{children}</AppLocalized>
862
- } // Avvolge i figli con la gestione della locale
863
- />
864
- )
865
- }
702
+ {localeMap(({ locale, urlPrefix }) => (
703
+ <Route
704
+ // Modello di percorso per catturare la localizzazione (es. /en/, /fr/) e abbinare tutti i percorsi successivi
705
+ path={`${urlPrefix}/*`}
706
+ key={locale}
707
+ element={
708
+ <IntlayerProvider locale={locale}>{children}</IntlayerProvider>
709
+ } // Avvolge i figli con la gestione della localizzazione
710
+ />
711
+ ))}
866
712
  </Routes>
867
713
  </BrowserRouter>
868
714
  );
869
715
  ```
870
716
 
871
717
  ```jsx fileName="src/components/LocaleRouter.cjx" codeFormat="commonjs"
872
- // Importazione delle dipendenze e delle funzioni necessarie
873
- const { configuration, getPathWithoutLocale } = require("intlayer"); // Funzioni e tipi di utilità da 'intlayer'
874
- const { IntlayerProvider, useLocale } = require("react-intlayer"); // Provider per il contesto di internazionalizzazione
875
- const {
876
- BrowserRouter,
877
- Routes,
878
- Route,
879
- Navigate,
880
- useLocation,
881
- } = require("react-router-dom"); // Componenti del router per la gestione della navigazione
882
-
883
- // Destrutturazione della configurazione da Intlayer
884
- const { internationalization, middleware } = configuration;
885
- const { locales, defaultLocale } = internationalization;
718
+ const { localeMap } = require("intlayer"); // Funzioni e tipi di utilità da 'intlayer'
719
+ const React = require("react"); // Importa React
720
+ const { IntlayerProvider } = require("react-intlayer"); // Provider per il contesto di internazionalizzazione
721
+ const { BrowserRouter, Route, Routes } = require("react-router-dom"); // Componenti del router per la gestione della navigazione
886
722
 
887
723
  /**
888
- * Un componente che gestisce la localizzazione e avvolge i figli con il contesto locale appropriato.
889
- * Gestisce il rilevamento e la validazione della locale basata sull'URL.
724
+ * Un componente router che configura le rotte specifiche per la locale.
725
+ * Usa React Router per gestire la navigazione e renderizzare componenti localizzati.
890
726
  */
891
- const AppLocalized = ({ children, locale }) => {
892
- const { pathname, search } = useLocation(); // Ottieni il percorso URL corrente
893
-
894
- // Determina la locale corrente, utilizzando quella di default se non fornita
895
- const currentLocale = locale ?? defaultLocale;
896
-
897
- // Rimuove il prefisso della locale dal percorso per costruire un percorso base
898
- const pathWithoutLocale = getPathWithoutLocale(
899
- pathname // Percorso URL corrente
727
+ const LocaleRouter = ({ children }) =>
728
+ React.createElement(
729
+ BrowserRouter,
730
+ {},
731
+ React.createElement(
732
+ Routes,
733
+ {},
734
+ localeMap(({ locale, urlPrefix }) =>
735
+ React.createElement(Route, {
736
+ path: `${urlPrefix}/*`,
737
+ key: locale,
738
+ element: React.createElement(IntlayerProvider, { locale }, children),
739
+ })
740
+ )
741
+ )
900
742
  );
901
743
 
902
- /**
903
- * Se middleware.prefixDefault è true, la locale di default deve sempre essere prefissata.
904
- */
905
- if (middleware.prefixDefault) {
906
- // Valida la locale
907
- if (!locale || !locales.includes(locale)) {
908
- // Reindirizza alla locale di default con il percorso aggiornato
909
- return (
910
- <Navigate
911
- to={`/${defaultLocale}/${pathWithoutLocale}${search}`}
912
- replace // Sostituisce la voce corrente nella cronologia con quella nuova
913
- />
914
- );
915
- }
916
-
917
- // Avvolge i figli con IntlayerProvider e imposta la locale corrente
918
- return (
919
- <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
920
- );
921
- } else {
922
- /**
923
- * Quando middleware.prefixDefault è falso, la locale di default non è prefissata.
924
- * Assicurarsi che la locale corrente sia valida e non la locale di default.
925
- */
926
- if (
927
- currentLocale.toString() !== defaultLocale.toString() &&
928
- !locales
929
- .filter(
930
- (locale) => locale.toString() !== defaultLocale.toString() // Esclude la locale di default
931
- )
932
- .includes(currentLocale) // Controlla se la locale corrente è nella lista delle locale valide
933
- ) {
934
- // Reindirizza al percorso senza prefisso della lingua
935
- return <Navigate to={`${pathWithoutLocale}${search}`} replace />;
936
- }
937
-
938
- // Avvolge i figli con IntlayerProvider e imposta la lingua corrente
939
- return (
940
- <IntlayerProvider locale={currentLocale}>{children}</IntlayerProvider>
941
- );
942
- }
943
- };
944
-
945
- /**
946
- * Un componente router che configura le rotte specifiche per la lingua.
947
- * Utilizza React Router per gestire la navigazione e rendere i componenti localizzati.
948
- */
949
- const LocaleRouter = ({ children }) => (
950
- <BrowserRouter>
951
- <Routes>
952
- {locales
953
- .filter(
954
- (locale) => middleware.prefixDefault || locale !== defaultLocale
955
- )
956
- .map((locale) => (
957
- <Route
958
- // Pattern della rotta per catturare la lingua (es. /en/, /fr/) e corrispondere a tutti i percorsi successivi
959
- path={`/${locale}/*`}
960
- key={locale}
961
- element={<AppLocalized locale={locale}>{children}</AppLocalized>} // Avvolge i figli con la gestione della localizzazione
962
- />
963
- ))}
964
-
965
- {
966
- // Se il prefisso per la localizzazione predefinita è disabilitato, renderizza i figli direttamente al percorso radice
967
- !middleware.prefixDefault && (
968
- <Route
969
- path="*"
970
- element={
971
- <AppLocalized locale={defaultLocale}>{children}</AppLocalized>
972
- } // Avvolge i figli con la gestione della localizzazione
973
- />
974
- )
975
- }
976
- </Routes>
977
- </BrowserRouter>
978
- );
744
+ exports.LocaleRouter = LocaleRouter;
979
745
  ```
980
746
 
747
+ > Nota: Se usi `routing.mode: 'no-prefix' | 'search-params'`, probabilmente non hai bisogno di usare la funzione `localeMap`.
748
+
981
749
  Quindi, puoi utilizzare il componente `LocaleRouter` nella tua applicazione:
982
750
 
983
751
  ```tsx fileName="src/App.tsx" codeFormat="typescript"
@@ -1019,6 +787,8 @@ const App = () => (
1019
787
 
1020
788
  In parallelo, puoi anche utilizzare il `intlayerProxy` 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.
1021
789
 
790
+ > Nota che per usare `intlayerProxy` in produzione, devi spostare il pacchetto `vite-intlayer` da `devDependencies` a `dependencies`.
791
+
1022
792
  ```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
1023
793
  import { defineConfig } from "vite";
1024
794
  import react from "@vitejs/plugin-react-swc";
@@ -1257,8 +1027,8 @@ const LocaleSwitcher = () => {
1257
1027
  > - [`getHTMLTextDir` hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/packages/intlayer/getHTMLTextDir.md)
1258
1028
  > - [`hrefLang` attribute](https://developers.google.com/search/docs/specialty/international/localized-versions?hl=fr)
1259
1029
  > - [`lang` attribute](https://developer.mozilla.org/it/docs/Web/HTML/Global_attributes/lang)
1260
- > - [`dir` attribute`](https://developer.mozilla.org/it/docs/Web/HTML/Global_attributes/dir)
1261
- > - [`aria-current` attribute`](https://developer.mozilla.org/it/docs/Web/Accessibility/ARIA/Attributes/aria-current)
1030
+ > - [`dir` attribute](https://developer.mozilla.org/it/docs/Web/HTML/Global_attributes/dir)
1031
+ > - [`aria-current` attribute](https://developer.mozilla.org/it/docs/Web/Accessibility/ARIA/Attributes/aria-current)
1262
1032
 
1263
1033
  Di seguito il **Passo 9** aggiornato con spiegazioni aggiuntive ed esempi di codice migliorati:
1264
1034
 
@@ -1272,11 +1042,11 @@ Quando la tua applicazione supporta più lingue, è fondamentale aggiornare gli
1272
1042
  - **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à.
1273
1043
  - **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.
1274
1044
 
1275
- Aggiornando dinamicamente questi attributi quando la lingua cambia, garantisci un'esperienza coerente e accessibile per gli utenti in tutte le lingue supportate.
1045
+ Aggiornando dinamicamente questi attributi quando la locale cambia, garantisci un'esperienza coerente e accessibile per gli utenti in tutte le lingue supportate.
1276
1046
 
1277
1047
  #### Implementazione del Hook
1278
1048
 
1279
- Crea un hook personalizzato per gestire gli attributi HTML. L'hook ascolta i cambiamenti della lingua e aggiorna gli attributi di conseguenza:
1049
+ Crea un hook personalizzato per gestire gli attributi HTML. L'hook ascolta i cambiamenti della locale e aggiorna gli attributi di conseguenza:
1280
1050
 
1281
1051
  ```tsx fileName="src/hooks/useI18nHTMLAttributes.tsx" codeFormat="typescript"
1282
1052
  import { useEffect } from "react";
@@ -1305,7 +1075,7 @@ export const useI18nHTMLAttributes = () => {
1305
1075
 
1306
1076
  ```jsx fileName="src/hooks/useI18nHTMLAttributes.msx" codeFormat="esm"
1307
1077
  import { useEffect } from "react";
1308
- import { useLocale } from "react-intlayer";
1078
+ import { useLocale } from "intlayer";
1309
1079
  import { getHTMLTextDir } from "intlayer";
1310
1080
 
1311
1081
  /**
@@ -1426,42 +1196,18 @@ module.exports = App;
1426
1196
 
1427
1197
  Applicando queste modifiche, la tua applicazione:
1428
1198
 
1429
- - Garantirà che l'attributo **language** (`lang`) rifletta correttamente la locale corrente, importante per la SEO e il comportamento del browser.
1430
- - Adatterà la **direzione del testo** (`dir`) in base alla locale, migliorando la leggibilità e l'usabilità per lingue con ordini di lettura differenti.
1431
- - Fornirà un'esperienza più **accessibile**, poiché le tecnologie assistive si basano su questi attributi per funzionare al meglio.
1432
-
1433
- ### (Opzionale) Passo 10: Creare un componente Link localizzato
1434
-
1435
- // Applica l'hook per aggiornare gli attributi lang e dir del tag <html> in base alla locale.
1436
- useI18nHTMLAttributes();
1437
-
1438
- // ... Resto del tuo componente
1439
- };
1440
-
1441
- const App = () => (
1442
- <IntlayerProvider>
1443
- <AppContent />
1444
- </IntlayerProvider>
1445
- );
1446
-
1447
- module.exports = App;
1448
-
1449
- ````
1450
-
1451
- Applicando queste modifiche, la tua applicazione:
1452
-
1453
- - Garantirà che l'attributo **lingua** (`lang`) rifletta correttamente la locale corrente, cosa importante per la SEO e il comportamento del browser.
1454
- - Adatterà la **direzione del testo** (`dir`) in base alla locale, migliorando la leggibilità e l'usabilità per le lingue con ordini di lettura differenti.
1455
- - Fornirà un'esperienza più **accessibile**, poiché le tecnologie assistive dipendono da questi attributi per funzionare in modo ottimale.
1199
+ - Garantire che l'attributo **language** (`lang`) rifletta correttamente la locale corrente, importante per la SEO e il comportamento del browser.
1200
+ - Adattare la **direzione del testo** (`dir`) in base alla locale, migliorando la leggibilità e l'usabilità per lingue con ordini di lettura differenti.
1201
+ - Fornire un'esperienza più **accessibile**, poiché le tecnologie assistive si basano su questi attributi per funzionare al meglio.
1456
1202
 
1457
1203
  ### (Opzionale) Passo 10: Creare un componente Link localizzato
1458
1204
 
1459
- Per garantire che la navigazione della tua applicazione rispetti la lingua corrente, puoi creare un componente `Link` personalizzato. Questo componente aggiunge automaticamente il prefisso della lingua corrente agli URL interni. Ad esempio, quando un utente francofono clicca su un link alla pagina "About", viene reindirizzato a `/fr/about` invece che a `/about`.
1205
+ Per garantire che la navigazione della tua applicazione rispetti la locale corrente, puoi creare un componente `Link` personalizzato. Questo componente aggiunge automaticamente il prefisso della lingua corrente agli URL interni. Ad esempio, quando un utente francofono clicca su un link alla pagina "About", viene reindirizzato a `/fr/about` invece che a `/about`.
1460
1206
 
1461
1207
  Questo comportamento è utile per diversi motivi:
1462
1208
 
1463
1209
  - **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.
1464
- - **Coerenza**: Utilizzando un link localizzato in tutta l'applicazione, garantisci che la navigazione rimanga all'interno della lingua corrente, evitando cambiamenti di lingua imprevisti.
1210
+ - **Coerenza**: Utilizzando un link localizzato in tutta l'applicazione, garantisci che la navigazione rimanga all'interno della locale corrente, evitando cambiamenti di lingua imprevisti.
1465
1211
  - **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.
1466
1212
 
1467
1213
  Di seguito è riportata l'implementazione di un componente `Link` localizzato in TypeScript:
@@ -1475,23 +1221,22 @@ import {
1475
1221
  } from "react";
1476
1222
  import { useLocale } from "react-intlayer";
1477
1223
 
1478
- export interface LinkProps
1479
- extends DetailedHTMLProps<
1480
- AnchorHTMLAttributes<HTMLAnchorElement>,
1481
- HTMLAnchorElement
1482
- > {}
1224
+ export interface LinkProps extends DetailedHTMLProps<
1225
+ AnchorHTMLAttributes<HTMLAnchorElement>,
1226
+ HTMLAnchorElement
1227
+ > {}
1483
1228
 
1484
1229
  /**
1485
- * Funzione di utilità per verificare se un dato URL è esterno.
1230
+ * Funzione di utilità per verificare se un URL è esterno.
1486
1231
  * Se l'URL inizia con http:// o https://, è considerato esterno.
1487
1232
  */
1488
1233
  export const checkIsExternalLink = (href?: string): boolean =>
1489
1234
  /^https?:\/\//.test(href ?? "");
1490
1235
 
1491
1236
  /**
1492
- * Un componente Link personalizzato che adatta l'attributo href in base alla locale corrente.
1493
- * Per i link interni, utilizza `getLocalizedUrl` per aggiungere il prefisso della locale all'URL (es. /fr/about).
1494
- * Questo garantisce che la navigazione rimanga all'interno dello stesso contesto di locale.
1237
+ * Componente Link personalizzato che adatta l'attributo href in base alla locale corrente.
1238
+ * Per i link interni, utilizza `getLocalizedUrl` per anteporre la locale all'URL (es. /fr/about).
1239
+ * Questo garantisce che la navigazione rimanga all'interno dello stesso contesto locale.
1495
1240
  */
1496
1241
  export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
1497
1242
  ({ href, children, ...props }, ref) => {
@@ -1511,7 +1256,7 @@ export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
1511
1256
  );
1512
1257
 
1513
1258
  Link.displayName = "Link";
1514
- ````
1259
+ ```
1515
1260
 
1516
1261
  ```jsx fileName="src/components/Link.mjx" codeFormat="esm"
1517
1262
  import { getLocalizedUrl } from "intlayer";
@@ -1526,9 +1271,9 @@ export const checkIsExternalLink = (href?: string): boolean =>
1526
1271
  /^https?:\/\//.test(href ?? "");
1527
1272
 
1528
1273
  /**
1529
- * Un componente Link personalizzato che adatta l'attributo href in base alla locale corrente.
1530
- * Per i link interni, utilizza `getLocalizedUrl` per aggiungere il prefisso della locale all'URL (es. /fr/about).
1531
- * Questo garantisce che la navigazione rimanga all'interno dello stesso contesto di locale.
1274
+ * Componente Link personalizzato che adatta l'attributo href in base alla locale corrente.
1275
+ * Per i link interni, utilizza `getLocalizedUrl` per anteporre la locale all'URL (es. /fr/about).
1276
+ * Questo garantisce che la navigazione rimanga all'interno dello stesso contesto locale.
1532
1277
  */
1533
1278
  export const Link = forwardRef(({ href, children, ...props }, ref) => {
1534
1279
  const { locale } = useLocale();
@@ -1554,21 +1299,21 @@ const { useLocale } = require("react-intlayer");
1554
1299
  const { forwardRef } = require("react");
1555
1300
 
1556
1301
  /**
1557
- * Funzione di utilità per verificare se un dato URL è esterno.
1302
+ * Funzione di utilità per verificare se un URL è esterno.
1558
1303
  * Se l'URL inizia con http:// o https://, è considerato esterno.
1559
1304
  */
1560
1305
  const checkIsExternalLink = (href) => /^https?:\/\//.test(href ?? "");
1561
1306
 
1562
1307
  /**
1563
1308
  * Un componente Link personalizzato che adatta l'attributo href in base alla locale corrente.
1564
- * Per i link interni, utilizza `getLocalizedUrl` per anteporre la locale all'URL (es. /fr/about).
1565
- * Questo garantisce che la navigazione rimanga all'interno dello stesso contesto di locale.
1309
+ * Per i link interni, utilizza `getLocalizedUrl` per aggiungere il prefisso della locale all'URL (es. /fr/about).
1310
+ * Questo garantisce che la navigazione rimanga nel contesto della stessa locale.
1566
1311
  */
1567
1312
  const Link = forwardRef(({ href, children, ...props }, ref) => {
1568
1313
  const { locale } = useLocale();
1569
1314
  const isExternalLink = checkIsExternalLink(href);
1570
1315
 
1571
- // Se il link è interno e viene fornito un href valido, ottieni l'URL localizzato.
1316
+ // Se il link è interno e l'href è valido, ottieni l'URL localizzato.
1572
1317
  const localizedHref = isExternalLink ? href : getLocalizedUrl(href, locale);
1573
1318
 
1574
1319
  return (
@@ -1586,37 +1331,24 @@ const Link = forwardRef(({ href, children, ...props }, ref) => {
1586
1331
  Link.displayName = "Link";
1587
1332
  ```
1588
1333
 
1589
- #### Come Funziona
1334
+ - Funzione di utilità per verificare se un URL è esterno.
1335
+ - Se l'URL inizia con http:// o https://, è considerato esterno.
1336
+
1337
+ #### Come funziona
1590
1338
 
1591
- - **Rilevamento dei Link Esterni**:
1592
- La funzione di supporto `checkIsExternalLink` determina se un URL è esterno. I link esterni vengono lasciati invariati perché non necessitano di localizzazione.
1339
+ /\*\*
1593
1340
 
1594
- - **Recupero della Locale Corrente**:
1341
+ - **Rilevamento dei link esterni**:
1342
+ La funzione helper `checkIsExternalLink` determina se un URL è esterno. I link esterni vengono lasciati invariati perché non necessitano di localizzazione.
1343
+
1344
+ - **Recupero della locale corrente**:
1595
1345
  L'hook `useLocale` fornisce la locale corrente (ad esempio, `fr` per francese).
1596
1346
 
1597
1347
  - **Localizzazione dell'URL**:
1598
- 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`.
1348
+ Per i link interni (cioè non esterni), `getLocalizedUrl` viene utilizzato per anteporre automaticamente all'URL la locale corrente. Questo significa che se il tuo utente è in francese, passando `/about` come `href` verrà trasformato in `/fr/about`.
1599
1349
 
1600
1350
  - **Restituzione del Link**:
1601
- Il componente restituisce un elemento `<a>` con l'URL localizzato, garantendo che la navigazione sia coerente con la lingua selezionata.
1602
-
1603
- 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à.
1604
-
1605
- ### Configurare TypeScript
1606
-
1607
- Intlayer utilizza l'augmentation dei moduli per sfruttare i vantaggi di TypeScript e rendere il tuo codice più robusto.
1608
-
1609
- ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
1610
-
1611
- ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
1612
-
1613
- Assicurati che la tua configurazione di TypeScript includa i tipi generati automaticamente.
1614
-
1615
- ````json5 fileName="tsconfig.json"
1616
- {
1617
- // ... Le tue configurazioni TypeScript esistenti
1618
- "include": [
1619
- Il componente restituisce un elemento `<a>` con l'URL localizzato, garantendo che la navigazione sia coerente con la lingua selezionata.
1351
+ Il componente restituisce un elemento `<a>` con l'URL localizzato, garantendo che la navigazione sia coerente con la locale.
1620
1352
 
1621
1353
  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à.
1622
1354
 
@@ -1624,12 +1356,10 @@ Integrando questo componente `Link` in tutta la tua applicazione, mantieni un'es
1624
1356
 
1625
1357
  Intlayer utilizza l'augmentation dei moduli per sfruttare i vantaggi di TypeScript e rendere il tuo codice più robusto.
1626
1358
 
1627
-
1628
1359
  ![Autocompletion](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
1629
1360
 
1630
1361
  ![Translation error](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
1631
1362
 
1632
-
1633
1363
  Assicurati che la tua configurazione TypeScript includa i tipi generati automaticamente.
1634
1364
 
1635
1365
  ```json5 fileName="tsconfig.json"
@@ -1640,7 +1370,7 @@ Assicurati che la tua configurazione TypeScript includa i tipi generati automati
1640
1370
  ".intlayer/**/*.ts", // Includi i tipi generati automaticamente
1641
1371
  ],
1642
1372
  }
1643
- ````
1373
+ ```
1644
1374
 
1645
1375
  ### Configurazione Git
1646
1376
 
@@ -1649,7 +1379,7 @@ Si consiglia di ignorare i file generati da Intlayer. Questo ti permette di evit
1649
1379
  Per farlo, puoi aggiungere le seguenti istruzioni al tuo file `.gitignore`:
1650
1380
 
1651
1381
  ```plaintext
1652
- # Traduci la tua Vite and React con Intlayer | Internazionalizzazione (i18n)
1382
+ # Ignora i file generati da Intlayer
1653
1383
  .intlayer
1654
1384
  ```
1655
1385
 
@@ -1673,5 +1403,3 @@ Per maggiori dettagli su come utilizzare l'estensione, consulta la [documentazio
1673
1403
  ### Approfondimenti
1674
1404
 
1675
1405
  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).
1676
-
1677
- ---