@intlayer/docs 5.8.0-canary.0 → 5.8.1-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/blog/ar/intlayer_with_next-i18next.md +2 -2
  2. package/blog/ar/next-i18next_vs_next-intl_vs_intlayer.md +96 -219
  3. package/blog/ar/react-i18next_vs_react-intl_vs_intlayer.md +88 -129
  4. package/blog/ar/vue-i18n_vs_intlayer.md +268 -0
  5. package/blog/de/intlayer_with_next-i18next.md +2 -2
  6. package/blog/de/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  7. package/blog/de/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  8. package/blog/de/vue-i18n_vs_intlayer.md +268 -0
  9. package/blog/en/intlayer_with_next-i18next.md +2 -2
  10. package/blog/en/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  11. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +88 -120
  12. package/blog/en/vue-i18n_vs_intlayer.md +276 -0
  13. package/blog/en-GB/intlayer_with_next-i18next.md +2 -2
  14. package/blog/en-GB/next-i18next_vs_next-intl_vs_intlayer.md +85 -218
  15. package/blog/en-GB/react-i18next_vs_react-intl_vs_intlayer.md +80 -130
  16. package/blog/en-GB/vue-i18n_vs_intlayer.md +258 -0
  17. package/blog/es/intlayer_with_next-i18next.md +2 -2
  18. package/blog/es/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  19. package/blog/es/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  20. package/blog/es/vue-i18n_vs_intlayer.md +268 -0
  21. package/blog/fr/intlayer_with_next-i18next.md +2 -2
  22. package/blog/fr/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  23. package/blog/fr/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  24. package/blog/fr/vue-i18n_vs_intlayer.md +269 -0
  25. package/blog/hi/intlayer_with_next-i18next.md +2 -2
  26. package/blog/hi/next-i18next_vs_next-intl_vs_intlayer.md +97 -220
  27. package/blog/hi/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  28. package/blog/hi/vue-i18n_vs_intlayer.md +268 -0
  29. package/blog/it/intlayer_with_next-i18next.md +2 -2
  30. package/blog/it/next-i18next_vs_next-intl_vs_intlayer.md +91 -214
  31. package/blog/it/react-i18next_vs_react-intl_vs_intlayer.md +86 -127
  32. package/blog/it/vue-i18n_vs_intlayer.md +268 -0
  33. package/blog/ja/intlayer_with_next-i18next.md +2 -2
  34. package/blog/ja/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  35. package/blog/ja/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  36. package/blog/ja/vue-i18n_vs_intlayer.md +268 -0
  37. package/blog/ko/intlayer_with_next-i18next.md +2 -2
  38. package/blog/ko/next-i18next_vs_next-intl_vs_intlayer.md +95 -217
  39. package/blog/ko/react-i18next_vs_react-intl_vs_intlayer.md +89 -130
  40. package/blog/ko/vue-i18n_vs_intlayer.md +268 -0
  41. package/blog/pt/intlayer_with_next-i18next.md +2 -2
  42. package/blog/pt/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  43. package/blog/pt/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  44. package/blog/pt/vue-i18n_vs_intlayer.md +268 -0
  45. package/blog/ru/intlayer_with_next-i18next.md +2 -2
  46. package/blog/ru/next-i18next_vs_next-intl_vs_intlayer.md +94 -217
  47. package/blog/ru/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  48. package/blog/ru/vue-i18n_vs_intlayer.md +268 -0
  49. package/blog/zh/intlayer_with_next-i18next.md +2 -2
  50. package/blog/zh/next-i18next_vs_next-intl_vs_intlayer.md +93 -216
  51. package/blog/zh/react-i18next_vs_react-intl_vs_intlayer.md +87 -128
  52. package/blog/zh/vue-i18n_vs_intlayer.md +269 -0
  53. package/dist/cjs/generated/blog.entry.cjs +41 -0
  54. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  55. package/dist/esm/generated/blog.entry.mjs +41 -0
  56. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  57. package/dist/types/generated/blog.entry.d.ts +1 -0
  58. package/dist/types/generated/blog.entry.d.ts.map +1 -1
  59. package/docs/ar/formatters.md +417 -31
  60. package/docs/ar/how_works_intlayer.md +2 -4
  61. package/docs/ar/interest_of_intlayer.md +7 -10
  62. package/docs/ar/intlayer_CMS.md +2 -3
  63. package/docs/ar/intlayer_visual_editor.md +2 -3
  64. package/docs/ar/intlayer_with_tanstack.md +1 -1
  65. package/docs/ar/introduction.md +4 -4
  66. package/docs/de/formatters.md +444 -34
  67. package/docs/de/introduction.md +2 -2
  68. package/docs/en/dictionary/enumeration.md +2 -2
  69. package/docs/en/dictionary/function_fetching.md +2 -2
  70. package/docs/en/dictionary/get_started.md +2 -2
  71. package/docs/en/dictionary/translation.md +2 -2
  72. package/docs/en/formatters.md +383 -15
  73. package/docs/en/how_works_intlayer.md +2 -4
  74. package/docs/en/interest_of_intlayer.md +48 -29
  75. package/docs/en/intlayer_CMS.md +2 -3
  76. package/docs/en/intlayer_visual_editor.md +2 -3
  77. package/docs/en/intlayer_with_create_react_app.md +2 -2
  78. package/docs/en/intlayer_with_express.md +2 -2
  79. package/docs/en/intlayer_with_tanstack.md +1 -1
  80. package/docs/en/introduction.md +4 -4
  81. package/docs/en/packages/express-intlayer/index.md +2 -2
  82. package/docs/en/packages/intlayer/getConfiguration.md +2 -3
  83. package/docs/en/packages/intlayer/getEnumeration.md +2 -7
  84. package/docs/en/packages/intlayer/getHTMLTextDir.md +2 -4
  85. package/docs/en/packages/intlayer/getLocaleLang.md +2 -4
  86. package/docs/en/packages/intlayer/getLocaleName.md +2 -3
  87. package/docs/en/packages/intlayer/getLocalizedUrl.md +2 -8
  88. package/docs/en/packages/intlayer/getMultilingualUrls.md +2 -7
  89. package/docs/en/packages/intlayer/getPathWithoutLocale.md +2 -3
  90. package/docs/en/packages/intlayer/getTranslation.md +2 -4
  91. package/docs/en/packages/intlayer/index.md +2 -2
  92. package/docs/en/packages/next-intlayer/index.md +2 -2
  93. package/docs/en/packages/next-intlayer/t.md +2 -2
  94. package/docs/en/packages/next-intlayer/useDictionary.md +2 -2
  95. package/docs/en/packages/next-intlayer/useIntlayer.md +2 -2
  96. package/docs/en/packages/next-intlayer/useLocale.md +2 -2
  97. package/docs/en/packages/react-intlayer/index.md +2 -2
  98. package/docs/en/packages/react-intlayer/t.md +2 -2
  99. package/docs/en/packages/react-intlayer/useI18n.md +2 -2
  100. package/docs/en/packages/react-intlayer/useIntlayer.md +2 -2
  101. package/docs/en/packages/react-intlayer/useLocale.md +2 -2
  102. package/docs/en/packages/react-scripts-intlayer/index.md +2 -2
  103. package/docs/en/packages/solid-intlayer/index.md +2 -2
  104. package/docs/en/packages/vite-intlayer/index.md +2 -2
  105. package/docs/en-GB/formatters.md +402 -16
  106. package/docs/en-GB/how_works_intlayer.md +2 -4
  107. package/docs/en-GB/interest_of_intlayer.md +7 -10
  108. package/docs/en-GB/intlayer_with_tanstack.md +1 -1
  109. package/docs/en-GB/introduction.md +2 -2
  110. package/docs/es/formatters.md +438 -28
  111. package/docs/es/how_works_intlayer.md +2 -4
  112. package/docs/es/interest_of_intlayer.md +7 -10
  113. package/docs/es/intlayer_with_tanstack.md +1 -1
  114. package/docs/es/introduction.md +2 -2
  115. package/docs/fr/formatters.md +438 -28
  116. package/docs/fr/how_works_intlayer.md +2 -4
  117. package/docs/fr/interest_of_intlayer.md +7 -10
  118. package/docs/fr/intlayer_with_tanstack.md +1 -1
  119. package/docs/fr/introduction.md +2 -2
  120. package/docs/hi/formatters.md +430 -39
  121. package/docs/hi/how_works_intlayer.md +2 -4
  122. package/docs/hi/interest_of_intlayer.md +7 -10
  123. package/docs/hi/intlayer_with_tanstack.md +1 -1
  124. package/docs/hi/introduction.md +2 -2
  125. package/docs/it/formatters.md +438 -30
  126. package/docs/it/how_works_intlayer.md +2 -4
  127. package/docs/it/interest_of_intlayer.md +7 -10
  128. package/docs/it/intlayer_with_tanstack.md +1 -1
  129. package/docs/it/introduction.md +2 -2
  130. package/docs/ja/formatters.md +435 -47
  131. package/docs/ja/how_works_intlayer.md +2 -4
  132. package/docs/ja/interest_of_intlayer.md +7 -10
  133. package/docs/ja/intlayer_with_tanstack.md +1 -1
  134. package/docs/ja/introduction.md +2 -2
  135. package/docs/ko/formatters.md +432 -41
  136. package/docs/ko/how_works_intlayer.md +2 -4
  137. package/docs/ko/interest_of_intlayer.md +7 -10
  138. package/docs/ko/intlayer_with_tanstack.md +1 -1
  139. package/docs/ko/introduction.md +2 -2
  140. package/docs/pt/formatters.md +416 -30
  141. package/docs/pt/how_works_intlayer.md +2 -4
  142. package/docs/pt/intlayer_with_tanstack.md +1 -1
  143. package/docs/pt/introduction.md +2 -2
  144. package/docs/ru/autoFill.md +2 -2
  145. package/docs/ru/configuration.md +1 -40
  146. package/docs/ru/formatters.md +438 -28
  147. package/docs/ru/how_works_intlayer.md +5 -7
  148. package/docs/ru/index.md +1 -1
  149. package/docs/ru/interest_of_intlayer.md +8 -11
  150. package/docs/ru/intlayer_CMS.md +7 -8
  151. package/docs/ru/intlayer_cli.md +4 -7
  152. package/docs/ru/intlayer_visual_editor.md +5 -6
  153. package/docs/ru/intlayer_with_angular.md +1 -1
  154. package/docs/ru/intlayer_with_create_react_app.md +5 -5
  155. package/docs/ru/intlayer_with_lynx+react.md +1 -1
  156. package/docs/ru/intlayer_with_nextjs_15.md +3 -3
  157. package/docs/ru/intlayer_with_nextjs_page_router.md +2 -2
  158. package/docs/ru/intlayer_with_nuxt.md +1 -1
  159. package/docs/ru/intlayer_with_react_native+expo.md +2 -2
  160. package/docs/ru/intlayer_with_tanstack.md +3 -3
  161. package/docs/ru/intlayer_with_vite+preact.md +3 -3
  162. package/docs/ru/intlayer_with_vite+react.md +3 -3
  163. package/docs/ru/intlayer_with_vite+solid.md +1 -1
  164. package/docs/ru/intlayer_with_vite+svelte.md +1 -1
  165. package/docs/ru/intlayer_with_vite+vue.md +2 -2
  166. package/docs/ru/introduction.md +5 -5
  167. package/docs/ru/locale_mapper.md +1 -1
  168. package/docs/ru/packages/@intlayer/api/index.md +2 -2
  169. package/docs/ru/packages/@intlayer/chokidar/index.md +1 -1
  170. package/docs/ru/packages/@intlayer/cli/index.md +2 -2
  171. package/docs/ru/packages/@intlayer/config/index.md +2 -2
  172. package/docs/ru/packages/@intlayer/core/index.md +2 -2
  173. package/docs/ru/packages/@intlayer/design-system/index.md +2 -2
  174. package/docs/ru/packages/@intlayer/dictionary-entry/index.md +2 -2
  175. package/docs/ru/packages/@intlayer/editor/index.md +1 -1
  176. package/docs/ru/packages/@intlayer/editor-react/index.md +1 -1
  177. package/docs/ru/packages/@intlayer/webpack/index.md +1 -1
  178. package/docs/ru/packages/angular-intlayer/index.md +1 -1
  179. package/docs/ru/packages/express-intlayer/index.md +3 -3
  180. package/docs/ru/packages/express-intlayer/t.md +1 -1
  181. package/docs/ru/packages/intlayer/getEnumeration.md +3 -8
  182. package/docs/ru/packages/intlayer/getTranslation.md +3 -5
  183. package/docs/ru/packages/intlayer/getTranslationContent.md +1 -3
  184. package/docs/ru/packages/intlayer/index.md +3 -3
  185. package/docs/ru/packages/intlayer-cli/index.md +1 -1
  186. package/docs/ru/packages/intlayer-editor/index.md +2 -2
  187. package/docs/ru/packages/lynx-intlayer/index.md +1 -1
  188. package/docs/ru/packages/next-intlayer/index.md +4 -4
  189. package/docs/ru/packages/next-intlayer/t.md +4 -4
  190. package/docs/ru/packages/next-intlayer/useLocale.md +3 -3
  191. package/docs/ru/packages/nuxt-intlayer/index.md +1 -1
  192. package/docs/ru/packages/preact-intlayer/index.md +1 -1
  193. package/docs/ru/packages/react-intlayer/index.md +4 -4
  194. package/docs/ru/packages/react-intlayer/t.md +4 -4
  195. package/docs/ru/packages/react-native-intlayer/index.md +1 -1
  196. package/docs/ru/packages/react-scripts-intlayer/index.md +3 -3
  197. package/docs/ru/packages/solid-intlayer/index.md +3 -3
  198. package/docs/ru/packages/svelte-intlayer/index.md +1 -1
  199. package/docs/ru/packages/vite-intlayer/index.md +3 -3
  200. package/docs/ru/packages/vue-intlayer/index.md +1 -1
  201. package/docs/ru/per_locale_file.md +1 -1
  202. package/docs/ru/roadmap.md +3 -5
  203. package/docs/ru/vs_code_extension.md +1 -1
  204. package/docs/zh/formatters.md +446 -38
  205. package/docs/zh/how_works_intlayer.md +2 -4
  206. package/docs/zh/interest_of_intlayer.md +7 -10
  207. package/docs/zh/intlayer_with_tanstack.md +1 -1
  208. package/docs/zh/introduction.md +2 -2
  209. package/frequent_questions/ar/domain_routing.md +1 -1
  210. package/frequent_questions/en/domain_routing.md +1 -1
  211. package/frequent_questions/en-GB/domain_routing.md +1 -1
  212. package/frequent_questions/es/domain_routing.md +1 -1
  213. package/frequent_questions/fr/domain_routing.md +1 -1
  214. package/frequent_questions/hi/domain_routing.md +1 -1
  215. package/frequent_questions/it/domain_routing.md +1 -1
  216. package/frequent_questions/ko/domain_routing.md +1 -1
  217. package/frequent_questions/pt/domain_routing.md +1 -1
  218. package/frequent_questions/ru/domain_routing.md +1 -1
  219. package/frequent_questions/ru/get_locale_cookie.md +4 -4
  220. package/frequent_questions/ru/static_rendering.md +1 -2
  221. package/frequent_questions/zh/domain_routing.md +1 -1
  222. package/package.json +9 -11
  223. package/src/generated/blog.entry.ts +42 -1
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  createdAt: 2025-01-02
3
3
  updatedAt: 2025-06-29
4
- title: react-i18n vs react-intl vs Intlayer
4
+ title: react-i18next vs react-intl vs Intlayer
5
5
  description: Integra react-i18next con next-intl e Intlayer per l'internazionalizzazione (i18n) di un'app React
6
6
  keywords:
7
7
  - next-intl
8
8
  - react-i18next
9
9
  - Intlayer
10
10
  - Internazionalizzazione
11
- - Blogumentazione
11
+ - Blog
12
12
  - Next.js
13
13
  - JavaScript
14
14
  - React
@@ -17,178 +17,137 @@ slugs:
17
17
  - react-i18next-vs-react-intl-vs-intlayer
18
18
  ---
19
19
 
20
- # React-Intl VS React-i18next VS Intlayer | Internazionalizzazione React (i18n)
20
+ # react-Intl VS react-i18next VS intlayer | Internazionalizzazione (i18n) in React
21
21
 
22
- Di seguito è presentato un confronto conciso di tre popolari librerie i18n (internazionalizzazione) per React: **React-Intl**, **React-i18next** e **Intlayer**. Ogni libreria offre funzionalità uniche e flussi di lavoro per integrare il supporto multilingue nella tua applicazione React. Dopo aver letto questo, dovresti essere in grado di decidere quale soluzione soddisfa meglio le tue esigenze.
22
+ Questa guida confronta tre opzioni consolidate per l'i18n in **React**: **react-intl** (FormatJS), **react-i18next** (i18next) e **Intlayer**.
23
+ Ci concentriamo su applicazioni **React plain** (ad esempio, Vite, CRA, SPA). Se usi Next.js, consulta il nostro confronto dedicato a Next.js.
23
24
 
24
- ---
25
-
26
- ## 1. Introduzione
27
-
28
- L'internazionalizzazione (i18n) nelle applicazioni React può essere realizzata in diversi modi. Le tre librerie presentate qui hanno filosofie di design diverse, set di funzionalità e supporto della comunità:
25
+ Valutiamo:
29
26
 
30
- 1. **React-Intl**
31
- 2. **React-i18next**
32
- 3. **Intlayer**
27
+ - Architettura e organizzazione dei contenuti
28
+ - TypeScript e sicurezza
29
+ - Gestione delle traduzioni mancanti
30
+ - Contenuti ricchi e capacità di formattazione
31
+ - Prestazioni e comportamento di caricamento
32
+ - Esperienza sviluppatore (DX), strumenti e manutenzione
33
+ - SEO/routing (dipendente dal framework)
33
34
 
34
- Di seguito, troverai una panoramica di ciascuna soluzione, seguita da un confronto delle funzionalità, vantaggi e svantaggi, e casi d'uso esemplificativi.
35
+ > **tl;dr**: Tutti e tre possono localizzare un'app React. Se desideri **contenuti a livello di componente**, **tipi TypeScript rigorosi**, **controlli delle chiavi mancanti in fase di build**, **dizionari ottimizzati con tree-shaking** e strumenti editoriali integrati (Visual Editor/CMS + traduzione AI opzionale), **Intlayer** è la scelta più completa per codebase React modulari.
35
36
 
36
37
  ---
37
38
 
38
- ## 2. React-Intl
39
-
40
- ### Panoramica
41
-
42
- [**React-Intl**](https://formatjs.io/docs/react-intl/) è parte della suite [FormatJS](https://formatjs.io/). Fornisce un potente set di **API e componenti** per gestire la formattazione dei messaggi, la pluralizzazione, la data/ora e la formattazione dei numeri. React-Intl è ampiamente utilizzato nelle applicazioni aziendali, principalmente perché fa parte di un ecosistema che standardizza la sintassi e la formattazione dei messaggi.
43
-
44
- ### Caratteristiche Chiave
45
-
46
- - **Sintassi del Messaggio ICU**: Offre una sintassi completa per l'interpolazione dei messaggi, la pluralizzazione e altro.
47
- - **Formattazione Localizzata**: Utilità integrate per formattare date, ore, numeri e tempi relativi in base alla lingua.
48
- - **Componenti Dichiarativi**: Espone `<FormattedMessage>`, `<FormattedNumber>`, `<FormattedDate>`, ecc., per un utilizzo senza soluzione di continuità in JSX.
49
- - **Ecosistema Ricco**: Si integra bene con gli strumenti FormatJS (ad es., [babel-plugin-react-intl](https://formatjs.io/docs/tooling/babel-plugin/)) per estrarre, gestire e compilare messaggi.
50
-
51
- ### Flusso di Lavoro Tipico
52
-
53
- 1. **Definisci cataloghi di messaggi** (solitamente file JSON per ogni lingua).
54
- 2. **Avvolgi la tua app** in `<IntlProvider locale="it" messages={messages}>`.
55
- 3. **Usa** `<FormattedMessage id="myMessage" defaultMessage="Ciao mondo" />` o il hook `useIntl()` per accedere alle stringhe di traduzione.
56
-
57
- ### Vantaggi
58
-
59
- - Ben consolidato e utilizzato in molti ambienti di produzione.
60
- - Formattazione di messaggi avanzata, inclusa pluralizzazione, genere, fusi orari e altro.
61
- - Supporto forte per gli strumenti per l'estrazione e la compilazione dei messaggi.
62
-
63
- ### Svantaggi
39
+ ## Posizionamento ad alto livello
64
40
 
65
- - Richiede familiarità con il **formato dei messaggi ICU**, che può essere verboso.
66
- - Non è così semplice gestire traduzioni dinamiche o complesse che sono più di semplici stringhe.
41
+ - **react-intl** - Formattazione basata su ICU e allineata agli standard (date/numeri/plurali) con un'API matura. I cataloghi sono tipicamente centralizzati; la sicurezza delle chiavi e la validazione in fase di build dipendono in gran parte da te.
42
+ - **react-i18next** - Estremamente popolare e flessibile; namespaces, rilevatori e molti plugin (ICU, backend). Potente, ma la configurazione può espandersi man mano che i progetti crescono.
43
+ - **Intlayer** - Modello di contenuto incentrato sul componente per React, **tipizzazione TS rigorosa**, **controlli in fase di build**, **tree-shaking**, oltre a **Visual Editor/CMS** e **traduzioni assistite da AI**. Funziona con React Router, Vite, CRA, ecc.
67
44
 
68
45
  ---
69
46
 
70
- ## 3. React-i18next
47
+ ## Matrice delle funzionalità (focus su React)
48
+
49
+ | Funzionalità | `react-intlayer` (Intlayer) | `react-i18next` (i18next) | `react-intl` (FormatJS) |
50
+ | ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
51
+ | **Traduzioni Vicino ai Componenti** | ✅ Sì, contenuto collocato con ogni componente | ❌ No | ❌ No |
52
+ | **Integrazione TypeScript** | ✅ Avanzata, tipi rigorosi generati automaticamente | ⚠️ Base; configurazione extra per sicurezza | ✅ Buona, ma meno rigorosa |
53
+ | **Rilevamento Traduzioni Mancanti** | ✅ Evidenziazione errori TypeScript e errori/avvisi in fase di compilazione | ⚠️ Principalmente stringhe di fallback a runtime | ⚠️ Stringhe di fallback |
54
+ | **Contenuto Ricco (JSX/Markdown/componenti)** | ✅ Supporto diretto | ⚠️ Limitato / solo interpolazione | ⚠️ Sintassi ICU, non vero JSX |
55
+ | **Traduzione basata su AI** | ✅ Sì, supporta più provider AI. Utilizzabile con le proprie chiavi API. Considera il contesto della tua applicazione e l'ambito del contenuto | ❌ No | ❌ No |
56
+ | **Editor Visivo** | ✅ Sì, Editor Visivo locale + CMS opzionale; può esternalizzare il contenuto del codice; integrabile | ❌ No / disponibile tramite piattaforme di localizzazione esterne | ❌ No / disponibile tramite piattaforme di localizzazione esterne |
57
+ | **Routing Localizzato** | ✅ Sì, supporta percorsi localizzati out of the box (funziona con Next.js e Vite) | ⚠️ Non integrato, richiede plugin (es. `next-i18next`) o configurazione personalizzata del router | ❌ No, solo formattazione dei messaggi, il routing deve essere manuale |
58
+ | **Generazione Dinamica delle Rotte** | ✅ Sì | ⚠️ Plugin/ecosistema o configurazione manuale | ❌ Non fornito |
59
+ | **Pluralizzazione** | ✅ Modelli basati su enumerazioni | ✅ Configurabile (plugin come i18next-icu) | ✅ (ICU) |
60
+ | **Formattazione (date, numeri, valute)** | ✅ Formatter ottimizzati (Intl sotto il cofano) | ⚠️ Tramite plugin o utilizzo personalizzato di Intl | ✅ Formatter ICU |
61
+ | **Formato del contenuto** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml WIP) | ⚠️ .json | ✅ .json, .js |
62
+ | **Supporto ICU** | ⚠️ In lavorazione | ⚠️ Tramite plugin (i18next-icu) | ✅ Sì |
63
+ | **SEO Helpers (hreflang, sitemap)** | ✅ Strumenti integrati: helper per sitemap, robots.txt, metadata | ⚠️ Plugin della community/manuale | ❌ Non incluso nel core |
64
+ | **Ecosistema / Community** | ⚠️ Più piccolo ma in rapida crescita e reattivo | ✅ Il più grande e maturo | ✅ Grande |
65
+ | **Rendering lato server e Componenti Server** | ✅ Sì, ottimizzato per SSR / Componenti Server React | ⚠️ Supportato a livello di pagina ma è necessario passare le funzioni t sull'albero dei componenti per i componenti server figli | ❌ Non supportato, è necessario passare le funzioni t sull'albero dei componenti per i componenti server figli |
66
+ | **Tree-shaking (caricamento solo del contenuto usato)** | ✅ Sì, per componente al momento della build tramite plugin Babel/SWC | ⚠️ Di solito carica tutto (può essere migliorato con namespace/suddivisione del codice) | ⚠️ Di solito carica tutto |
67
+ | **Lazy loading** | ✅ Sì, per locale / per dizionario | ✅ Sì (ad esempio, backend/namespace su richiesta) | ✅ Sì (bundle di locale suddivisi) |
68
+ | **Rimozione del contenuto non utilizzato** | ✅ Sì, per dizionario al momento della build | ❌ No, solo tramite segmentazione manuale dei namespace | ❌ No, tutti i messaggi dichiarati sono inclusi nel bundle |
69
+ | **Gestione di Grandi Progetti** | ✅ Favorisce la modularità, adatto per sistemi di design | ⚠️ Richiede una buona disciplina nella gestione dei file | ⚠️ I cataloghi centrali possono diventare molto grandi |
71
70
 
72
- ### Panoramica
73
-
74
- [**React-i18next**](https://react.i18next.com/) è un'estensione React di [i18next](https://www.i18next.com/), uno dei framework i18n JavaScript più popolari. Offre **caratteristiche estensive** per traduzioni a runtime, caricamento lazy e rilevamento della lingua, rendendolo estremamente flessibile per una vasta gamma di casi d'uso.
75
-
76
- ### Caratteristiche Chiave
77
-
78
- - **Struttura di Traduzione Flessibile**: Non legato a un formato singolo come ICU. Puoi memorizzare traduzioni in JSON, utilizzare l'interpolazione, la pluralizzazione, ecc.
79
- - **Cambio Lingua Dinamico**: Plugin di rilevamento lingua integrati e aggiornamenti a runtime.
80
- - **Traduzioni Annidate e Strutturate**: Puoi annidare facilmente le traduzioni all'interno del JSON.
81
- - **Ecosistema di Plugin Estensivo**: Per rilevamento (browser, percorso, sottodominio, ecc.), caricamento delle risorse, caching e altro.
82
-
83
- ### Flusso di Lavoro Tipico
84
-
85
- 1. **Installa `i18next` & `react-i18next`.**
86
- 2. **Configura i18n** per caricare traduzioni (JSON) e impostare il rilevamento o il fallback della lingua.
87
- 3. **Avvolgi la tua app** in `I18nextProvider`.
88
- 4. **Usa il hook `useTranslation()`** o il componente `<Trans>` per visualizzare le traduzioni.
71
+ ---
89
72
 
90
- ### Vantaggi
73
+ ## Confronto Approfondito
91
74
 
92
- - Altamente **flessibile** e ricco di funzionalità.
93
- - Comunità molto attiva e grande ecosistema di plugin.
94
- - Facilità di **caricamento dinamico** delle traduzioni (ad es., da un server, su richiesta).
75
+ ### 1) Architettura e scalabilità
95
76
 
96
- ### Svantaggi
77
+ - **react-intl / react-i18next**: La maggior parte delle configurazioni mantiene **cartelle di locale centralizzate** per lingua, a volte suddivise in **namespace** (i18next). Funziona bene all'inizio ma diventa una superficie condivisa man mano che le app crescono.
78
+ - **Intlayer**: Promuove **dizionari per componente (o per funzionalità)** **collocati insieme** all'interfaccia utente che servono. Questo mantiene chiara la proprietà, facilita la duplicazione/migrazione dei componenti e riduce il turnover delle chiavi tra i team. Il contenuto non utilizzato è più facile da identificare e rimuovere.
97
79
 
98
- - **La configurazione può essere verbosa**, specialmente se hai necessità più avanzate.
99
- - Se preferisci traduzioni fortemente tipizzate, potresti aver bisogno di configurazioni TypeScript aggiuntive.
80
+ **Perché è importante:** Il contenuto modulare rispecchia l'interfaccia utente modulare. I grandi codebase React rimangono più puliti quando le traduzioni vivono con i componenti a cui appartengono.
100
81
 
101
82
  ---
102
83
 
103
- ## 4. Intlayer
84
+ ### 2) TypeScript e sicurezza
104
85
 
105
- ### Panoramica
86
+ - **react-intl**: Tipizzazioni solide, ma **nessuna tipizzazione automatica delle chiavi**; devi applicare tu stesso i pattern di sicurezza.
87
+ - **react-i18next**: Tipizzazioni forti per gli hook; la **tipizzazione rigorosa delle chiavi** richiede tipicamente configurazioni extra o generatori.
88
+ - **Intlayer**: **Genera automaticamente tipi rigorosi** dal tuo contenuto. L'autocompletamento dell'IDE e gli **errori a tempo di compilazione** individuano errori di battitura e chiavi mancanti prima dell'esecuzione.
106
89
 
107
- [**Intlayer**](https://github.com/aymericzip/intlayer) è una libreria i18n open-source più recente focalizzata su **dichiarazioni di contenuto a livello di componente**, sicurezza dei tipi e **routing dinamico**. È progettata per flussi di lavoro React moderni, supportando sia **Create React App** che configurazioni **Vite**. Include anche funzionalità avanzate come **routing basato sulla lingua** e **tipi TypeScript auto-generati** per le traduzioni.
90
+ **Perché è importante:** Spostare i fallimenti **a sinistra** (alla fase di build/CI) riduce i problemi in produzione e accelera i cicli di feedback per gli sviluppatori.
108
91
 
109
- ### Caratteristiche Chiave
92
+ ---
110
93
 
111
- - **File di Contenuto Dichiarativi**: Ogni componente o modulo può dichiarare le proprie traduzioni in file dedicati `.content.tsx` o `.content.json`, mantenendo il contenuto vicino a dove viene utilizzato.
112
- - **Routing & Middleware Integrati**: Moduli opzionali per routing localizzati (ad es., `/it/about`, `/fr/about`) e middleware server per rilevare la lingua dell'utente.
113
- - **Tipi TypeScript Auto-generati**: Garantisce sicurezza dei tipi con funzionalità come completamento automatico e rilevamento degli errori a tempo di compilazione.
114
- - **Traduzioni Dinamiche e Ricche**: Può includere JSX/TSX nelle traduzioni per casi d'uso più complessi (ad es., link, testo in grassetto, icone nelle traduzioni).
94
+ ### 3) Gestione delle traduzioni mancanti
115
95
 
116
- ### Flusso di Lavoro Tipico
96
+ - **react-intl / react-i18next**: Di default usano **fallback a runtime** (eco della chiave o lingua predefinita). Puoi aggiungere linting/plugin, ma non è garantito durante la build.
97
+ - **Intlayer**: **Rilevamento a tempo di build** con avvisi o errori quando mancano lingue/chiavi richieste.
117
98
 
118
- 1. **Installa `intlayer` e `react-intlayer`.**
119
- 2. **Crea `intlayer.config.ts`** per definire le lingue disponibili e la lingua predefinita.
120
- 3. **Usa la CLI di Intlayer** o un plugin per **trasformare** le dichiarazioni di contenuto.
121
- 4. **Avvolgi la tua app** in `<IntlayerProvider>` e recupera il contenuto con `useIntlayer("keyName")`.
99
+ **Perché è importante:** Il fallimento della CI su stringhe mancanti previene la “misteriosa” presenza di inglese nelle interfacce non inglesi.
122
100
 
123
- ### Vantaggi
101
+ ---
124
102
 
125
- - **Amichevole con TypeScript** con generazione di tipi integrata e rilevamento degli errori.
126
- - **Contenuto ricco** possibile (ad es., passando nodi React come traduzioni).
127
- - **Routing Localizzato** pronto all'uso.
128
- - Integrato con strumenti di build popolari (CRA, Vite) per una facile configurazione.
103
+ ### 4) Contenuti ricchi e formattazione
129
104
 
130
- ### Svantaggi
105
+ - **react-intl**: Eccellente supporto **ICU** per plurali, selezioni, date/numeri e composizione dei messaggi. JSX può essere usato, ma il modello mentale rimane incentrato sul messaggio.
106
+ - **react-i18next**: Interpolazione flessibile e **`<Trans>`** per incorporare elementi/componenti; ICU disponibile tramite plugin.
107
+ - **Intlayer**: I file di contenuto possono includere **nodi ricchi** (JSX/Markdown/componenti) e **metadati**. La formattazione utilizza Intl sotto il cofano; i modelli di plurale sono ergonomici.
131
108
 
132
- - Ancora **relativamente nuova** rispetto a React-Intl o React-i18next.
133
- - Maggiore attenzione a un approccio di "dichiarazione di contenuto a livello di componente", potrebbe rappresentare un cambiamento rispetto ai tipici cataloghi .json.
134
- - Ecosistema e comunità più piccoli rispetto alle librerie più consolidate.
109
+ **Perché è importante:** I testi UI complessi (link, parti in grassetto, componenti inline) sono più facili da gestire quando la libreria supporta chiaramente i nodi React.
135
110
 
136
111
  ---
137
112
 
138
- ## 5. Confronto delle Caratteristiche
113
+ ### 5) Prestazioni e comportamento di caricamento
114
+
115
+ - **react-intl / react-i18next**: Di solito gestisci manualmente la **divisione dei cataloghi** e il **caricamento lazy** (namespace/import dinamici). Efficace ma richiede disciplina.
116
+ - **Intlayer**: Esegue il **tree-shaking** dei dizionari non utilizzati e supporta il **caricamento lazy per dizionario/per locale** out-of-the-box.
139
117
 
140
- | **Caratteristica** | **React-Intl** | **React-i18next** | **Intlayer** |
141
- | ----------------------------------- | ----------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
142
- | **Caso d'uso principale** | Traduzioni basate su stringhe, formattazione di date/numero, sintassi messaggio ICU | i18n completo con facile cambio dinamico, annidamento, ecosistema di plugin | Traduzioni tipizzate con focus su contenuti dichiarativi, routing localizzato & middleware server opzionale |
143
- | **Approccio** | Utilizza `<IntlProvider>` & componenti di messaggio FormatJS | Utilizza `I18nextProvider` & il hook `useTranslation()` | Utilizza `<IntlayerProvider>` & il hook `useIntlayer()` con dichiarazioni di contenuto |
144
- | **Formato di Localizzazione** | Stringhe basate su ICU (cataloghi JSON o JavaScript) | File risorsa JSON (o caricamenti personalizzati). Formato ICU opzionale tramite plugin i18next | Dichiarazioni `.content.[ts/js/tsx]` o JSON; possono contenere stringhe o componenti React |
145
- | **Routing** | Gestito esternamente (nessun routing localizzato integrato) | Gestito esternamente con plugin i18next (rilevamento percorso, sottodominio, ecc.) | Supporto per routing localizzato integrato (ad es., `/it/about`, `/fr/about`), più middleware server opzionale (per SSR/Vite) |
146
- | **Supporto TypeScript** | Buono (tipi per pacchetti ufficiali) | Buono ma configurazione extra per traduzioni tipizzate se si desidera un controllo rigido | Eccellente (definizioni di tipo auto-generate per chiavi di contenuto e traduzioni) |
147
- | **Pluralizzazione e Formattazione** | Avanzata: formattazione integrata di data/ora/numero, supporto plural/gender | Pluralizzazione configurabile. La formattazione di data/ora viene tipicamente eseguita tramite librerie esterne o plugin i18next | Può fare affidamento su standard JavaScript Intl o includere logica nel contenuto. Non è specializzato come FormatJS, ma gestisce i casi tipici. |
148
- | **Comunità & Ecosistema** | Ampia, parte dell'ecosistema FormatJS | Molto ampia, altamente attiva, molti plugin (rilevamento, caching, framework) | Più piccola ma in crescita; approccio moderno e open-source |
149
- | **Curva di Apprendimento** | Moderata (apprendimento della sintassi del messaggio ICU, convenzioni FormatJS) | Bassa a moderata (utilizzo diretto, ma configurazione avanzata può diventare verbosa) | Moderata (concetto di dichiarazioni di contenuto e passaggi di build specializzati) |
118
+ **Perché è importante:** Bundle più piccoli e meno stringhe inutilizzate migliorano le prestazioni di avvio e navigazione.
150
119
 
151
120
  ---
152
121
 
153
- ## 6. Quando Scegliere Ciascuno
122
+ ### 6) DX, strumenti e manutenzione
154
123
 
155
- 1. **React-Intl**
124
+ - **react-intl / react-i18next**: Ampio ecosistema comunitario; per i flussi editoriali solitamente si adottano piattaforme di localizzazione esterne.
125
+ - **Intlayer**: Include un **Editor Visivo gratuito** e un **CMS opzionale** (mantieni i contenuti in Git o esternalizzali). Offre inoltre un’**estensione per VSCode** per la creazione di contenuti e una **traduzione assistita da AI** utilizzando le tue chiavi provider.
156
126
 
157
- - Hai bisogno di **formattazione potente** per date/ore/numeri e forte **sintassi di messaggio ICU**.
158
- - Preferisci un approccio più “**basato sugli standard**” alle traduzioni.
159
- - Non hai bisogno di routing localizzati o chiavi di traduzione fortemente tipizzate.
127
+ **Perché è importante:** Gli strumenti integrati accorciano il ciclo tra sviluppatori e autori di contenuti - meno codice di collegamento, meno dipendenze da fornitori.
160
128
 
161
- 2. **React-i18next**
129
+ ---
162
130
 
163
- - Hai bisogno di una soluzione **flessibile e consolidata** con caricamento di traduzioni **dinamico** e **su richiesta**.
164
- - Vuoi un rilevamento lingua **basato su plugin** (ad es., da URL, cookie, storage locale) o caching avanzato.
165
- - Hai bisogno del più grande ecosistema, con molte integrazioni esistenti per vari framework (Next.js, React Native, ecc.).
131
+ ## Quando scegliere quale?
166
132
 
167
- 3. **Intlayer**
168
- - Vuoi un'integrazione **forte con TypeScript** con _tipi autogenerati_, assicurandoti di non perdere mai una chiave di traduzione.
169
- - Preferisci contenuti **dichiarativi** vicino al componente, eventualmente includendo nodi React o logica avanzata nelle traduzioni.
170
- - Hai bisogno di **routing localizzato integrato** o vuoi facilmente incorporarlo nella tua configurazione SSR o Vite.
171
- - Desideri un approccio moderno o semplicemente vuoi una singola libreria che copra sia la **gestione del contenuto** (i18n) che il **routing** in modo sicuro rispetto ai tipi.
133
+ - **Scegli react-intl** se desideri un formato messaggi **ICU-first** con un’API semplice e conforme agli standard e il tuo team è a suo agio nel mantenere manualmente cataloghi e controlli di sicurezza.
134
+ - **Scegli react-i18next** se ti serve l’**ampiezza dell’ecosistema di i18next** (rilevatori, backend, plugin ICU, integrazioni) e accetti una configurazione più complessa per ottenere maggiore flessibilità.
135
+ - **Scegli Intlayer** se apprezzi il **contenuto a livello di componente**, il **TypeScript rigoroso**, le **garanzie a tempo di compilazione**, il **tree-shaking** e gli strumenti editoriali **completi** - specialmente per applicazioni React **grandi e modulari**.
172
136
 
173
137
  ---
174
138
 
175
- ## 7. Conclusione
176
-
177
- Ogni libreria offre una soluzione robusta per l'internazionalizzazione di un'applicazione React:
178
-
179
- - **React-Intl** eccelle nella formattazione dei messaggi ed è una scelta popolare per soluzioni aziendali che si concentrano sulla sintassi dei messaggi ICU.
180
- - **React-i18next** fornisce un ambiente altamente flessibile e guidato dai plugin per esigenze i18n avanzate o dinamiche.
181
- - **Intlayer** offre un approccio **moderno e fortemente tipizzato** che unisce dichiarazioni di contenuto, routing localizzato avanzato e integrazioni basate su plugin (CRA, Vite).
139
+ ## Note pratiche per la migrazione (react-intl / react-i18next → Intlayer)
182
140
 
183
- La tua scelta dipende in gran parte dai requisiti di progetto, dall'esperienza dello sviluppatore desiderata (DX) e da quanto siano importanti le traduzioni tipizzate o il routing avanzato. Se dai valore al routing localizzato integrato e all'integrazione TypeScript, **Intlayer** potrebbe risultare più allettante. Se desideri una soluzione collaudata e ricca di ecosistemi, **React-i18next** è una grande scelta. Per esigenze di formattazione basate su ICU semplici, **React-Intl** è un'opzione affidabile.
141
+ - **Migra in modo incrementale**: Inizia con una funzionalità o una rotta; mantieni i cataloghi legacy in parallelo durante la transizione.
142
+ - **Adotta dizionari per componente**: Colloca il contenuto insieme ai componenti per ridurre l'accoppiamento.
143
+ - **Abilita controlli rigorosi**: Lascia che gli errori a tempo di compilazione evidenzino precocemente chiavi/locale mancanti in CI.
144
+ - **Misura i bundle**: Aspettati riduzioni man mano che le stringhe inutilizzate vengono eliminate.
184
145
 
185
146
  ---
186
147
 
187
- ### Ulteriori Letture
148
+ ## Conclusione
188
149
 
189
- - [Documentazione React-Intl](https://formatjs.io/docs/react-intl/)
190
- - [Documentazione React-i18next](https://react.i18next.com/)
191
- - [Guida all'Inizio con Intlayer + CRA](/#) (dal tuo documento)
192
- - [Guida all'Inizio con Intlayer + Vite & React](/#) (dal tuo documento)
150
+ Tutte e tre le librerie localizzano React in modo efficace. La differenza sta in quanta **infrastruttura** devi costruire per raggiungere una configurazione **sicura e scalabile**:
193
151
 
194
- Sentiti libero di mescolare e abbinare approcci per soddisfare i tuoi requisiti, non esiste una soluzione "taglia unica" e ogni libreria continua a evolversi per affrontare nuovi casi d'uso nell'ecosistema React.
152
+ - Con **Intlayer**, **contenuti modulari**, **tipizzazione TypeScript rigorosa**, **sicurezza a tempo di compilazione**, **bundle ottimizzati con tree-shaking** e **strumenti editoriali** sono impostazioni predefinite - non incombenze.
153
+ - Se il tuo team valorizza la **manutenibilità e la velocità** in app React multi-locale e basate su componenti, Intlayer offre il flusso di lavoro per sviluppatori e contenuti più **completo** oggi disponibile.
@@ -0,0 +1,268 @@
1
+ ---
2
+ createdAt: 2024-08-11
3
+ updatedAt: 2025-08-23
4
+ title: vue-i18n vs Intlayer
5
+ description: Confronta vue-i18n con Intlayer per l'internazionalizzazione (i18n) in app Vue/Nuxt
6
+ keywords:
7
+ - vue-i18n
8
+ - Intlayer
9
+ - Internazionalizzazione
10
+ - i18n
11
+ - Blog
12
+ - Vue
13
+ - Nuxt
14
+ - JavaScript
15
+ slugs:
16
+ - blog
17
+ - vue-i18n-vs-intlayer
18
+ ---
19
+
20
+ # vue-i18n VS Intlayer | Internazionalizzazione Vue (i18n)
21
+
22
+ Questa guida confronta due popolari opzioni i18n per **Vue 3** (e **Nuxt**): **vue-i18n** e **Intlayer**.
23
+ Ci concentriamo sugli strumenti moderni di Vue (Vite, Composition API) e valutiamo:
24
+
25
+ 1. **Architettura e organizzazione dei contenuti**
26
+ 2. **TypeScript e sicurezza**
27
+ 3. **Gestione delle traduzioni mancanti**
28
+ 4. **Routing e strategia URL**
29
+ 5. **Prestazioni e comportamento di caricamento**
30
+ 6. **Esperienza sviluppatore (DX), strumenti e manutenzione**
31
+ 7. **SEO e scalabilità per progetti di grandi dimensioni**
32
+
33
+ > **tl;dr**: Entrambi possono localizzare app Vue. Se desideri **contenuti a livello di componente**, **tipi TypeScript rigorosi**, **controlli delle chiavi mancanti in fase di build**, **dizionari tree-shaken** e **helper integrati per router/SEO** oltre a **Editor Visivo e traduzioni AI**, **Intlayer** è la scelta più completa e moderna.
34
+
35
+ ---
36
+
37
+ ## Posizionamento ad alto livello
38
+
39
+ - **vue-i18n** - La libreria i18n de-facto per Vue. Formattazione flessibile dei messaggi (stile ICU), blocchi SFC `<i18n>` per messaggi locali e un grande ecosistema. La sicurezza e la manutenzione su larga scala dipendono principalmente da te.
40
+ - **Intlayer** - Modello di contenuto incentrato sui componenti per Vue/Vite/Nuxt con **tipizzazione TS rigorosa**, **controlli in fase di build**, **tree-shaking**, **helper per router e SEO**, **Editor Visivo/CMS** opzionale e **traduzioni assistite da AI**.
41
+
42
+ ---
43
+
44
+ ## Confronto delle funzionalità affiancate (focalizzato su Vue)
45
+
46
+ | Funzionalità | **Intlayer** | **vue-i18n** |
47
+ | --------------------------------------------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
48
+ | **Traduzioni vicino ai componenti** | ✅ Sì, contenuto collocato per componente (es. `MyComp.content.ts`) | ✅ Sì, tramite blocchi SFC `<i18n>` (opzionale) |
49
+ | **Integrazione TypeScript** | ✅ Avanzata, tipi **rigorosi** generati automaticamente e completamento chiavi | ✅ Buona tipizzazione; **sicurezza rigorosa delle chiavi richiede configurazioni/discipline aggiuntive** |
50
+ | **Rilevamento traduzioni mancanti** | ✅ Avvisi/errori in **fase di build** e visibilità in TS | ⚠️ Fallback/avvisi a runtime |
51
+ | **Contenuti ricchi (componenti/Markdown)** | ✅ Supporto diretto per nodi ricchi e file di contenuto Markdown | ⚠️ Limitato (componenti tramite `<i18n-t>`, Markdown tramite plugin esterni) |
52
+ | **Traduzione con AI** | ✅ Flussi di lavoro integrati usando le tue chiavi provider AI | ❌ Non integrato |
53
+ | **Editor Visivo / CMS** | ✅ Editor Visivo gratuito e CMS opzionale | ❌ Non integrato (usa piattaforme esterne) |
54
+ | **Routing localizzato** | ✅ Helper per Vue Router/Nuxt per generare percorsi localizzati, URL e `hreflang` | ⚠️ Non core (usa Nuxt i18n o configurazioni personalizzate di Vue Router) |
55
+ | **Generazione dinamica delle rotte** | ✅ Sì | ❌ Non fornito (fornito da Nuxt i18n) |
56
+ | **Pluralizzazione e formattazione** | ✅ Schemi di enumerazione; formatter basati su Intl | ✅ Messaggi in stile ICU; formatter Intl |
57
+ | **Formati di contenuto** | ✅ `.ts`, `.js`, `.json`, `.md`, `.txt` (YAML in lavorazione) | ✅ `.json`, `.js` (più blocchi SFC `<i18n>`) |
58
+ | **Supporto ICU** | ⚠️ In lavorazione | ✅ Sì |
59
+ | **Helper SEO (sitemap, robots, metadata)** | ✅ Helper integrati (indipendenti dal framework) | ❌ Non core (Nuxt i18n/comunità) |
60
+ | **SSR/SSG** | ✅ Funziona con Vue SSR e Nuxt; non blocca il rendering statico | ✅ Funziona con Vue SSR/Nuxt |
61
+ | **Tree-shaking (spedire solo il contenuto usato)** | ✅ Per componente al momento della build | ⚠️ Parziale; richiede suddivisione manuale del codice/messaggi asincroni |
62
+ | **Caricamento lazy** | ✅ Per locale / per dizionario | ✅ Supporta messaggi di locale asincroni |
63
+ | **Rimozione del contenuto non utilizzato** | ✅ Sì (a tempo di build) | ❌ Non integrato |
64
+ | **Manutenibilità di progetti di grandi dimensioni** | ✅ Favorisce una struttura modulare e amichevole per i design system | ✅ Possibile, ma richiede una forte disciplina su file/namespace |
65
+ | **Ecosistema / comunità** | ⚠️ Più piccolo ma in rapida crescita | ✅ Grande e maturo nell'ecosistema Vue |
66
+
67
+ ---
68
+
69
+ ## Confronto approfondito
70
+
71
+ ### 1) Architettura e scalabilità
72
+
73
+ - **vue-i18n**: Le configurazioni comuni utilizzano **cataloghi centralizzati** per locale (opzionalmente suddivisi in file/namespace). I blocchi SFC `<i18n>` permettono messaggi locali, ma i team spesso tornano ai cataloghi condivisi man mano che i progetti crescono.
74
+ - **Intlayer**: Promuove **dizionari per componente** memorizzati accanto al componente che servono. Questo riduce i conflitti tra team, mantiene il contenuto facilmente rintracciabile e limita naturalmente la deriva/chiavi non utilizzate.
75
+
76
+ **Perché è importante:** In grandi app Vue o design system, il **contenuto modulare** scala meglio rispetto ai cataloghi monolitici.
77
+
78
+ ---
79
+
80
+ ### 2) TypeScript e sicurezza
81
+
82
+ - **vue-i18n**: Buon supporto TS; la **tipizzazione rigorosa delle chiavi** richiede tipicamente schemi/generici personalizzati e convenzioni attente.
83
+ - **Intlayer**: **Genera tipi rigorosi** dal tuo contenuto, offrendo **autocompletamento nell’IDE** e **errori a tempo di compilazione** per errori di battitura o chiavi mancanti.
84
+
85
+ **Perché è importante:** Il typing forte intercetta i problemi **prima** del runtime.
86
+
87
+ ---
88
+
89
+ ### 3) Gestione delle traduzioni mancanti
90
+
91
+ - **vue-i18n**: Avvisi/fallback **a runtime** (es. fallback su locale o chiave).
92
+ - **Intlayer**: Rilevamento **a build-time** con avvisi/errori su tutte le localizzazioni e chiavi.
93
+
94
+ **Perché è importante:** L’applicazione a build-time mantiene l’interfaccia di produzione pulita e coerente.
95
+
96
+ ---
97
+
98
+ ### 4) Strategia di routing e URL (Vue Router/Nuxt)
99
+
100
+ - **Entrambi** possono funzionare con rotte localizzate.
101
+ - **Intlayer** fornisce helper per **generare percorsi localizzati**, **gestire i prefissi di localizzazione** ed emettere **`<link rel="alternate" hreflang>`** per la SEO. Con Nuxt, integra il routing del framework.
102
+
103
+ **Perché è importante:** Meno strati di collegamento personalizzati e **SEO più pulita** tra le localizzazioni.
104
+
105
+ ---
106
+
107
+ ### 5) Prestazioni e comportamento di caricamento
108
+
109
+ - **vue-i18n**: Supporta messaggi di localizzazione asincroni; evitare un bundle eccessivo è responsabilità tua (dividi i cataloghi con attenzione).
110
+ - **Intlayer**: **Ottimizza l’albero** durante la build e **carica in modo lazy per dizionario/località**. Il contenuto non utilizzato non viene incluso.
111
+
112
+ **Perché è importante:** Bundle più piccoli e avvio più veloce per app Vue multi-localizzazione.
113
+
114
+ ---
115
+
116
+ ### 6) Esperienza sviluppatore e strumenti
117
+
118
+ - **vue-i18n**: Documentazione e community mature; solitamente ti affiderai a **piattaforme di localizzazione esterne** per i flussi editoriali.
119
+ - **Intlayer**: Fornisce un **Editor Visivo gratuito**, un **CMS** opzionale (compatibile con Git o esternalizzato), un’**estensione VSCode**, utility **CLI/CI** e **traduzioni assistite da AI** utilizzando le tue chiavi provider.
120
+
121
+ **Perché è importante:** Costi operativi ridotti e un ciclo sviluppo–contenuto più breve.
122
+
123
+ ---
124
+
125
+ ### 7) SEO, SSR & SSG
126
+
127
+ - **Entrambi** funzionano con Vue SSR e Nuxt.
128
+ - **Intlayer**: Aggiunge **helper SEO** (sitemap/metadata/`hreflang`) indipendenti dal framework e ben integrati con le build Vue/Nuxt.
129
+
130
+ **Perché è importante:** SEO internazionale senza configurazioni personalizzate complesse.
131
+
132
+ ---
133
+
134
+ ## Perché Intlayer? (Problema e approccio)
135
+
136
+ La maggior parte degli stack i18n (incluso **vue-i18n**) parte da **cataloghi centralizzati**:
137
+
138
+ ```bash
139
+ .
140
+ ├── locales
141
+ │ ├── en.json
142
+ │ ├── es.json
143
+ │ └── fr.json
144
+ └── src
145
+ └── components
146
+ └── MyComponent.vue
147
+ ```
148
+
149
+ Oppure con cartelle per locale:
150
+
151
+ ```bash
152
+ .
153
+ ├── locales
154
+ │ ├── en
155
+ │ │ ├── footer.json
156
+ │ │ └── navbar.json
157
+ │ ├── fr
158
+ │ │ ├── footer.json
159
+ │ │ └── navbar.json
160
+ │ └── es
161
+ │ ├── footer.json
162
+ │ └── navbar.json
163
+ └── src
164
+ └── components
165
+ └── MyComponent.vue
166
+ ```
167
+
168
+ Questo spesso rallenta lo sviluppo man mano che le app crescono:
169
+
170
+ 1. **Per un nuovo componente** crei/modifichi cataloghi remoti, colleghi namespace e traduci (spesso tramite copia/incolla manuale da strumenti AI).
171
+ 2. **Quando modifichi componenti** cerchi chiavi condivise, traduci, mantieni i locali sincronizzati, rimuovi chiavi inutilizzate e allinei le strutture JSON.
172
+
173
+ **Intlayer** delimita il contenuto **per componente** e lo mantiene **vicino al codice**, come già facciamo con CSS, storie, test e documentazione:
174
+
175
+ ```bash
176
+ .
177
+ └── components
178
+ └── MyComponent
179
+ ├── MyComponent.content.ts
180
+ └── MyComponent.vue
181
+ ```
182
+
183
+ **Dichiarazione del contenuto** (per componente):
184
+
185
+ ```ts fileName="./components/MyComponent/MyComponent.content.ts"
186
+ import { t, type Dictionary } from "intlayer";
187
+
188
+ const componentExampleContent = {
189
+ key: "component-example",
190
+ content: {
191
+ greeting: t({
192
+ en: "Hello World",
193
+ es: "Hola Mundo",
194
+ fr: "Bonjour le monde",
195
+ }),
196
+ },
197
+ } satisfies Dictionary;
198
+
199
+ export default componentExampleContent;
200
+ ```
201
+
202
+ **Utilizzo in Vue** (Composition API):
203
+
204
+ ```vue fileName="./components/MyComponent/MyComponent.vue"
205
+ <script setup lang="ts">
206
+ import { useIntlayer } from "vue-intlayer"; // Integrazione Vue
207
+ const { greeting } = useIntlayer("component-example");
208
+ </script>
209
+
210
+ <template>
211
+ <span>{{ greeting }}</span>
212
+ </template>
213
+ ```
214
+
215
+ Questo approccio:
216
+
217
+ - **Accelera lo sviluppo** (dichiara una volta; completamento automatico IDE/AI).
218
+ - **Pulisce il codice** (1 componente = 1 dizionario).
219
+ - **Facilita duplicazione/migrazione** (copia un componente e il suo contenuto insieme).
220
+ - **Evita chiavi inutilizzate** (i componenti non usati non importano contenuti).
221
+ - **Ottimizza il caricamento** (i componenti caricati in modo lazy portano con sé il loro contenuto).
222
+
223
+ ---
224
+
225
+ ## Funzionalità aggiuntive di Intlayer (rilevanti per Vue)
226
+
227
+ - **Supporto cross-framework**: Funziona con Vue, Nuxt, Vite, React, Express e altri.
228
+ - **Gestione contenuti basata su JavaScript**: Dichiara nel codice con piena flessibilità.
229
+ - **File di dichiarazione per ogni locale**: Definisci tutte le localizzazioni e lascia che gli strumenti generino il resto.
230
+ - **Ambiente con tipizzazione sicura**: Configurazione TS robusta con completamento automatico.
231
+ - **Recupero contenuti semplificato**: Un singolo hook/composable per ottenere tutti i contenuti di un dizionario.
232
+ - **Codebase organizzata**: 1 componente = 1 dizionario nella stessa cartella.
233
+ - **Routing migliorato**: Helper per percorsi e metadata localizzati di **Vue Router/Nuxt**.
234
+ - **Supporto Markdown**: Importa Markdown remoto/locale per ogni locale; espone il frontmatter al codice.
235
+ - **Editor Visuale gratuito & CMS opzionale**: Creazione contenuti senza piattaforme di localizzazione a pagamento; sincronizzazione compatibile con Git.
236
+ - **Contenuti tree-shakable**: Include solo ciò che viene utilizzato; supporta il caricamento lazy.
237
+ - **Compatibile con rendering statico**: Non blocca la generazione statica (SSG).
238
+ - **Traduzioni potenziate dall’IA**: Traduci in 231 lingue utilizzando il tuo provider AI/chiave API.
239
+ - **Server MCP & estensione VSCode**: Automatizza i flussi di lavoro i18n e la creazione di contenuti direttamente nel tuo IDE.
240
+ - **Interoperabilità**: Collegamenti con **vue-i18n**, **react-i18next** e **react-intl** quando necessario.
241
+
242
+ ---
243
+
244
+ ## Quando scegliere quale?
245
+
246
+ - **Scegli vue-i18n** se vuoi l’**approccio standard di Vue**, ti senti a tuo agio a gestire cataloghi/namespace da solo e la tua app è di **dimensioni piccole o medie** (o già usi Nuxt i18n).
247
+ - **Scegli Intlayer** se apprezzi il **contenuto scoped per componente**, il **TypeScript rigoroso**, le **garanzie a build-time**, il **tree-shaking** e gli strumenti **batteries-included** per routing/SEO/editor-specialmente per **codebase Vue/Nuxt grandi e modulari**.
248
+
249
+ ---
250
+
251
+ ## Note pratiche per la migrazione (vue-i18n → Intlayer)
252
+
253
+ - **Inizia per funzionalità**: Sposta una rotta/vista/componente alla volta nei dizionari locali di Intlayer.
254
+ - **Collega durante la migrazione**: Mantieni i cataloghi vue-i18n in parallelo; sostituisci gradualmente le ricerche.
255
+ - **Abilita controlli rigorosi**: Permetti al rilevamento in fase di build di evidenziare presto chiavi/locale mancanti.
256
+ - **Adotta helper per router/SEO**: Standardizza il rilevamento della localizzazione e i tag `hreflang`.
257
+ - **Misura i bundle**: Aspettati **riduzioni delle dimensioni del bundle** man mano che il contenuto non utilizzato viene escluso.
258
+
259
+ ---
260
+
261
+ ## Conclusione
262
+
263
+ Sia **vue-i18n** che **Intlayer** localizzano bene le app Vue. La differenza è **quanto devi costruire da solo** per ottenere una configurazione robusta e scalabile:
264
+
265
+ - Con **Intlayer**, **contenuti modulari**, **TypeScript rigoroso**, **sicurezza a tempo di compilazione**, **bundle ottimizzati con tree-shaking** e **strumenti per router/SEO/editor** sono disponibili **pronti all'uso**.
266
+ - Se il tuo team dà priorità a **manutenibilità e velocità** in un'app Vue/Nuxt multilingue e basata su componenti, Intlayer offre l'esperienza **più completa** oggi disponibile.
267
+
268
+ Consulta il documento ['Perché Intlayer?'](https://intlayer.org/doc/why) per maggiori dettagli.
@@ -1,6 +1,6 @@
1
1
  ---
2
- createdAt: 2024-08-11
3
- updatedAt: 2025-06-29
2
+ createdAt: 2025-08-23
3
+ updatedAt: 2025-08-23
4
4
  title: Intlayerとnext-i18next
5
5
  description: Next.jsアプリのためにnext-i18nextとIntlayerを連携する
6
6
  keywords: