--- createdAt: 2025-09-22 updatedAt: 2025-09-23 title: Nuovo Intlayer v7 - Novità description: Scopri le novità di Intlayer v7. Miglioramenti significativi nelle prestazioni, nell'esperienza dello sviluppatore e nuove funzionalità per migliorare il tuo flusso di lavoro di internazionalizzazione. keywords: - Intlayer - Localizzazione - Sviluppo - Prestazioni - Esperienza dello sviluppatore - Funzionalità - React - Next.js - JavaScript - TypeScript slugs: - doc - releases - v7 --- # Nuovo Intlayer v7 - Novità Benvenuto in Intlayer v7! Questa versione principale introduce miglioramenti significativi nelle prestazioni, nella sicurezza dei tipi e nell'esperienza dello sviluppatore. Di seguito i punti salienti, con note di migrazione ed esempi pratici. ## Punti salienti - Strategia di caching per build più veloci - Generazione migliorata dei tipi TypeScript con tipi specifici per locale - Ottimizzazione del bundle: Locali come stringhe invece che enum - Nuove modalità di routing: `prefix-no-default`, `prefix-all`, `no-prefix`, `search-params` - Archiviazione locale conforme al GDPR con localStorage come predefinito - Configurazione flessibile dello storage: cookie, localStorage, sessionStorage o multipli - Dimensione del pacchetto Visual Editor ridotta del 30% - Opzioni di configurazione middleware migliorate - Comportamento aggiornato del comando fill per una migliore gestione dei contenuti - Stabilità migliorata con aggiornamenti completi dei file di dichiarazione dei contenuti - Gestione intelligente dei retry per una maggiore accuratezza delle traduzioni - Parallelizzazione per un'elaborazione delle traduzioni più veloce - Suddivisione intelligente per gestire file di grandi dimensioni entro i limiti del contesto AI --- ## Prestazioni: Caching per build più veloci Invece di ricostruire le dichiarazioni di contenuto con esbuild a ogni build, la versione 7 implementa una strategia di caching che accelera il processo di build. ```bash npx intlayer build ``` Il nuovo sistema di caching: - Memorizza le dichiarazioni di contenuto compilate per evitare elaborazioni ridondanti - Rileva le modifiche e ricostruisce solo i file modificati - Riduce significativamente i tempi di build per progetti di grandi dimensioni --- ## TypeScript: Generazione di tipi specifici per locale I tipi TypeScript ora vengono generati per ogni locale, offrendo un typing più forte ed eliminando i tipi unione tra tutti i locali. **Comportamento v6:** ```tsx const content = getIntlayer("my-title-content", "en"); // typeof content = { title: "My title" } | { title: "Mon titre" } | { title: "Mi título" } ``` **Comportamento v7:** ```tsx tsx; const content = getIntlayer("my-title-content", "en"); // typeof content = { title: "My title" } ``` Vantaggi: - Completamento automatico più preciso nel tuo IDE - Maggiore sicurezza dei tipi senza inquinamento tra tipi di diverse localizzazioni - Prestazioni migliorate riducendo la complessità dei tipi --- ## Ottimizzazione del bundle: Locali come stringhe Il tipo `Locales` non è più un enum, il che significa che ora è completamente tree-shakeable e non appesantirà il tuo bundle con migliaia di record di localizzazione inutilizzati. **v6:** ```typescript import { Locales } from "intlayer"; // Enum che include tutte le localizzazioni -> non tree-shakeable const locale: Locales = Locales.ENGLISH; ``` **v7:** ```typescript import { Locales, Locale } from "intlayer"; // Tipo stringa -> completamente tree-shakeable const locale: Locale = Locales.ENGLISH; ``` > Poiché `Locales` non è più un enum, dovrai cambiare il tipo da `Locales` a `Locale` per ottenere la localizzazione come tipo. Consulta i [dettagli di implementazione](https://github.com/aymericzip/intlayer/blob/main/packages/%40intlayer/types/src/index.ts) per maggiori informazioni. --- ## Nuove modalità di routing per una maggiore flessibilità La versione 7 introduce una configurazione unificata `routing.mode` che sostituisce le precedenti opzioni `prefixDefault` e `noPrefix`, offrendo un controllo più granulare sulla struttura degli URL. ### Modalità di routing disponibili - **`prefix-no-default`** (predefinita): la localizzazione predefinita non ha prefisso, le altre localizzazioni sì - `/dashboard` (en) o `/fr/dashboard` (fr) - **`prefix-all`**: tutte le localizzazioni hanno un prefisso - `/en/dashboard` (en) o `/fr/dashboard` (fr) - **`no-prefix`**: Nessun prefisso di localizzazione negli URL (la localizzazione è gestita tramite storage/header) - `/dashboard` per tutte le localizzazioni - **`search-params`**: La localizzazione viene passata come parametro di query - `/dashboard?locale=en` o `/dashboard?locale=fr` ### Configurazione di base ```typescript // intlayer.config.ts export default { internationalization: { locales: ["en", "fr", "es"], defaultLocale: "en", }, routing: { mode: "prefix-no-default", // predefinito }, }; ``` --- ## Conformità GDPR: storage in localStorage / cookie La versione 7 dà priorità alla privacy dell'utente utilizzando `localStorage` come meccanismo di storage predefinito invece dei cookie. Questo cambiamento aiuta a rispettare il GDPR evitando la necessità del consenso per i cookie relativi alle preferenze di localizzazione. ### Opzioni di configurazione dello storage Il nuovo campo `routing.storage` è disponibile in aggiunta alle precedenti opzioni `middleware.cookieName` e `middleware.serverSetCookie`, offrendo configurazioni di storage flessibili: ```typescript // Disabilita lo storage storage: false // Tipi di storage semplici storage: 'cookie' storage: 'localStorage' storage: 'sessionStorage' // Cookie con attributi personalizzati storage: { type: 'cookie', name: 'custom-locale', domain: '.example.com', secure: true, sameSite: 'strict' } // localStorage con chiave personalizzata storage: { type: 'localStorage', name: 'custom-locale' } // Più tipi di storage per ridondanza storage: ['cookie', 'localStorage'] ``` ### Esempio di configurazione conforme al GDPR Per applicazioni in produzione che devono bilanciare funzionalità e conformità al GDPR: ```typescript typescript; // intlayer.config.ts export default { internationalization: { locales: ["en", "fr", "es"], defaultLocale: "en", }, routing: { mode: "prefix-no-default", storage: [ { type: "localStorage", // Archiviazione primaria (non necessita di consenso) name: "user-locale", }, { type: "cookie", // Archiviazione cookie opzionale (richiede consenso) name: "user-locale", secure: true, sameSite: "strict", httpOnly: false, }, ], }, }; ``` ### Abilitare / disabilitare l'archiviazione tramite cookie Esempio con React / Next.js: Può essere definito globalmente: ```typescript ``` Può essere sovrascritto localmente per ogni hook: ```ts const { setLocale } = useLocale({ isCookieEnabled: false }); setLocale("en"); ``` **Nota:** I cookie sono abilitati di default. **Nota:** Controlla i [requisiti GDPR per i cookie](https://gdpr.eu/cookies/) per il tuo caso specifico. --- ## Visual Editor: pacchetto ridotto del 30% Il pacchetto Visual Editor è stato ottimizzato per essere il 30% più piccolo rispetto alla versione precedente, grazie a: - Miglioramenti delle prestazioni dell'editor di codice - Rimozione di dipendenze non necessarie dai pacchetti core di Intlayer - Migliore tree-shaking e bundling dei moduli Questo si traduce in tempi di download più rapidi e prestazioni di runtime migliorate per la tua applicazione. --- ## Comando Fill: comportamento aggiornato per una migliore gestione dei contenuti La versione 7 introduce un comportamento migliorato per il comando `fill`, offrendo una gestione dei contenuti più prevedibile e flessibile: ### Nuovo comportamento di fill - **`fill: true`** - Riscrive il file corrente con il contenuto compilato per tutte le localizzazioni - **`fill: "path/to/file"`** - Compila il file specificato senza modificare il file corrente - **`fill: false`** - Disabilita completamente l'auto-fill ### Supporto migliorato per strutture di contenuto complesse Il comando fill ora supporta strutture complesse di dichiarazione del contenuto, inclusi: - **Oggetti composti**: Dichiarazioni di contenuto che fanno riferimento ad altri oggetti - **Contenuto destrutturato**: Contenuto che utilizza pattern di destrutturazione - **Riferimenti annidati**: Oggetti che si richiamano a vicenda in gerarchie complesse - **Strutture di contenuto dinamiche**: Contenuto con proprietà condizionali o calcolate ### Vantaggi - **Intento più chiaro**: Il comportamento è ora più esplicito su cosa viene modificato - **Migliore separazione**: I file di contenuto possono essere mantenuti separati dalle traduzioni compilate - **Flusso di lavoro migliorato**: Gli sviluppatori hanno un maggiore controllo su dove vengono memorizzate le traduzioni - **Supporto per strutture complesse**: Gestione di architetture di contenuto sofisticate con molteplici oggetti interconnessi ### Esempio di utilizzo ```typescript // Riscrive il file corrente con tutte le localizzazioni const content = { key: "example", fill: true, // Riscrive questo file content: { title: "Hello World", }, }; // Compila un file separato senza modificare il file corrente const content = { key: "example", fill: "./translations.json", // Crea/aggiorna translations.json content: { title: "Hello World", }, }; // Disabilita il riempimento automatico const content = { key: "example", fill: false, // Nessun riempimento automatico content: { title: "Hello World", }, }; // Struttura di contenuto complessa con oggetti composti const sharedContent = { buttons: { save: "Salva", cancel: "Annulla", }, }; const content = { key: "complex-example", fill: true, content: { // Riferimenti ad altri oggetti sharedContent, // Contenuto destrutturato ...sharedContent, // Riferimenti annidati sections: [ { ...sharedContent.buttons, header: "Sezione 1", }, ], }, }; ``` --- ## Maggiore stabilità e gestione delle traduzioni La versione 7 introduce diversi miglioramenti per rendere la traduzione dei contenuti più affidabile ed efficiente: ### Aggiornamenti completi dei file di dichiarazione dei contenuti Il sistema ora aggiorna i file `.content.{ts,js,cjs,mjs}` invece di aggiornamenti parziali, garantendo: - **Integrità dei dati**: La riscrittura completa dei file previene aggiornamenti parziali che potrebbero corrompere il contenuto - **Coerenza**: Tutte le localizzazioni vengono aggiornate in modo atomico, mantenendo la sincronizzazione - **Affidabilità**: Riduce il rischio di file di contenuto incompleti o malformati ### Gestione intelligente dei tentativi di ripetizione I nuovi meccanismi di retry impediscono di inviare contenuti in formati errati e evitano che l'intero processo di fill si interrompa se una richiesta fallisce. ### Parallelizzazione per un'elaborazione più veloce Le operazioni di traduzione ora vengono eseguite in coda per poter essere processate in parallelo. Questo accelera significativamente il processo. ### Suddivisione intelligente per file di grandi dimensioni Strategie avanzate di chunking gestiscono file di contenuto di grandi dimensioni senza superare i limiti del contesto AI: ### Esempio di flusso di lavoro ```typescript // Il file di contenuto di grandi dimensioni viene automaticamente suddiviso in chunk const content = { key: "large-documentation", fill: true, content: { // Contenuto grande automaticamente suddiviso in chunk per l'elaborazione AI introduction: "..." // oltre 5000 caratteri sections: [ // Più sezioni grandi ] } }; ``` Il sistema automaticamente: 1. Analizza la dimensione e la struttura del contenuto 2. Suddivide il contenuto in chunk appropriati 3. Elabora i chunk in parallelo 4. Valida e ritenta se necessario 5. Ricostruisce il file completo --- ## Note di migrazione dalla versione v6 ### Configurazioni rimosse - **`middleware.cookieName`**: Sostituito da `routing.storage` - **`middleware.serverSetCookie`**: Sostituito da `routing.storage` - **`middleware.prefixDefault`**: Sostituito da `routing.mode` - **`middleware.noPrefix`**: Sostituito da `routing.mode` ### Mappatura della migrazione #### Mappatura della configurazione | Configurazione v6 | Configurazione v7 | | -------------------------- | ------------------------------------------------------------- | | `autoFill: xxx` | `fill: xxx` | | `prefixDefault: false` | `mode: 'prefix-no-default'` | | `prefixDefault: true` | `mode: 'prefix-all'` | | `noPrefix: true` | `mode: 'no-prefix'` | | `cookieName: 'my-locale'` | `storage: { type: 'cookie', name: 'my-locale' }` | | `serverSetCookie: 'never'` | `storage: false` o rimuovere il cookie dall'array di storage` | #### Esempio di migrazione **Prima (v6):** ```typescript export default { middleware: { headerName: "x-intlayer-locale", cookieName: "intlayer-locale", prefixDefault: false, basePath: "", serverSetCookie: "always", noPrefix: false, }, }; ``` **Dopo (v7):** ```typescript export default { routing: { mode: "prefix-no-default", storage: "localStorage", // oppure 'cookie' se è necessario lo storage tramite cookie headerName: "x-intlayer-locale", basePath: "", }, }; ``` #### Mappatura del contenuto del dizionario | Contenuto dizionario v6 | Contenuto dizionario v7 | | ----------------------- | ----------------------- | | `autoFill: xxx` | `fill: xxx` | #### Esempio di migrazione **Prima (v6):** ```typescript const content = { key: "example", autoFill: true, // Riscrive questo file content: { title: "Hello World", }, }; ``` **Dopo (v7):** ```typescript const content = { key: "example", fill: true, // Riscrive questo file content: { title: "Hello World", }, }; ``` --- ## Note di migrazione da v5 a v6 Consulta le [note di migrazione da v5 a v6](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/releases/v6.md) per maggiori informazioni. --- ## Link utili - [Riferimento alla configurazione](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/configuration.md) - [Documentazione Middleware](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/packages/next-intlayer/index.md) - [Tipi TypeScript](https://github.com/aymericzip/intlayer/blob/main/packages/%40intlayer/types/src/index.ts) - [Linee guida GDPR sui cookie](https://gdpr.eu/cookies/)