@intlayer/docs 8.12.2 → 8.12.4-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 (73) hide show
  1. package/dist/cjs/blog.cjs.map +1 -1
  2. package/dist/cjs/common.cjs.map +1 -1
  3. package/dist/cjs/doc.cjs.map +1 -1
  4. package/dist/cjs/frequentQuestions.cjs.map +1 -1
  5. package/dist/cjs/generated/blog.entry.cjs +1 -0
  6. package/dist/cjs/generated/blog.entry.cjs.map +1 -1
  7. package/dist/cjs/generated/docs.entry.cjs +1 -0
  8. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  9. package/dist/cjs/generated/frequentQuestions.entry.cjs +1 -0
  10. package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
  11. package/dist/cjs/generated/legal.entry.cjs +1 -0
  12. package/dist/cjs/generated/legal.entry.cjs.map +1 -1
  13. package/dist/cjs/legal.cjs.map +1 -1
  14. package/dist/esm/blog.mjs.map +1 -1
  15. package/dist/esm/common.mjs.map +1 -1
  16. package/dist/esm/doc.mjs.map +1 -1
  17. package/dist/esm/frequentQuestions.mjs.map +1 -1
  18. package/dist/esm/generated/blog.entry.mjs.map +1 -1
  19. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  20. package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
  21. package/dist/esm/generated/legal.entry.mjs.map +1 -1
  22. package/dist/esm/legal.mjs.map +1 -1
  23. package/dist/types/blog.d.ts.map +1 -1
  24. package/dist/types/common.d.ts.map +1 -1
  25. package/dist/types/doc.d.ts.map +1 -1
  26. package/dist/types/frequentQuestions.d.ts.map +1 -1
  27. package/dist/types/legal.d.ts.map +1 -1
  28. package/docs/ar/bundle_optimization.md +250 -102
  29. package/docs/ar/configuration.md +10 -10
  30. package/docs/bn/bundle_optimization.md +252 -104
  31. package/docs/bn/configuration.md +10 -10
  32. package/docs/cs/bundle_optimization.md +253 -105
  33. package/docs/cs/configuration.md +10 -10
  34. package/docs/de/bundle_optimization.md +245 -97
  35. package/docs/de/configuration.md +10 -10
  36. package/docs/en/bundle_optimization.md +172 -49
  37. package/docs/en/configuration.md +10 -10
  38. package/docs/en-GB/bundle_optimization.md +230 -82
  39. package/docs/en-GB/configuration.md +10 -10
  40. package/docs/es/bundle_optimization.md +250 -102
  41. package/docs/es/configuration.md +10 -10
  42. package/docs/fr/bundle_optimization.md +223 -75
  43. package/docs/fr/configuration.md +10 -10
  44. package/docs/hi/bundle_optimization.md +253 -105
  45. package/docs/hi/configuration.md +10 -10
  46. package/docs/id/bundle_optimization.md +258 -110
  47. package/docs/id/configuration.md +10 -10
  48. package/docs/it/bundle_optimization.md +249 -103
  49. package/docs/it/configuration.md +10 -10
  50. package/docs/ja/bundle_optimization.md +245 -97
  51. package/docs/ja/configuration.md +10 -10
  52. package/docs/ko/bundle_optimization.md +253 -105
  53. package/docs/ko/configuration.md +10 -10
  54. package/docs/nl/bundle_optimization.md +249 -101
  55. package/docs/nl/configuration.md +10 -10
  56. package/docs/pl/bundle_optimization.md +258 -111
  57. package/docs/pl/configuration.md +10 -10
  58. package/docs/pt/bundle_optimization.md +256 -115
  59. package/docs/pt/configuration.md +10 -10
  60. package/docs/ru/bundle_optimization.md +253 -105
  61. package/docs/ru/configuration.md +10 -10
  62. package/docs/tr/bundle_optimization.md +255 -107
  63. package/docs/tr/configuration.md +10 -10
  64. package/docs/uk/bundle_optimization.md +250 -102
  65. package/docs/uk/configuration.md +10 -10
  66. package/docs/ur/bundle_optimization.md +257 -109
  67. package/docs/ur/configuration.md +10 -10
  68. package/docs/vi/bundle_optimization.md +259 -111
  69. package/docs/vi/configuration.md +10 -10
  70. package/docs/zh/bundle_optimization.md +260 -112
  71. package/docs/zh/configuration.md +10 -10
  72. package/docs/zh-TW/bundle_optimization.md +602 -0
  73. package/package.json +8 -8
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  createdAt: 2025-11-25
3
- updatedAt: 2026-04-08
4
- title: Ottimizzazione della dimensione del bundle i18n e prestazioni
5
- description: Riduci la dimensione del bundle della tua applicazione ottimizzando i contenuti di internazionalizzazione (i18n). Scopri come sfruttare il tree shaking e il lazy loading per i dizionari con Intlayer.
3
+ updatedAt: 2026-06-07
4
+ title: Ottimizzazione delle dimensioni e delle prestazioni del bundle i18n
5
+ description: Riduci le dimensioni del bundle della tua applicazione ottimizzando i contenuti di internazionalizzazione (i18n). Scopri come sfruttare il tree shaking e il lazy loading per i dizionari con Intlayer.
6
6
  keywords:
7
- - Ottimizzazione del bundle
8
- - Automazione dei contenuti
9
- - Contenuto dinamico
7
+ - Ottimizzazione Bundle
8
+ - Automazione Contenuti
9
+ - Contenuto Dinamico
10
10
  - Intlayer
11
11
  - Next.js
12
12
  - JavaScript
@@ -16,33 +16,36 @@ slugs:
16
16
  - concept
17
17
  - bundle-optimization
18
18
  history:
19
+ - version: 8.12.0
20
+ date: 2026-06-07
21
+ changes: "Aggiunto `intlayerPurgeBabelPlugin` e `intlayerMinifyBabelPlugin` per Babel/Webpack; chiarimento della pipeline dei plugin"
19
22
  - version: 8.7.0
20
23
  date: 2026-04-08
21
24
  changes: "Aggiunte le opzioni `minify` e `purge` alla configurazione di build"
22
25
  ---
23
26
 
24
- # Ottimizzazione della dimensione del bundle i18n e prestazioni
27
+ # Ottimizzazione delle dimensioni e delle prestazioni del bundle i18n
25
28
 
26
- Una delle sfide più comuni con le soluzioni i18n tradizionali che si affidano a file JSON è la gestione della dimensione dei contenuti. Se gli sviluppatori non separano manualmente i contenuti in namespace, gli utenti finiscono spesso per scaricare le traduzioni per ogni pagina e potenzialmente per ogni lingua solo per visualizzare una singola pagina.
29
+ Una delle sfide più comuni con le tradizionali soluzioni i18n basate su file JSON è la gestione delle dimensioni dei contenuti. Se gli sviluppatori non separano manualmente i contenuti in namespace, gli utenti finiscono spesso per scaricare le traduzioni per ogni pagina e potenzialmente per ogni lingua solo per visualizzare una singola pagina.
27
30
 
28
- Ad esempio, un'applicazione con 10 pagine tradotte in 10 lingue potrebbe comportare il download dei contenuti di 100 pagine da parte di un utente, anche se ne serve solo **una** (quella corrente nella lingua corrente). Ciò comporta uno spreco di larghezza di banda e tempi di caricamento più lenti.
31
+ Ad esempio, un'applicazione con 10 pagine tradotte in 10 lingue potrebbe far che un utente scarichi il contenuto di 100 pagine, anche se ne ha bisogno solo di **una** (la pagina attuale nella lingua attuale). Ciò porta a spreco di larghezza di banda e tempi di caricamento più lenti.
29
32
 
30
- **Intlayer risolve questo problema attraverso l'ottimizzazione in fase di build.** Analizza il tuo codice per rilevare quali dizionari sono effettivamente utilizzati per ogni componente e reinserisce solo il contenuto necessario nel tuo bundle.
33
+ **Intlayer risolve questo problema attraverso l'ottimizzazione in fase di compilazione (build).** Analizza il tuo codice per rilevare quali dizionari sono effettivamente utilizzati in ciascun componente e inietta solo il contenuto necessario nel tuo bundle.
31
34
 
32
- ## Sommario
35
+ ## Indice dei Contenuti
33
36
 
34
37
  <TOC />
35
38
 
36
- ## Scansiona il tuo bundle
39
+ ## Analizza il tuo bundle
37
40
 
38
- Analizzare il tuo bundle è il primo passo per identificare file JSON "pesanti" e opportunità di code-splitting. Questi strumenti generano una mappa ad albero visiva del codice compilato della tua applicazione, permettendoti di vedere esattamente quali librerie stanno consumando più spazio.
41
+ Analizzare il tuo bundle è il primo passo per identificare i file JSON "pesanti" e le opportunità di suddivisione del codice (code-splitting). Questi strumenti generano una visualizzazione treemap del codice compilato della tua applicazione, permettendoti di vedere esattamente quali librerie consumano più spazio.
39
42
 
40
43
  <Tabs>
41
44
  <Tab value="vite">
42
45
 
43
46
  ### Vite / Rollup
44
47
 
45
- Vite utilizza Rollup internamente. Il plugin `rollup-plugin-visualizer` genera un file HTML interattivo che mostra le dimensioni di ogni modulo nel tuo grafico.
48
+ Vite utilizza Rollup sotto il cofano. Il plugin `rollup-plugin-visualizer` genera un file HTML interattivo che mostra le dimensioni di ogni modulo nel tuo grafo.
46
49
 
47
50
  ```bash
48
51
  npm install -D rollup-plugin-visualizer
@@ -69,7 +72,7 @@ export default defineConfig({
69
72
 
70
73
  ### Next.js (Turbopack)
71
74
 
72
- Per i progetti che utilizzano App Router e Turbopack, Next.js fornisce un analizzatore sperimentale integrato che non richiede dipendenze extra.
75
+ Per i progetti che utilizzano l'App Router e Turbopack, Next.js fornisce un analizzatore sperimentale integrato che non richiede dipendenze extra.
73
76
 
74
77
  ```bash packageManager='npm'
75
78
  npx next experimental-analyze
@@ -92,7 +95,7 @@ bun next experimental-analyze
92
95
 
93
96
  ### Next.js (Webpack)
94
97
 
95
- Se stai utilizzando il bundler Webpack predefinito in Next.js, usa l'analizzatore di bundle ufficiale. Attivalo impostando una variabile d'ambiente durante la build.
98
+ Se utilizzi il bundler Webpack predefinito in Next.js, usa l'analizzatore di bundle ufficiale. Attivalo impostando una variabile d'ambiente durante la tua build.
96
99
 
97
100
  ```bash packageManager='npm'
98
101
  npm install -D @next/bundle-analyzer
@@ -131,7 +134,7 @@ ANALYZE=true npm run build
131
134
 
132
135
  ### Webpack Standard
133
136
 
134
- Per Create React App (ejected), Angular o configurazioni Webpack personalizzate, usa lo standard di settore `webpack-bundle-analyzer`.
137
+ Per Create React App (ejected), Angular, o configurazioni Webpack personalizzate, usa lo standard del settore `webpack-bundle-analyzer`.
135
138
 
136
139
  ```bash packageManager='npm'
137
140
  npm install -D webpack-bundle-analyzer
@@ -166,29 +169,66 @@ export default {
166
169
  </Tab>
167
170
  </Tabs>
168
171
 
169
- ## Come funziona
172
+ ## Come Funziona
170
173
 
171
- Intlayer utilizza un **approccio per componente**. A differenza dei file JSON globali, i tuoi contenuti sono definiti insieme o all'interno dei tuoi componenti. Durante il processo di build, Intlayer:
174
+ Intlayer utilizza un **approccio per componente**. A differenza dei file JSON globali, il tuo contenuto viene definito accanto o all'interno dei tuoi componenti. Durante il processo di build, Intlayer:
172
175
 
173
- 1. **Analizza** il tuo codice per trovare le chiamate a `useIntlayer`.
174
- 2. **Costruisce** il contenuto del dizionario corrispondente.
175
- 3. **Sostituisce** la chiamata a `useIntlayer` con codice ottimizzato in base alla tua configurazione.
176
+ 1. **Analizza** il tuo codice per trovare le chiamate a `useIntlayer`.
177
+ 2. **Costruisce** il contenuto del dizionario corrispondente.
178
+ 3. **Sostituisce** la chiamata a `useIntlayer` con un codice ottimizzato in base alla tua configurazione.
176
179
 
177
- Questo assicura che:
180
+ Ciò garantisce che:
178
181
 
179
182
  - Se un componente non viene importato, il suo contenuto non viene incluso nel bundle (Dead Code Elimination).
180
- - Se un componente è caricato in modalità lazy, anche il suo contenuto viene caricato in modalità lazy.
183
+ - Se un componente viene caricato tramite lazy loading, anche il suo contenuto viene caricato in modo lazy.
181
184
 
182
- ## Configurazione per piattaforma
185
+ ## Riferimento Plugin
186
+
187
+ L'ottimizzazione in fase di build di Intlayer è suddivisa tra diversi plugin discreti, ciascuno con una singola responsabilità. Capire cosa fa ciascuno evita confusione al momento della configurazione.
188
+
189
+ ### Plugin Babel (`@intlayer/babel`)
190
+
191
+ Questi sono usati direttamente nel file `babel.config.js` per i setup basati su Webpack (Next.js con Babel, CRA, Webpack personalizzato, ecc.).
192
+
193
+ | Plugin | Cosa fa |
194
+ | :---------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------- |
195
+ | `intlayerExtractBabelPlugin` | Scansiona i file `.content.ts` e scrive i dizionari compilati in `.intlayer/` |
196
+ | `intlayerOptimizeBabelPlugin` | Riscrive `useIntlayer('key')` in `useDictionary(hash)` e inietta la dichiarazione di `import` corrispondente al dizionario |
197
+ | `intlayerPurgeBabelPlugin` | Scansiona tutti i file sorgente, rimuove i **campi di contenuto inutilizzati** dai file di dizionario JSON compilati `.intlayer/**/*.json` |
198
+ | `intlayerMinifyBabelPlugin` | **Rinomina le chiavi dei campi di contenuto** in brevi alias alfabetici (`title` → `a`) sia nei file JSON che nel codice sorgente |
199
+
200
+ > **L'ordine dei plugin è importante.** Nel tuo `babel.config.js` i plugin purge e minify devono apparire **prima** del plugin optimize. La fase optimize sostituisce `useIntlayer('key')` con una chiamata opaca a `useDictionary(hash)`, cancellando le informazioni della chiave del dizionario di cui le fasi purge e minify hanno bisogno per identificare quali campi vengono usati.
201
+
202
+ Ogni plugin Babel ha un relativo helper per le opzioni che legge il tuo `intlayer.config.ts` una volta sola al momento del caricamento della configurazione e restituisce valori pre-risolti:
203
+
204
+ | Helper opzioni | Usato con |
205
+ | :--------------------------- | :---------------------------- |
206
+ | `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
207
+ | `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
208
+ | `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
209
+ | `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
210
+
211
+ ### Plugin Vite (`vite-intlayer`)
212
+
213
+ Gli utenti di Vite **non configurano mai questi direttamente**. Vengono cablati automaticamente quando chiami `withIntlayer()` in `vite.config.ts`. I flag `build.purge` e `build.minify` in `intlayer.config.ts` attivano o disattivano il comportamento corrispondente senza alcuna registrazione extra di plugin.
214
+
215
+ | Plugin Vite interno | Comportamento equivalente |
216
+ | :------------------ | :------------------------------------------------------------------------------------------------------------------ |
217
+ | Usage analyzer | Stesso comportamento della fase di analisi in `intlayerPurgeBabelPlugin` |
218
+ | Dictionary prune | Stesso comportamento della fase di scrittura JSON in `intlayerPurgeBabelPlugin` |
219
+ | Dictionary minify | Stesso comportamento della fase di scrittura JSON in `intlayerMinifyBabelPlugin` |
220
+ | Babel transform | Stesso comportamento di ridenominazione codice sorgente `intlayerMinifyBabelPlugin` + `intlayerOptimizeBabelPlugin` |
221
+
222
+ ## Configurazione per Piattaforma
183
223
 
184
224
  <Tabs>
185
225
  <Tab value="nextjs">
186
226
 
187
227
  ### Next.js
188
228
 
189
- Next.js richiede il plugin `@intlayer/swc` per gestire la trasformazione, poiché Next.js utilizza SWC per le build.
229
+ Next.js richiede il plugin `@intlayer/swc` per la fase optimize (riscrittura degli import), perché Next.js usa SWC per le build.
190
230
 
191
- > Questo plugin non è installato di default perché i plugin SWC sono ancora sperimentali per Next.js. Potrebbe cambiare in futuro.
231
+ > Questo plugin non è installato di default perché i plugin SWC sono ancora sperimentali in Next.js. Questo aspetto potrebbe cambiare in futuro.
192
232
 
193
233
  ```bash packageManager="npm"
194
234
  npm install -D @intlayer/swc
@@ -208,19 +248,61 @@ bun add -d @intlayer/swc
208
248
 
209
249
  Una volta installato, Intlayer rileverà e utilizzerà automaticamente il plugin.
210
250
 
251
+ Per i passaggi di **purge e minify** (rimozione dei campi e ridenominazione dei campi), installa `@intlayer/babel` insieme e aggiungi i plugin Babel. Dal momento che Next.js usa SWC per le trasformazioni ma valuta ancora `babel.config.js` per la configurazione dei plugin, i plugin Babel agiscono come fase preliminare rispetto ad SWC.
252
+
253
+ ```bash packageManager="npm"
254
+ npm install -D @intlayer/babel
255
+ ```
256
+
257
+ ```javascript fileName="babel.config.js"
258
+ const {
259
+ intlayerPurgeBabelPlugin,
260
+ intlayerMinifyBabelPlugin,
261
+ getPurgePluginOptions,
262
+ getMinifyPluginOptions,
263
+ } = require("@intlayer/babel");
264
+
265
+ module.exports = {
266
+ presets: ["next/babel"],
267
+ plugins: [
268
+ // Purge: rimuove campi di contenuto inutilizzati da .intlayer/**/*.json
269
+ [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
270
+ // Minify: rinomina le chiavi dei campi di contenuto nel JSON + codice sorgente
271
+ [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
272
+ // Nota: intlayerOptimizeBabelPlugin NON è necessario qui perché
273
+ // @intlayer/swc gestisce la riscrittura da useIntlayer a useDictionary.
274
+ ],
275
+ };
276
+ ```
277
+
211
278
  </Tab>
212
279
  <Tab value="vite">
213
280
 
214
281
  ### Vite
215
282
 
216
- Vite utilizza il plugin `@intlayer/babel` che è incluso come dipendenza di `vite-intlayer`. L'ottimizzazione è abilitata di default. Non c'è altro da fare.
283
+ Vite usa il plugin `@intlayer/babel`, che è incluso come dipendenza in `vite-intlayer`. L'intera pipeline di ottimizzazione — riscrittura import, purge e minify — è abilitata di default e non richiede registrazione di plugin extra.
284
+
285
+ Abilita purge e minify impostando i flag corrispondenti in `intlayer.config.ts`:
286
+
287
+ ```typescript fileName="intlayer.config.ts"
288
+ import type { IntlayerConfig } from "intlayer";
289
+
290
+ const config: IntlayerConfig = {
291
+ build: {
292
+ purge: true, // rimuove i campi inutilizzati nei JSON all'interno del bundle
293
+ minify: true, // rinomina le chiavi dei campi in alias corti
294
+ },
295
+ };
296
+
297
+ export default config;
298
+ ```
217
299
 
218
300
  </Tab>
219
301
  <Tab value="webpack">
220
302
 
221
- ### Webpack
303
+ ### Webpack (e Next.js con Babel)
222
304
 
223
- Per abilitare l'ottimizzazione del bundle con Intlayer su Webpack, è necessario installare e configurare il plugin Babel (`@intlayer/babel`) o SWC (`@intlayer/swc`) appropriato.
305
+ Installa `@intlayer/babel`:
224
306
 
225
307
  ```bash packageManager="npm"
226
308
  npm install -D @intlayer/babel
@@ -238,14 +320,37 @@ pnpm add -D @intlayer/babel
238
320
  bun add -d @intlayer/babel
239
321
  ```
240
322
 
241
- ```typescript fileName="babel.config.js"
323
+ Aggiungi tutti e quattro i plugin a `babel.config.js` nel giusto ordine:
324
+
325
+ ```javascript fileName="babel.config.js"
242
326
  const {
243
- getOptimizePluginOptions,
327
+ intlayerExtractBabelPlugin,
328
+ intlayerPurgeBabelPlugin,
329
+ intlayerMinifyBabelPlugin,
244
330
  intlayerOptimizeBabelPlugin,
331
+ getExtractPluginOptions,
332
+ getPurgePluginOptions,
333
+ getMinifyPluginOptions,
334
+ getOptimizePluginOptions,
245
335
  } = require("@intlayer/babel");
246
336
 
247
337
  module.exports = {
248
- plugins: [[intlayerOptimizeBabelPlugin, getOptimizePluginOptions()]],
338
+ plugins: [
339
+ // Extract: compila file .content.ts → .intlayer/**/*.json
340
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
341
+
342
+ // Purge: rimuove i campi inutilizzati da .intlayer/**/*.json
343
+ // (legge il flag build.purge da intlayer.config.ts)
344
+ [intlayerPurgeBabelPlugin, getPurgePluginOptions()],
345
+
346
+ // Minify: rinomina chiavi di campo nel JSON + codice sorgente
347
+ // (legge il flag build.minify da intlayer.config.ts)
348
+ [intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
349
+
350
+ // Optimize: riscrive useIntlayer('key') → useDictionary(hash)
351
+ // Deve essere messo per ultimo perché elimina la chiave del dizionario.
352
+ [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
353
+ ],
249
354
  };
250
355
  ```
251
356
 
@@ -254,57 +359,62 @@ module.exports = {
254
359
 
255
360
  ## Configurazione
256
361
 
257
- Puoi controllare come Intlayer ottimizza il tuo bundle tramite la proprietà `build` nel tuo `intlayer.config.ts`.
362
+ Puoi controllare come Intlayer ottimizza il tuo bundle tramite la proprietà `build` in `intlayer.config.ts`.
258
363
 
259
364
  ```typescript fileName="intlayer.config.ts"
260
365
  import { Locales, type IntlayerConfig } from "intlayer";
261
366
 
262
367
  const config: IntlayerConfig = {
263
368
  internationalization: {
264
- locales: [Locales.ENGLISH, Locales.FRENCH],
369
+ locales: [Locales.ENGLISH, Locales.ITALIAN],
265
370
  defaultLocale: Locales.ENGLISH,
266
371
  },
267
372
  dictionary: {
268
373
  importMode: "dynamic",
269
374
  },
270
375
  build: {
271
- /**
272
- * Minimizza i dizionari per ridurre la dimensione del bundle.
273
- */
274
- minify: true;
275
-
276
- /**
277
- * Elimina le chiavi inutilizzate nei dizionari
278
- */
279
- purge: true;
280
-
281
- /**
282
- * Indica se la build deve controllare i tipi TypeScript
283
- */
284
- checkTypes: false;
376
+ // Sostituisce le chiamate useIntlayer() con import diretti al dizionario a tempo di compilazione.
377
+ // undefined = automatico (abilitato in produzione), true = sempre, false = mai.
378
+ optimize: undefined,
379
+
380
+ // Rinomina chiavi dei campi di contenuto nei dizionari compilati con alias alfabetici corti
381
+ // (es. title → a). Riduce la dimensione del JSON; richiede optimize.
382
+ minify: true,
383
+
384
+ // Rimuove campi di contenuto mai accessibili staticamente nel codice sorgente.
385
+ // Richiede optimize.
386
+ purge: true,
285
387
  },
286
388
  };
287
389
 
288
390
  export default config;
289
391
  ```
290
392
 
291
- > Mantenere l'opzione predefinita per `optimize` è raccomandato nella stragrande maggioranza dei casi.
393
+ > Mantenere il valore predefinito (`undefined`) per `optimize` è consigliato nella maggior parte dei casi.
292
394
 
293
- > Vedi la doc di configurazione per maggiori dettagli: [Configurazione](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/configuration.md)
395
+ > Consulta il riferimento per la configurazione per tutte le opzioni: [Configurazione](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/configuration.md)
294
396
 
295
397
  ### Opzioni di Build
296
398
 
297
- Le seguenti opzioni sono disponibili sotto l'oggetto di configurazione `build`:
399
+ | Proprietà | Tipo | Default | Descrizione |
400
+ | :------------- | :--------------------- | :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
401
+ | **`optimize`** | `boolean \| undefined` | `undefined` | Abilita il passaggio di riscrittura degli import. `undefined` = attivo solo nelle build di produzione. `false` disabilita anche purge e minify. |
402
+ | **`minify`** | `boolean` | `false` | Rinomina chiavi dei campi di contenuto nei file JSON compilati usando brevi alias alfabetici. Riscrive anche gli accessi a tali proprietà nel codice sorgente. Non ha alcun effetto se `optimize` è `false`. |
403
+ | **`purge`** | `boolean` | `false` | Rimuove i campi di contenuto a cui non si accede mai in modo statico dal codice sorgente all'interno dei file JSON. Non ha alcun effetto se `optimize` è `false`. |
404
+
405
+ ### Minificazione (ridenominazione chiave dei campi)
298
406
 
299
- | Proprietà | Tipo | Predefinito | Descrizione |
300
- | :------------- | :-------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
301
- | **`optimize`** | `boolean` | `undefined` | Controlla se l'ottimizzazione della build è abilitata. Se `true`, Intlayer sostituisce le chiamate ai dizionari con iniezioni ottimizzate. Se `false`, l'ottimizzazione è disabilitata. Idealmente a `true` in produzione. |
302
- | **`minify`** | `boolean` | `false` | Se minimizzare i dizionari per ridurre la dimensione del bundle. |
303
- | **`purge`** | `boolean` | `false` | Se eliminare le chiavi inutilizzate nei dizionari. |
407
+ `build.minify` **non** si occupa di minificare il tuo bundle JavaScript — quello viene gestito dal tuo bundler. Rimpicciolisce invece i file JSON del dizionario compilato sostituendo ciascuna chiave definita dall'utente con un breve alias alfabetico:
304
408
 
305
- ### Minimizzazione
409
+ ```
410
+ // Prima della minificazione
411
+ { "title": "Ciao", "subtitle": "Mondo" }
412
+
413
+ // Dopo la minificazione
414
+ { "a": "Ciao", "b": "Mondo" }
415
+ ```
306
416
 
307
- Minimizzare i dizionari rimuove spazi bianchi non necessari, commenti e riduce la dimensione dei contenuti JSON. Ciò è particolarmente utile per dizionari di grandi dimensioni.
417
+ La medesima modifica viene apportata agli accessi di tali proprietà all'interno del codice sorgente, così che `content.title` diventi `content.a` nell'output compilato. Il comportamento in esecuzione rimane identico.
308
418
 
309
419
  ```typescript fileName="intlayer.config.ts"
310
420
  import type { IntlayerConfig } from "intlayer";
@@ -318,11 +428,13 @@ const config: IntlayerConfig = {
318
428
  export default config;
319
429
  ```
320
430
 
321
- > Nota: La minimizzazione viene ignorata se `optimize` è disabilitato o se il Visual Editor è abilitato (poiché l'editor ha bisogno del contenuto completo per consentire le modifiche).
431
+ > La minificazione viene saltata quando `optimize` è `false` o quando `editor.enabled` è `true` (l'editor visuale richiede il nome completo della proprietà per consentire la modifica).
322
432
 
323
- ### Purging (Eliminazione)
433
+ > La minificazione viene ignorata anche per i dizionari caricati tramite `importMode: 'fetch'` perché i loro JSON vengono serviti tramite API remote usando le chiavi dei campi originali; rinominarle rovinerebbe il contratto tra client e server.
324
434
 
325
- Il purging assicura che solo le chiavi effettivamente utilizzate nel codice siano incluse nel bundle finale dei dizionari. Ciò può ridurre significativamente la dimensione del bundle se si hanno dizionari grandi con molte chiavi che non vengono utilizzate in ogni parte dell'applicazione.
435
+ ### Purging (rimozione dei campi non usati)
436
+
437
+ `build.purge` analizza a quali campi di contenuto accedi effettivamente nel tuo codice sorgente, provvedendo a rimuovere il resto dai file JSON.
326
438
 
327
439
  ```typescript fileName="intlayer.config.ts"
328
440
  import type { IntlayerConfig } from "intlayer";
@@ -336,34 +448,50 @@ const config: IntlayerConfig = {
336
448
  export default config;
337
449
  ```
338
450
 
339
- > Nota: Il purging viene ignorato se `optimize` è disabilitato.
451
+ **Esempio:** un dizionario di cinque campi dal quale vengono adoperati solamente due:
452
+
453
+ ```
454
+ // Prima di purge
455
+ { "title": "…", "subtitle": "…", "cta": "…", "footer": "…", "badge": "…" }
456
+
457
+ // Dopo aver effettuato purge (solamente accessi di title e subtitle presenti)
458
+ { "title": "…", "subtitle": "…" }
459
+ ```
460
+
461
+ > Il purge viene saltato se `optimize` è `false` o quando `editor.enabled` è `true`.
462
+
463
+ > Il purge viene saltato per precauzione qualora un file non riesca a essere analizzato, oppure se l'oggetto `useIntlayer` viene riversato in altri valori usando parametri dinamici non analizzabili (come distruggere parti non strutturate, assegnazioni generiche ai props ecc.). In questi scenari viene conservato l'intero dizionario.
340
464
 
341
465
  ### Modalità di Importazione
342
466
 
343
- Per applicazioni di grandi dimensioni, comprese diverse pagine e lingue, i tuoi file JSON possono rappresentare una parte significativa della dimensione del tuo bundle. Intlayer ti consente di controllare come vengono caricati i dizionari.
467
+ Per grandi applicazioni in grado di coprire parecchie pagine e localizzazioni diverse, il peso imposto dal JSON costituisce una quota vitale per il bundle complessivo. Intlayer consente un controllo specifico di come importare i dizionari grazie a `importMode`.
344
468
 
345
- La modalità di importazione può essere definita di default a livello globale nel file `intlayer.config.ts`.
469
+ ### Configurazione Globale
470
+
471
+ Si può stabilire il valore predefinito agendo in `intlayer.config.ts`.
346
472
 
347
473
  ```typescript fileName="intlayer.config.ts"
348
474
  import type { IntlayerConfig } from "intlayer";
349
475
 
350
476
  const config: IntlayerConfig = {
351
- build: {
352
- minify: true,
477
+ dictionary: {
478
+ importMode: "dynamic", // Di default preimpostato come 'static'
353
479
  },
354
480
  };
355
481
 
356
482
  export default config;
357
483
  ```
358
484
 
359
- Così come per ogni dizionario nei tuoi file `.content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5}}`.
485
+ ### Definizione Per Dizionario
486
+
487
+ Resta pur sempre valida la sovrascrittura di questo comportamento per ogni singolo file come nel caso descritto dalle estensioni `.content.{{ts|tsx|js|jsx|mjs|cjs|json|jsonc|json5|md|mdx|yaml|yml}}`.
360
488
 
361
489
  ```ts
362
490
  import { type Dictionary, t } from "intlayer";
363
491
 
364
492
  const appContent: Dictionary = {
365
493
  key: "app",
366
- importMode: "dynamic", // Sovrascrive la modalità di importazione predefinita
494
+ importMode: "dynamic", // Ridefinisce in che modo caricare i contenuti in locale
367
495
  content: {
368
496
  // ...
369
497
  },
@@ -372,35 +500,34 @@ const appContent: Dictionary = {
372
500
  export default appContent;
373
501
  ```
374
502
 
375
- | Proprietà | Tipo | Predefinito | Descrizione |
376
- | :--------------- | :--------------------------------- | :---------- | :--------------------------------------------------------------------------------------------------------------------------- |
377
- | **`importMode`** | `'static'`, `'dynamic'`, `'fetch'` | `'static'` | **Deprecato**: Usa `dictionary.importMode` invece. Determina come vengono caricati i dizionari (vedi i dettagli di seguito). |
503
+ | Proprietà | Tipo | Valore base | Descrizione |
504
+ | :--------------- | :--------------------------------- | :---------- | :-------------------------------------------------------------------------------------------------------------------- |
505
+ | **`importMode`** | `'static'`, `'dynamic'`, `'fetch'` | `'static'` | **Deprecato**: Usa `dictionary.importMode` al suo posto. Controlla e stabilisce le dinamiche di importazione di rete. |
378
506
 
379
- L'impostazione `importMode` dettata come il contenuto del dizionario viene iniettato nel tuo componente.
380
- Puoi definirlo globalmente nel file `intlayer.config.ts` sotto l'oggetto `dictionary`, oppure puoi sovrascriverlo per un dizionario specifico nel suo file `.content.ts`.
507
+ Il valore `importMode` gestisce i flussi in cui iniettare il componente. Lo definisci globalmente in `intlayer.config.ts` o individualmente per `.content.ts`.
381
508
 
382
509
  ### 1. Modalità Statica (`default`)
383
510
 
384
- In modalità statica, Intlayer sostituisce `useIntlayer` con `useDictionary` e inietta il dizionario direttamente nel bundle JavaScript.
511
+ Utilizzando la modalità statica, Intlayer trasforma e sostituisce le `useIntlayer` in `useDictionary` rendendo effettivo l'inserimento integrato di ciascun dato nell'applicativo di base in JavaScript.
385
512
 
386
- - **Pro:** Rendering istantaneo (sincrono), zero richieste di rete extra durante l'idratazione.
387
- - **Contro:** Il bundle include le traduzioni per **tutte** le lingue disponibili per quel componente specifico.
388
- - **Ideale per:** Single Page Applications (SPA).
513
+ - **Vantaggi:** Render immediato, con la completa assenza di caricamenti di rete durante la prima inizializzazione.
514
+ - **Svantaggi:** Tutto l'ammontare linguistico e strutturale relativo alla mole del componente per **ciascuna** lingua.
515
+ - **Caso d'Uso Migliore:** Architetture come SPA o pagine singole dalle scarse necessità restrittive in materia.
389
516
 
390
- **Esempio di codice trasformato:**
517
+ **Codice Esemplificativo Trasformato:**
391
518
 
392
519
  ```tsx
393
- // Il tuo codice
520
+ // Il tuo codice d'origine
394
521
  const content = useIntlayer("my-key");
395
522
 
396
- // Codice ottimizzato (Statico)
523
+ // Trasformazione Statica (Illustrativa)
397
524
  const content = useDictionary({
398
525
  key: "my-key",
399
526
  content: {
400
527
  nodeType: "translation",
401
528
  translation: {
402
529
  en: "My title",
403
- fr: "Mon titolo",
530
+ it: "Il mio titolo",
404
531
  },
405
532
  },
406
533
  });
@@ -408,47 +535,66 @@ const content = useDictionary({
408
535
 
409
536
  ### 2. Modalità Dinamica
410
537
 
411
- In modalità dinamica, Intlayer sostituisce `useIntlayer` con `useDictionaryAsync`. Questo utilizza `import()` (meccanismo simile a Suspense) per caricare in modalità lazy specificamente il JSON per la lingua corrente.
538
+ Impiegando lo status di modulo dinamico, subentra l'interazione rimpiazzando `useIntlayer` attraverso un comportamento asservito a `useDictionaryAsync`. È impiegata la parola chiave `import()` a lazy-load.
412
539
 
413
- - **Pro:** **Tree shaking a livello di lingua.** Un utente che visualizza la versione inglese scaricherà _solo_ il dizionario inglese. Il dizionario francese non viene mai caricato.
414
- - **Contro:** Attiva una richiesta di rete (recupero dell'asset) per componente durante l'idratazione.
415
- - **Ideale per:** Grandi blocchi di testo, articoli o applicazioni che supportano molte lingue in cui la dimensione del bundle è critica.
540
+ - **Vantaggi:** **Tree-shaking ad alte prestazioni limitate a specifici stati linguistici locali.** Si eviterà uno spreco impattante di megabyte impedendo al file italiano di presentarsi ad utenti che godono di preferenze in lingua inglese.
541
+ - **Svantaggi:** Raggiunge richieste asincrone idonee a innescare il ritardo derivante dal prelievo remoto durante l'hydratation.
542
+ - **Miglior utilizzo:** Testi complessi o corpose quantità di termini multilingua voluminosi da mantenere compattati o da delegare in caso di necessita di download parziale o differito.
416
543
 
417
- **Esempio di codice trasformato:**
544
+ **Codice Trasformato Dinamico:**
418
545
 
419
546
  ```tsx
420
- // Il tuo codice
547
+ // Tuo codice
421
548
  const content = useIntlayer("my-key");
422
549
 
423
- // Codice ottimizzato (Dinamico)
550
+ // Rappresentazione in Dinamica di quanto in esecuzione
424
551
  const content = useDictionaryAsync({
425
552
  en: () =>
426
553
  import(".intlayer/dynamic_dictionary/my-key/en.json").then(
427
554
  (mod) => mod.default
428
555
  ),
429
- fr: () =>
430
- import(".intlayer/dynamic_dictionary/my-key/fr.json").then(
556
+ it: () =>
557
+ import(".intlayer/dynamic_dictionary/my-key/it.json").then(
431
558
  (mod) => mod.default
432
559
  ),
433
560
  });
434
561
  ```
435
562
 
436
- > Quando usi `importMode: 'dynamic'`, se hai 100 componenti che usano `useIntlayer` in una singola pagina, il browser tenterà 100 recuperi separati. Per evitare questo "waterfall" di richieste, raggruppa i contenuti in meno file `.content` (ad esempio, un dizionario per sezione della pagina) invece di uno per ogni singolo componente atomico.
563
+ > Applicando l'uso in `importMode: 'dynamic'`, non frammentare a vuoto con costanza ma procedi aggregando un insieme in pochi file `.content` dedicati, cosicché ad impiego congiunto si limitino e si aggreghino prelievi limitrofi ad unica natura. Intlayer fondono se aventi pari identità o parametri limitrofi per le chiavi impiegate con regolarità per medesime identità.
437
564
 
438
565
  ### 3. Modalità Fetch
439
566
 
440
- Si comporta in modo simile alla modalità dinamica ma tenta prima di recuperare i dizionari dall'API Intlayer Live Sync. Se la chiamata API fallisce o il contenuto non è contrassegnato per gli aggiornamenti live, ricorre all'importazione dinamica.
567
+ Svolge iter analogo ed affine per conformità di intenti, mirando piuttosto all'ottenimento delle medesime procedure avvalendosi delle chiamate API da Intlayer Live Sync. Per far risaltare flussi tempestivi dinamici su ambienti reattivi con riciclo d'informazioni in live updates e di ripiego sulla tipologia dinamic.
568
+
569
+ **Esempio in Fetch:**
570
+
571
+ ```tsx
572
+ // Il tuo codice
573
+ const content = useIntlayer("my-key");
574
+
575
+ // Ottimizzato secondo l'uso di base fetch
576
+ const content = useDictionaryAsync({
577
+ en: () =>
578
+ fetch("https://intlayer.my-domain.com/dictionary/my-key/en").then((res) =>
579
+ res.json()
580
+ ),
581
+ it: () =>
582
+ fetch("https://intlayer.my-domain.com/dictionary/my-key/it").then((res) =>
583
+ res.json()
584
+ ),
585
+ });
586
+ ```
441
587
 
442
- > Vedi la documentazione CMS per maggiori dettagli: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_CMS.md)
588
+ > Ulteriori verifiche presso il riferimento ai supporti per la documentazione CMS: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/intlayer_CMS.md)
443
589
 
444
- > In modalità fetch, purghe e minimizzazioni non possono essere utilizzate.
590
+ > Nella struttura fetch le ottimizzazioni relative a minify o purge passano sempre inosservate al fine di favorire la corrispondenza lato server in nome delle relative comunicazioni.
445
591
 
446
- ## Riepilogo: Statico vs Dinamico
592
+ ## Sommario: Statica vs Dinamica
447
593
 
448
- | Caratteristica | Modalità Statica | Modalità Dinamica |
449
- | :----------------------- | :--------------------------------------------------- | :------------------------------------- |
450
- | **Dimensione Bundle JS** | Maggiore (include tutte le lingue per il componente) | Minore (solo codice, nessun contenuto) |
451
- | **Caricamento Iniziale** | Istantaneo (Il contenuto è nel bundle) | Leggero ritardo (Recupera JSON) |
452
- | **Richieste di Rete** | 0 richieste extra | 1 richiesta per dizionario |
453
- | **Tree Shaking** | Livello componente | Livello componente + Livello lingua |
454
- | **Miglior Caso d'Uso** | Componenti UI, Piccole Applicazioni | Pagine con molto testo, molte lingue |
594
+ | Parametro | Modalità Statica | Modalità Dinamica |
595
+ | :-------------------------- | :------------------------------------------- | :----------------------------------------------- |
596
+ | **Peso Bundle JS** | Cospicuo (racchiude l'ammontare totale comp) | Minimizzato a favore delle sole logiche del base |
597
+ | **Inizializzazione Veloce** | Sostanzialmente subitanea | Intervallato (Necessita download preventivo) |
598
+ | **Chiamate Rete** | 0 di contorno prelevanti | 1 in base all'identità prescritta o richiesta |
599
+ | **Uso Tree-Shaking** | Esteso alla natura dei componenti | Ad uso interamente localizzato a scopo |
600
+ | **Campi Preferenziali** | Dettagli di UI, Modelli basici | Masse contenutistiche, Voluminose presenze testi |
@@ -682,16 +682,16 @@ routing: {
682
682
 
683
683
  Quando si utilizza lo storage in un cookie, è possibile impostare attributi aggiuntivi:
684
684
 
685
- | Campo | Descrizione | Tipo |
686
- | ---------- | ------------------------------------------------------------------------------------------ | ----------------------------------------------------- |
687
- | `name` | Nome del cookie. Predefinito: `'INTLAYER_LOCALE'` | `string` |
688
- | `domain` | Dominio del cookie. Predefinito: `undefined` | `string` |
689
- | `path` | Percorso del cookie. Predefinito: `undefined` | `string` |
690
- | `secure` | Richiede HTTPS. Predefinito: `undefined` | `boolean` |
691
- | `httpOnly` | Flag HTTP-only. Predefinito: `undefined` | `boolean` |
692
- | `sameSite` | Politica SameSite. | `'strict'` &#124; <br/> `'lax'` &#124; <br/> `'none'` |
693
- | `expires` | Data di scadenza o numero di giorni. Predefinito: `undefined` | `Date` &#124; <br/> `number` |
694
- | `maxAge` | Durata in secondi dalla creazione. Ha la precedenza su `expires`. Predefinito: `undefined` | `number` |
685
+ | Campo | Descrizione | Tipo |
686
+ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------- |
687
+ | `name` | Nome del cookie. Predefinito: `'INTLAYER_LOCALE'` | `string` |
688
+ | `domain` | Dominio del cookie. Predefinito: `undefined` | `string` |
689
+ | `path` | Percorso del cookie. Predefinito: `undefined` | `string` |
690
+ | `secure` | Richiede HTTPS. Predefinito: `undefined` | `boolean` |
691
+ | `httpOnly` | Flag HTTP-only. Predefinito: `undefined` | `boolean` |
692
+ | `sameSite` | Politica SameSite. | `'strict'` &#124; <br/> `'lax'` &#124; <br/> `'none'` |
693
+ | `expires` | Un numero rappresenta i giorni dalla creazione; una data (o stringa di data ISO) è una data di scadenza assoluta. Predefinito: `undefined` | `Date` &#124; <br/> `number` &#124; <br/> `string` |
694
+ | `maxAge` | Durata in secondi dalla creazione. Ha la precedenza su `expires`. Predefinito: `undefined` | `number` |
695
695
 
696
696
  #### Attributi dello Storage (Storage Attributes)
697
697