@intlayer/docs 5.8.0-canary.0 → 5.8.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 +89 -220
  11. package/blog/en/react-i18next_vs_react-intl_vs_intlayer.md +85 -123
  12. package/blog/en/vue-i18n_vs_intlayer.md +268 -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 +40 -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 +7 -7
  223. package/src/generated/blog.entry.ts +41 -0
@@ -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: next-i18next vs next-intl vs Intlayer
5
5
  description: Confronta next-i18next con next-intl e Intlayer per l'internazionalizzazione (i18n) di un'app Next.js
6
6
  keywords:
@@ -8,7 +8,7 @@ keywords:
8
8
  - next-i18next
9
9
  - Intlayer
10
10
  - Internazionalizzazione
11
- - Blogumentazione
11
+ - Blog
12
12
  - Next.js
13
13
  - JavaScript
14
14
  - React
@@ -17,269 +17,146 @@ slugs:
17
17
  - next-i18next-vs-next-intl-vs-intlayer
18
18
  ---
19
19
 
20
- # next-i18next VS next-intl VS Intlayer | Next.js Internazionalizzazione (i18n)
20
+ # next-i18next VS next-intl VS intlayer | Internazionalizzazione (i18n) in Next.js
21
21
 
22
- Di seguito è riportato un confronto conciso di **tre librerie popolari** per internazionalizzare (i18n) un'applicazione Next.js: **next-intl**, **next-i18next** e **Intlayer**.
22
+ Questa guida confronta tre opzioni i18n ampiamente utilizzate per **Next.js**: **next-intl**, **next-i18next** e **Intlayer**.
23
+ Ci concentriamo su **Next.js 13+ App Router** (con **React Server Components**) e valutiamo:
23
24
 
24
- Questo documento evidenzia criteri chiave:
25
-
26
- 1. **Architettura** (mantenere le traduzioni vicine ai loro componenti)
27
- 2. **Supporto TypeScript**
25
+ 1. **Architettura e organizzazione dei contenuti**
26
+ 2. **TypeScript e sicurezza**
28
27
  3. **Gestione delle traduzioni mancanti**
29
- 4. **Supporto per i Componenti del Server**
30
- 5. **Routing e middleware avanzati** per Next.js
31
- 6. **Semplicità di configurazione**
28
+ 4. **Routing e middleware**
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
32
 
33
- La guida fornisce anche uno **sguardo approfondito su Intlayer**, mostrando perché può essere una scelta forte, specialmente per Next.js 13+, inclusi **App Router** e **Server Components**.
33
+ > **tl;dr**: Tutti e tre possono localizzare un'app Next.js. Se desideri **contenuti a livello di componente**, **tipi TypeScript rigorosi**, **controlli delle chiavi mancanti in fase di build**, **dizionari ottimizzati con tree-shaking** e **helper di prima classe per App Router e SEO**, **Intlayer** è la scelta più completa e moderna.
34
34
 
35
35
  ---
36
36
 
37
- ## Panoramica di Ogni Libreria
38
-
39
- ### 1. next-intl
37
+ ## Posizionamento ad alto livello
40
38
 
41
- **Focus principale**: Configurazione rapida e semplice con un approccio leggero alla localizzazione.
39
+ - **next-intl** - Formattazione dei messaggi leggera e semplice con un solido supporto per Next.js. I cataloghi centralizzati sono comuni; l’esperienza sviluppatore (DX) è semplice, ma la sicurezza e la manutenzione su larga scala rimangono per lo più a tuo carico.
40
+ - **next-i18next** - i18next vestito per Next.js. Ecosistema maturo e funzionalità tramite plugin (ad esempio, ICU), ma la configurazione può essere verbosa e i cataloghi tendono a centralizzarsi con la crescita dei progetti.
41
+ - **Intlayer** - Modello di contenuto incentrato sui componenti per Next.js, **tipizzazione TS rigorosa**, **controlli in fase di build**, **tree-shaking**, **middleware integrati e helper SEO**, **Editor Visivo/CMS** opzionale e **traduzioni assistite da AI**.
42
42
 
43
- - **Architettura**: Incoraggia a posizionare le traduzioni in una singola cartella (ad es., `locales/`), ma consente anche strategie multiple. Non impone strettamente un’architettura “traduzione per componente”.
44
- - **Supporto TypeScript**: Integrazione di base con TypeScript. Esistono alcune definizioni di tipo, ma non sono incentrate sull'auto-generazione di definizioni TypeScript dai file di traduzione.
45
- - **Traduzioni mancanti**: Meccanismo di fallback di base. Per impostazione predefinita, torna a una chiave o a una stringa di locale predefinita. Nessun strumento robusto out-of-the-box per controlli avanzati delle traduzioni mancanti.
46
- - **Supporto per i Componenti del Server**: Funziona con Next.js 13+ in generale, ma il pattern è meno specializzato per un uso profondo lato server (ad es., componenti del server con routing dinamico complesso).
47
- - **Routing e Middleware**: Il supporto middleware è possibile ma limitato. Si basa tipicamente su Next.js `Middleware` per la rilevazione della lingua, o configurazioni manuali per riscrivere i percorsi delle lingue.
48
- - **Semplicità di Configurazione**: Molto semplice. Sono necessarie poche boilerplate.
43
+ ---
49
44
 
50
- **Usa quando**: Vuoi un approccio più semplice o sei a tuo agio nel gestire le tue traduzioni in modi più convenzionali (come una cartella con file JSON per locale).
45
+ ## Confronto delle funzionalità affiancate (focalizzato su Next.js)
46
+
47
+ | Funzionalità | `next-intlayer` (Intlayer) | `next-intl` | `next-i18next` |
48
+ | ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
49
+ | **Traduzioni Vicino ai Componenti** | ✅ Sì, contenuto collocato con ogni componente | ❌ No | ❌ No |
50
+ | **Integrazione TypeScript** | ✅ Avanzata, tipi rigorosi generati automaticamente | ✅ Buona | ⚠️ Base |
51
+ | **Rilevamento Traduzioni Mancanti** | ✅ Evidenziazione errori TypeScript e errore/avviso in fase di compilazione | ⚠️ Ripiego a runtime | ⚠️ Ripiego a runtime |
52
+ | **Contenuto Ricco (JSX/Markdown/componenti)** | ✅ Supporto diretto | ❌ Non progettato per nodi ricchi | ⚠️ Limitato |
53
+ | **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 |
54
+ | **Editor Visuale** | ✅ Sì, Editor Visuale locale + CMS opzionale; può esternalizzare il contenuto del codice; integrabile | ❌ No / disponibile tramite piattaforme di localizzazione esterne | ❌ No / disponibile tramite piattaforme di localizzazione esterne |
55
+ | **Routing Localizzato** | ✅ Sì, supporta percorsi localizzati nativamente (funziona con Next.js e Vite) | ✅ Integrato, App Router supporta il segmento `[locale]` | ✅ Integrato |
56
+ | **Generazione Dinamica delle Rotte** | ✅ Sì | ✅ Sì | ✅ Sì |
57
+ | **Pluralizzazione** | ✅ Modelli basati su enumerazioni | ✅ Buono | ✅ Buono |
58
+ | **Formattazione (date, numeri, valute)** | ✅ Formatter ottimizzati (Intl sotto il cofano) | ✅ Buono (helper Intl) | ✅ Buono (helper Intl) |
59
+ | **Formato del contenuto** | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml WIP) | ✅ .json, .js, .ts | ⚠️ .json |
60
+ | **Supporto ICU** | ⚠️ In lavorazione | ✅ Sì | ⚠️ Tramite plugin (`i18next-icu`) |
61
+ | **Helper SEO (hreflang, sitemap)** | ✅ Strumenti integrati: helper per sitemap, robots.txt, metadata | ✅ Buono | ✅ Buono |
62
+ | **Ecosistema / Comunità** | ⚠️ Più piccolo ma in rapida crescita e reattivo | ✅ Di medie dimensioni, focalizzato su Next.js | ✅ Di medie dimensioni, focalizzato su Next.js |
63
+ | **Rendering lato server & 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 | ⚠️ Supportato a livello di pagina ma è necessario passare le funzioni t sull'albero dei componenti per i componenti server figli |
64
+ | **Tree-shaking (caricamento solo del contenuto usato)** | ✅ Sì, per componente al momento della build tramite plugin Babel/SWC | ⚠️ Parziale | ⚠️ Parziale |
65
+ | **Lazy loading** | ✅ Sì, per locale / per dizionario | ✅ Sì (per rotta / per locale), necessita gestione dei namespace | ✅ Sì (per rotta / per locale), necessita gestione dei namespace |
66
+ | **Rimozione dei contenuti non utilizzati** | ✅ Sì, per dizionario al momento della build | ❌ No, può essere gestito manualmente con la gestione dei namespace | ❌ No, può essere gestito manualmente con la gestione dei namespace |
67
+ | **Gestione di Grandi Progetti** | ✅ Favorisce un approccio modulare, adatto a design-system | ✅ Modulare con configurazione | ✅ Modulare con configurazione |
51
68
 
52
69
  ---
53
70
 
54
- ### 2. next-i18next
71
+ ## Confronto Approfondito
55
72
 
56
- **Focus principale**: Soluzione collaudata che utilizza `i18next` sotto il cofano, ampiamente adottata per progetti Next.js.
73
+ ### 1) Architettura e scalabilità
57
74
 
58
- - **Architettura**: Organizza spesso le traduzioni nella cartella `public/locales`. Non è specificamente progettato per mantenere le traduzioni “vicine” a ciascun componente, anche se puoi adottare manualmente una struttura diversa.
59
- - **Supporto TypeScript**: Copertura ragionevole di TypeScript, ma richiede configurazione personalizzata per traduzioni tipizzate e hooks tipizzati.
60
- - **Traduzioni mancanti**: i18next offre interpolazione/fallback. Tuttavia, la rilevazione delle traduzioni mancanti richiede generalmente configurazioni extra o plugin di terze parti.
61
- - **Supporto per i Componenti del Server**: L'uso di base con Next.js 13 è documentato, ma l'uso avanzato (ad es., integrazione profonda con componenti del server, generazione dinamica di percorsi) può essere ingombrante.
62
- - **Routing e Middleware**: Si basa pesantemente su Next.js `Middleware` e riscritture per i sottopercorsi locali. Per configurazioni più complesse, potresti dover approfondire nella configurazione avanzata di i18next.
63
- - **Semplicità di Configurazione**: Approccio familiare per chi è abituato a i18next. Tuttavia, può diventare più pesante in termini di boilerplate quando sono necessarie funzionalità i18n avanzate (namespace, più lingue di fallback, ecc.).
75
+ - **next-intl / next-i18next**: Predefinito a **cataloghi centralizzati** per locale (più **namespace** in i18next). Funziona bene all'inizio, ma spesso diventa una grande superficie condivisa con un aumento del coupling e del churn delle chiavi.
76
+ - **Intlayer**: Favorisce dizionari **per componente** (o per funzionalità) **co-localizzati** con il codice che servono. Questo riduce il carico cognitivo, facilita la duplicazione/migrazione delle parti dell’interfaccia utente e riduce i conflitti tra team. Il contenuto non utilizzato è naturalmente più facile da individuare ed eliminare.
64
77
 
65
- **Usa quando**: Sei già impegnato nell'ecosistema `i18next` o hai traduzioni esistenti basate su i18next.
78
+ **Perché è importante:** In grandi codebase o configurazioni di design-system, il **contenuto modulare** scala meglio rispetto a cataloghi monolitici.
66
79
 
67
80
  ---
68
81
 
69
- ### 3. Intlayer
70
-
71
- **Focus principale**: Una libreria i18n moderna e open-source specificamente progettata per Next.js **App Router** (12, 13, 14 e 15) con supporto integrato per **Server Components** e **Turbopack**.
82
+ ### 2) TypeScript e sicurezza
72
83
 
73
- #### Vantaggi Chiave
84
+ - **next-intl**: Supporto solido per TypeScript, ma le **chiavi non sono tipizzate rigorosamente di default**; dovrai mantenere manualmente i pattern di sicurezza.
85
+ - **next-i18next**: Tipizzazioni base per gli hook; la **tipizzazione rigorosa delle chiavi richiede strumenti/configurazioni aggiuntive**.
86
+ - **Intlayer**: **Genera tipi rigorosi** dal tuo contenuto. **Completamento automatico nell’IDE** e **errori a tempo di compilazione** individuano errori di battitura e chiavi mancanti prima del deploy.
74
87
 
75
- 1. **Architettura**
88
+ **Perché è importante:** Il typing forte sposta i fallimenti a sinistra (CI/build) invece che a destra (runtime).
76
89
 
77
- - Incoraggia a posizionare **le traduzioni direttamente accanto ai loro componenti**. Ogni pagina o componente può avere il proprio file `.content.ts` (o JSON), niente più ricerche in una gigantesca cartella di traduzioni.
78
- - Questo rende il tuo codice più **modulare e manutenibile**, specialmente in grandi basi di codice.
79
-
80
- 2. **Supporto TypeScript**
81
-
82
- - **Definizioni di tipo auto-generate**: Nel momento in cui definisci il tuo contenuto, Intlayer genera tipi che alimentano l'autocompletamento e catturano errori di traduzione.
83
- - Minimizza gli errori di runtime come chiavi mancanti e offre avanzate **autocompletamenti** direttamente nel tuo IDE.
84
-
85
- 3. **Gestione delle Traduzioni Mancanti**
90
+ ---
86
91
 
87
- - Durante la build, Intlayer può **rilevare chiavi di traduzione mancanti** e lanciare avvisi o errori.
88
- - Questo garantisce che non spedisci mai accidentalmente con testi mancanti nelle tue lingue.
92
+ ### 3) Gestione delle traduzioni mancanti
89
93
 
90
- 4. **Ottimizzato per i Componenti del Server**
94
+ - **next-intl / next-i18next**: Si affidano a **fallback a runtime** (es. mostrare la chiave o la lingua predefinita). La build non fallisce.
95
+ - **Intlayer**: **Rilevamento a tempo di build** con **avvisi/errori** per lingue o chiavi mancanti.
91
96
 
92
- - Completamente compatibile con il **App Router** di Next.js e il nuovo paradigma dei **Server Components**.
93
- - Fornisce provider specializzati (`IntlayerServerProvider`, `IntlayerClientProvider`) per **isolare il contesto del server** (vitale quando si tratta di Next.js 13+).
97
+ **Perché è importante:** Catturare le lacune durante la build previene “stringhe misteriose” in produzione e si allinea a rigide regole di rilascio.
94
98
 
95
- 5. **Routing e Middleware Avanzati**
99
+ ---
96
100
 
97
- - Include un dedicato [**`intlayerMiddleware`**](#) per **rilevazione automatica delle lingue** (via cookie o intestazioni del browser) e generazione avanzata di percorsi.
98
- - Gestisce dinamicamente i percorsi localizzati (ad es., `/en-US/about` vs. `/fr/about`) con configurazione minima.
99
- - Offre metodi helper come `getMultilingualUrls` per generare collegamenti a lingue alternative (ottimo per **SEO**).
101
+ ### 4) Routing, middleware e strategia URL
100
102
 
101
- 6. **Configurazione Semplificata**
102
- - Un singolo file di configurazione (`intlayer.config.ts`) per definire la tua localizzazione, la lingua predefinita e le preferenze di integrazione.
103
- - Un plugin wrapper `withIntlayer(nextConfig)` che **inietta** tutte le variabili d'ambiente e watchers per il tuo contenuto.
104
- - **Nessuna grande configurazione di fallback**, il sistema è progettato per “funzionare semplicemente” con frizione minima.
103
+ - Tutti e tre funzionano con il **routing localizzato di Next.js** sull’App Router.
104
+ - **Intlayer** va oltre con il **middleware i18n** (rilevamento della lingua tramite header/cookie) e **helper** per generare URL localizzati e tag `<link rel="alternate" hreflang="…">`.
105
105
 
106
- > **Conclusione**: Intlayer è una soluzione moderna che vuole **promuovere le migliori pratiche**: da **mantenere le traduzioni vicine** a ciascun componente React, all'offrire un **robusto supporto TS** e un facile utilizzo lato server, mentre **riduce drasticamente la boilerplate**.
106
+ **Perché è importante:** Meno livelli di collegamento personalizzati; **UX coerente** e **SEO pulita** tra le diverse localizzazioni.
107
107
 
108
108
  ---
109
109
 
110
- ## Confronto delle Caratteristiche a Vista
111
-
112
- | **Caratteristica** | **next-intl** | **next-i18next** | **Intlayer** |
113
- | ------------------------------------------------ | ----------------------------------------------- | ------------------------------------------------- | -------------------------------------------- |
114
- | **Mantenere le traduzioni vicino ai componenti** | Parziale – tipicamente una cartella di lingue | Non predefinito – spesso `public/locales` | **Sì – raccomandato & facile** |
115
- | **TypeScript Autogenerato** | Definizioni di base TS | Supporto TS di base | **Sì – avanzato out-of-the-box** |
116
- | **Rilevazione delle traduzioni mancanti** | Per lo più stringhe di fallback | Per lo più stringhe di fallback | **Sì – controlli in fase di build** |
117
- | **Supporto per i Componenti del Server** | Funziona ma non specializzato | Supportato ma può essere verboso | **Full support con provider specializzati** |
118
- | **Routing e Middleware** | Integrato manualmente con il middleware di Next | Fornito tramite configurazione di riscrittura | **Middleware i18n dedicato + hook avanzati** |
119
- | **Complesso di Configurazione** | Semplice, configurazione minima | Tradizionale, può essere verbosa per usi avanzati | **Un file di configurazione & plugin** |
120
-
121
- ---
110
+ ### 5) Allineamento con i Server Components (RSC)
122
111
 
123
- ## Perché Intlayer?
112
+ - **Tutti** supportano Next.js 13+.
113
+ - **Intlayer** semplifica il **confine server/client** con un’API coerente e provider progettati per RSC, così non devi passare formatter o funzioni di traduzione attraverso gli alberi dei componenti.
124
114
 
125
- Per i team che migrano verso o costruiscono su **Next.js App Router** (versioni 13, 14 o 15) con **Server Components**, Intlayer fornisce:
115
+ **Perché è importante:** Modello mentale più chiaro e meno casi limite negli alberi ibridi.
126
116
 
127
- 1. **Un'Architettura Snella**
117
+ ---
128
118
 
129
- - Ogni percorso o componente contiene le proprie traduzioni. Questo favorisce chiarezza e manutenibilità.
119
+ ### 6) Prestazioni e comportamento di caricamento
130
120
 
131
- 2. **Integrazione Potente con TypeScript**
121
+ - **next-intl / next-i18next**: Controllo parziale tramite **namespaces** e **divisioni a livello di route**; rischio di includere stringhe inutilizzate se non si mantiene la disciplina.
122
+ - **Intlayer**: Effettua **tree-shaking** durante la build e **caricamento lazy per dizionario/locale**. Il contenuto non utilizzato non viene incluso.
132
123
 
133
- - Ottieni sicurezza a livello di compilatore, evitando chiavi di traduzione “piene di errori di battitura” o mancanti.
124
+ **Perché è importante:** Bundle più piccoli e avvio più veloce, specialmente su siti multilingua.
134
125
 
135
- 3. **Avvisi Reali per Traduzioni Mancanti**
126
+ ---
136
127
 
137
- - Se dimentichi una chiave o una traduzione linguistica, sarai avvisato in fase di build (anziché spedire un'interfaccia utente incompleta).
128
+ ### 7) DX, strumenti e manutenzione
138
129
 
139
- 4. **Routing Avanzato Integrato**
130
+ - **next-intl / next-i18next**: Di solito si collegano piattaforme esterne per traduzioni e flussi editoriali.
131
+ - **Intlayer**: Include un **Editor Visivo gratuito** e un **CMS opzionale** (compatibile con Git o esternalizzato). Inoltre, una **estensione VSCode** per la creazione di contenuti e **traduzioni assistite da AI** utilizzando le tue chiavi provider.
140
132
 
141
- - Rilevazione automatica delle lingue, generazione dinamica dei percorsi e facile gestione degli URL localizzati sono inclusi.
142
- - Un `intlayerMiddleware` standard non richiede riscritture personalizzate profonde.
133
+ **Perché è importante:** Riduce i costi operativi e accorcia il ciclo tra sviluppatori e autori dei contenuti.
143
134
 
144
- 5. **Configurazione Unica**
135
+ ---
145
136
 
146
- - Boilerplate minima: definisci semplicemente il tuo `intlayer.config.ts`, avvolgi `next.config` con `withIntlayer` e aggiungi il middleware ufficiale.
147
- - Utilizzo chiaro e diretto per componenti **server** e **client** tramite `IntlayerServerProvider` e `IntlayerClientProvider`.
137
+ ## Quando scegliere quale?
148
138
 
149
- 6. **SEO-Friendly**
150
- - Helpers integrati (`getMultilingualUrls`, attributi `hrefLang`, ecc.) rendono facile produrre pagine e sitemap conformi alle norme SEO.
139
+ - **Scegli next-intl** se desideri una soluzione **minimale**, ti senti a tuo agio con cataloghi centralizzati e la tua app è di **dimensioni piccole o medie**.
140
+ - **Scegli next-i18next** se hai bisogno dell’**ecosistema di plugin di i18next** (ad esempio, regole ICU avanzate tramite plugin) e il tuo team conosce già i18next, accettando una **maggiore configurazione** per flessibilità.
141
+ - **Scegli Intlayer** se apprezzi il **contenuto a livello di componente**, il **TypeScript rigoroso**, le **garanzie a build-time**, il **tree-shaking** e gli strumenti **batteries-included** per routing/SEO/editor - specialmente per **Next.js App Router** e **codebase grandi e modulari**.
151
142
 
152
143
  ---
153
144
 
154
- ## Esempio: Intlayer in Azione
155
-
156
- Di seguito è un _very_ condensa snippet che illustra come sfruttare Intlayer in un progetto Next.js 15. Per i dettagli completi e i codici di esempio, [controlla la guida completa di Intlayer](#).
157
-
158
- <details>
159
- <summary>Esempio passo-passo</summary>
160
-
161
- 1. **Installa e Configura**
162
-
163
- ```bash
164
- npm install intlayer next-intlayer
165
- ```
166
-
167
- ```ts
168
- // intlayer.config.ts
169
- import { Locales, type IntlayerConfig } from "intlayer";
170
-
171
- const config: IntlayerConfig = {
172
- internationalization: {
173
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
174
- defaultLocale: Locales.ENGLISH,
175
- },
176
- };
177
- export default config;
178
- ```
179
-
180
- 2. **Usa il Plugin**
181
-
182
- ```ts
183
- // next.config.mjs
184
- import { withIntlayer } from "next-intlayer/server";
185
-
186
- /** @type {import('next').NextConfig} */
187
- const nextConfig = {};
188
-
189
- export default withIntlayer(nextConfig);
190
- ```
191
-
192
- 3. **Aggiungi Middleware**
193
-
194
- ```ts
195
- // src/middleware.ts
196
- export { intlayerMiddleware as middleware } from "next-intlayer/middleware";
197
-
198
- export const config = {
199
- matcher:
200
- "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
201
- };
202
- ```
203
-
204
- 4. **Crea un Layout Localizzato**
205
-
206
- ```tsx
207
- // src/app/[locale]/layout.tsx
208
- import { getHTMLTextDir } from "intlayer";
209
- import { NextLayoutIntlayer } from "next-intlayer";
210
-
211
- const LocaleLayout: NextLayoutIntlayer = async ({ children, params }) => {
212
- const { locale } = params;
213
- return (
214
- <html lang={locale} dir={getHTMLTextDir(locale)}>
215
- <body>{children}</body>
216
- </html>
217
- );
218
- };
219
-
220
- export { generateStaticParams } from "next-intlayer";
221
- export default LocaleLayout;
222
- ```
223
-
224
- 5. **Dichiarare e Usare il Contenuto**
225
-
226
- ```tsx
227
- // src/app/[locale]/page.content.ts
228
- import { t } from "intlayer";
229
-
230
- export default {
231
- key: "page",
232
- content: {
233
- getStarted: {
234
- main: t({
235
- en: "Get started by editing",
236
- fr: "Commencez par éditer",
237
- es: "Comience por editar",
238
- }),
239
- pageLink: "src/app/page.tsx",
240
- },
241
- },
242
- };
243
- ```
244
-
245
- ```tsx
246
- // src/app/[locale]/page.tsx
247
- import { IntlayerServerProvider } from "next-intlayer/server";
248
- import { IntlayerClientProvider, useIntlayer } from "next-intlayer";
249
-
250
- const PageContent = () => {
251
- const { content } = useIntlayer("page");
252
- return (
253
- <>
254
- <p>{content.getStarted.main}</p>
255
- <code>{content.getStarted.pageLink}</code>
256
- </>
257
- );
258
- };
259
-
260
- export default function Page({ params }) {
261
- return (
262
- <IntlayerServerProvider locale={params.locale}>
263
- <IntlayerClientProvider locale={params.locale}>
264
- <PageContent />
265
- </IntlayerClientProvider>
266
- </IntlayerServerProvider>
267
- );
268
- }
269
- ```
270
-
271
- </details>
145
+ ## Note pratiche per la migrazione (next-intl / next-i18next → Intlayer)
146
+
147
+ - **Inizia per funzionalità**: Sposta una rotta o un componente alla volta verso i **dizionari locali**.
148
+ - **Mantieni i vecchi cataloghi in parallelo**: Usa un ponte durante la migrazione; evita un cambiamento drastico tutto in una volta.
149
+ - **Attiva i controlli rigorosi**: Permetti che la rilevazione a build-time evidenzi presto le lacune.
150
+ - **Adotta middleware e helper**: Standardizza il rilevamento della locale e i tag SEO su tutto il sito.
151
+ - **Misura i bundle**: Aspettati **riduzioni nella dimensione del bundle** man mano che il contenuto non utilizzato viene eliminato.
272
152
 
273
153
  ---
274
154
 
275
155
  ## Conclusione
276
156
 
277
- Ogni soluzione, **next-intl**, **next-i18next** e **Intlayer**, si è dimostrata efficace per progetti multilingue Next.js. Tuttavia, **Intlayer** va oltre:
157
+ Tutte e tre le librerie riescono nella localizzazione di base. La differenza è **quanto lavoro devi fare** per ottenere una configurazione robusta e scalabile in **Next.js moderno**:
278
158
 
279
- - **Incoraggiando fortemente un'architettura di traduzione a livello di componente**
280
- - Integrandosi senza soluzione di continuità con **Next.js 13+ e Server Components**
281
- - Offrendo un **auto-generazione potente di TypeScript** per un codice più sicuro
282
- - Gestendo le **traduzioni mancanti** in fase di build
283
- - Fornendo un **approccio di configurazione semplificato** con routing e middleware avanzati
159
+ - Con **Intlayer**, **contenuti modulari**, **TS rigoroso**, **sicurezza a tempo di build**, **bundle ottimizzati con tree-shaking** e **App Router di prima classe + strumenti SEO** sono **impostazioni predefinite**, non incombenze.
160
+ - Se il tuo team valorizza la **manutenibilità e la velocità** in un'app multi-locale guidata da componenti, Intlayer offre l'esperienza **più completa** oggi disponibile.
284
161
 
285
- Se desideri funzionalità i18n **moderne** personalizzate per Next.js App Router e stai cercando un'esperienza **completamente tipizzata** senza dover configurare manualmente la logica di fallback, riscritture di percorso o complessi passaggi di build, **Intlayer** è una scelta convincente. Non solo accorcia i tempi di configurazione, ma garantisce anche un approccio più manutenibile e scalabile alle traduzioni per il tuo team.
162
+ Consulta il documento ['Perché Intlayer?'](https://intlayer.org/doc/why) per maggiori dettagli.