Pose una domanda e ottieni un riassunto del documento facendo riferimento a questa pagina e al provider AI di tua scelta
Cronologia delle versioni
- "Aggiunta la sezione Perché Intlayer rispetto alle alternative"v8.11.231/05/2026
- "Rilascio del Compilatore"v7.3.127/11/2025
- "Aggiornata la tabella comparativa"v5.8.019/08/2025
- "Inizializzazione della cronologia"v5.5.1029/06/2025
Il contenuto di questa pagina è stato tradotto con un'IA.
Vedi l'ultima versione del contenuto originale in ingleseIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Perché dovresti considerare Intlayer?
Cos'è Intlayer?
Intlayer è una libreria di internazionalizzazione progettata specificamente per gli sviluppatori JavaScript. Consente la dichiarazione del tuo contenuto ovunque nel tuo codice. Converte le dichiarazioni di contenuto multilingue in dizionari strutturati per integrarsi facilmente nel tuo codice. Utilizzando TypeScript, Intlayer rende il tuo sviluppo più solido ed efficiente.
Perché Intlayer rispetto alle alternative?
Rispetto alle soluzioni principali come next-intl o i18next, Intlayer è una soluzione che include ottimizzazioni integrate come:
Invece di caricare enormi file JSON nelle tue pagine, carica solo il contenuto strettamente necessario. Intlayer aiuta a ridurre la dimensione del bundle e delle pagine fino al 50%.
Delineare il contenuto della tua applicazione a livello di componente facilita la manutenzione per applicazioni su larga scala. Puoi duplicare o eliminare una singola cartella di funzionalità senza il carico mentale di dover rivedere l'intera base di codice del contenuto. Inoltre, Intlayer è completamente tipizzato per garantire l'accuratezza del tuo contenuto.
Co-localizzare il contenuto riduce il contesto necessario per i modelli di linguaggio di grandi dimensioni (LLM). Intlayer include anche una suite di strumenti, come una CLI per verificare le traduzioni mancanti, LSP, MCP e agent skills, per rendere l'esperienza sviluppatore (DX) ancora più fluida per gli agenti IA.
Intlayer offre una serie di funzionalità aggiuntive che altre soluzioni i18n non hanno, come il supporto per Markdown, il recupero di contenuto esterno, il caricamento del contenuto da file, l'aggiornamento del contenuto in tempo reale, l'editor visuale e molto altro.
Usa l'automazione per tradurre nella tua pipeline CI/CD utilizzando l'LLM che preferisci al costo del tuo fornitore di IA. Intlayer offre anche un compilatore per automatizzare l'estrazione del contenuto, oltre a una piattaforma web per aiutarti a tradurre in background.
Il collegamento di enormi file JSON ai componenti può causare problemi di prestazioni e reattività. Intlayer ottimizza il caricamento del contenuto in fase di compilazione (build).
Molto più di una semplice soluzione i18n, Intlayer fornisce un editor visuale auto-ospitato e un CMS completo per aiutarti a gestire il tuo contenuto multilingue in tempo reale, rendendo fluida la collaborazione con traduttori, copywriter e altri membri del team. Il contenuto può essere memorizzato localmente e/o in remoto.
Se usi framework diversi per parti diverse della tua applicazione (es. React, React-native, Vue, Angular, Svelte, ecc.), Intlayer fornisce un modo per utilizzare una sintassi e un'implementazione comuni su tutti i principali framework frontend. Sarai anche in grado di condividere la dichiarazione del tuo contenuto all'interno del tuo design system, delle app, del backend, ecc.
Perché è stato creato Intlayer?
Intlayer è stato creato per risolvere un problema comune che affligge tutte le librerie i18n principali come next-intl, react-i18next, react-intl, next-i18next, react-intl e vue-i18n.
Tutte queste soluzioni adottano un approccio centralizzato per elencare e gestire il tuo contenuto. Ad esempio:
Copiare il codice nella clipboard
.├── locales│ ├── en.json│ ├── es.json│ └── fr.json├── i18n.ts└── src └── components └── MyComponent └── index.tsxO qui utilizzando i namespace:
Copiare il codice nella clipboard
.├── locales│ ├── en│ │ ├── footer.json│ │ └── navbar.json│ ├── fr│ │ ├── footer.json│ │ └── navbar.json│ └── es│ ├── footer.json│ └── navbar.json├── i18n.ts└── src └── components └── MyComponent └── index.tsxQuesto tipo di architettura rallenta il processo di sviluppo e rende la base di codice più complessa da mantenere per diversi motivi:
Per qualsiasi nuovo componente creato, devi:
- Creare la nuova risorsa/namespace nella cartella
locales - Ricordare di importare il nuovo namespace nella tua pagina
- Tradurre il tuo contenuto (spesso fatto manualmente copiando/incollando da servizi IA)
- Creare la nuova risorsa/namespace nella cartella
Per qualsiasi modifica apportata ai tuoi componenti, devi:
- Cercare la risorsa/namespace correlato (lontano dal componente)
- Tradurre il tuo contenuto
- Assicurarti che il tuo contenuto sia aggiornato per ogni lingua
- Verificare che il tuo namespace non includa chiavi/valori inutilizzati
- Assicurarti che la struttura dei tuoi file JSON sia identica per tutte le lingue
Nei progetti professionali che utilizzano queste soluzioni, vengono spesso utilizzate piattaforme di localizzazione per aiutare a gestire la traduzione del tuo contenuto. Tuttavia, questo può diventare rapidamente costoso per progetti di grandi dimensioni.
Per risolvere questo problema, Intlayer adotta un approccio che delimita il tuo contenuto per componente e lo mantiene vicino al componente stesso, come facciamo spesso con CSS (styled-components), tipi, documentazione (storybook) o unit test (jest).
Copiare il codice nella clipboard
.└── components └── MyComponent ├── index.content.ts ├── index.test.tsx ├── index.stories.tsx └── index.tsxCopiare il codice nella clipboard
import { t, type Dictionary } from "intlayer";
const componentExampleContent = {
key: "component-example",
content: {
myTranslatedContent: t({
en: "Hello World",
es: "Hola Mundo",
fr: "Bonjour le monde",
}),
},
} satisfies Dictionary;
export default componentExampleContent;Copiare il codice nella clipboard
import { useIntlayer } from "react-intlayer";
export const ComponentExample = () => {
const { myTranslatedContent } = useIntlayer("component-example");
return <span>{myTranslatedContent}</span>;
};Questo approccio ti consente di:
Aumentare la velocità di sviluppo
- I file
.content.{{ts|mjs|cjs|json}}possono essere creati utilizzando un'estensione VSCode - Gli strumenti di autocompletamento IA nel tuo IDE (come GitHub Copilot) possono aiutarti a dichiarare il tuo contenuto, riducendo il copia/incolla
- I file
Pulire la tua base di codice
- Ridurre la complessità
- Aumentare la manutenibilità
Duplicare i tuoi componenti e il loro contenuto relativo più facilmente (Esempio: componenti di login/registrazione, ecc.)
- Limitando il rischio di impattare il contenuto di altri componenti
- Copiando/incollando il tuo contenuto da un'applicazione all'altra senza dipendenze esterne
Evitare di inquinare la tua base di codice con chiavi/valori inutilizzati per componenti non utilizzati
- Se non usi un componente, Intlayer non importerà il suo contenuto correlato
- Se elimini un componente, ricorderai più facilmente di rimuovere il suo contenuto correlato poiché sarà presente nella stessa cartella
Ridurre il costo di ragionamento per gli agenti IA per dichiarare il tuo contenuto multilingue
- L'agente IA non dovrà scansionare l'intera base di codice per sapere dove implementare il tuo contenuto
- Le traduzioni possono essere facilmente eseguite da strumenti di autocompletamento IA nel tuo IDE (come GitHub Copilot)
Ottimizzare le prestazioni di caricamento
- Se un componente viene caricato in modalità lazy (lazy-loaded), il suo contenuto correlato verrà caricato nello stesso momento
Funzionalità aggiuntive di Intlayer
Apri la tabella in una finestra modale per visualizzare tutti i dati in modo chiaro
| Funzionalità | Descrizione |
|---|---|
| Supporto Cross-Framework Intlayer è compatibile con tutti i principali framework e librerie, inclusi Next.js, React, Vite, Vue.js, Nuxt, Preact, Express e altri. |
| Gestione del contenuto basata su JavaScript Sfrutta la flessibilità di JavaScript per definire e gestire il tuo contenuto in modo efficiente. - Dichiarazione del contenuto |
| Compilatore Il compilatore Intlayer estrae automaticamente il contenuto dai componenti e genera i file del dizionario. - Compilatore |
| File di dichiarazione del contenuto per singola lingua Velocizza il tuo sviluppo dichiarando il tuo contenuto una sola volta, prima della generazione automatica. - File di dichiarazione del contenuto per singola lingua |
| Ambiente Type-Safe Sfrutta TypeScript per garantire che le definizioni del tuo contenuto e il tuo codice siano privi di errori, beneficiando al contempo dell'autocompletamento dell'IDE. - Configurazione di TypeScript |
| Configurazione semplificata Inizia rapidamente con una configurazione minima. Regola facilmente le impostazioni per internazionalizzazione, routing, IA, build e gestione del contenuto. - Esplora l'integrazione con Next.js |
| Recupero del contenuto semplificato Non c'è bisogno di chiamare la tua funzione t per ogni elemento del contenuto. Recupera tutto il tuo contenuto direttamente usando un singolo hook.- Integrazione con React |
| Implementazione coerente dei componenti server Perfettamente adatto per i componenti server di Next.js, usa la stessa implementazione sia per i componenti client che server, senza bisogno di passare la tua funzione t attraverso ciascun componente server.- Componenti Server |
| Base di codice organizzata Mantieni la tua base di codice più organizzata: 1 componente = 1 dizionario nella stessa cartella. Le traduzioni vicine ai rispettivi componenti migliorano la manutenibilità e la chiarezza. - Come funziona Intlayer |
| Routing potenziato Supporto completo del routing dell'app, adattandosi perfettamente a strutture applicative complesse, per Next.js, React, Vite, Vue.js, ecc. - Esplora l'integrazione con Next.js |
| Supporto Markdown Importa e interpreta file locali e Markdown remoto per contenuti multilingue come informative sulla privacy, documentazione, ecc. Interpreta e rendi accessibili i metadati Markdown nel tuo codice. - File di contenuto |
| Editor visuale e CMS gratuiti Un editor visuale e un CMS gratuiti sono disponibili per i creatori di contenuti, eliminando la necessità di una piattaforma di localizzazione. Mantieni il tuo contenuto sincronizzato usando Git, o esternalizzalo totalmente o parzialmente con il CMS. - Editor di Intlayer - CMS di Intlayer |
| Contenuto Tree-shakable Contenuto tree-shakable, che riduce le dimensioni del bundle finale. Carica il contenuto per componente, escludendo qualsiasi contenuto non utilizzato dal bundle. Supporta il caricamento lazy per migliorare l'efficienza di caricamento dell'app. - Ottimizzazione della build dell'applicazione |
| Rendering statico Non blocca il rendering statico. - Integrazione con Next.js |
| Traduzione basata sull'IA Trasforma il tuo sito web in 231 lingue con un solo clic grazie agli strumenti avanzati di traduzione basati sull'IA di Intlayer utilizzando il tuo provider di IA/chiave API. - Integrazione CI/CD - CLI di Intlayer - Riempimento automatico |
| Integrazione Server MCP Fornisce un server MCP (Model Context Protocol) per l'automazione dell'IDE, abilitando una gestione trasparente del contenuto e dei flussi di lavoro i18n direttamente all'interno del tuo ambiente di sviluppo. - Server MCP |
| Estensione VSCode Intlayer fornisce un'estensione VSCode per aiutarti a gestire il tuo contenuto e le traduzioni, compilare i tuoi dizionari, tradurre il tuo contenuto e altro ancora. - Estensione VSCode |
| Interoperabilità Consente l'interoperabilità con react-i18next, next-i18next, next-intl e react-intl. - Intlayer e react-intl - Intlayer e next-intl - Intlayer e next-i18next |
| Test delle traduzioni mancanti (CLI/CI) | ✅ CLI: npx intlayer content test (audit compatibile con CI) |
Confronto di Intlayer con altre soluzioni
Apri la tabella in una finestra modale per visualizzare tutti i dati in modo chiaro
| Funzionalità | intlayer | react-i18next | react-intl (FormatJS) | lingui | next-intl | next-i18next | vue-i18n |
|---|---|---|---|---|---|---|---|
| Traduzioni vicine ai componenti | ✅ Sì, contenuto colocalizzato con ciascun componente | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No | ✅ Sì - usando Single File Components (SFCs) |
| Integrazione con TypeScript | ✅ Avanzata, tipi rigorosi autogenerati | ⚠️ Di base; configurazione extra per sicurezza | ✅ Buona, ma meno rigorosa | ⚠️ Digitazione, richiede configurazione | ✅ Buona | ⚠️ Di base | ✅ Buona (tipi disponibili; la sicurezza delle chiavi richiede configurazione) |
| Rilevamento traduzioni mancanti | ✅ Evidenziazione errore TypeScript ed errore/avviso a build-time | ⚠️ Principalmente stringhe di fallback a runtime | ⚠️ Stringhe di fallback | ⚠️ Richiede una configurazione extra | ⚠️ Fallback a runtime | ⚠️ Fallback a runtime | ⚠️ Fallback/avvisi a runtime (configurabile) |
| Contenuto ricco (JSX/Markdown/componenti) | ✅ Supporto diretto | ⚠️ Limitato / solo interpolazione | ⚠️ Sintassi ICU, non vero JSX | ⚠️ Limitato | ❌ Non progettato per nodi ricchi | ⚠️ Limitato | ⚠️ Limitato (componenti tramite <i18n-t>, Markdown tramite plugin) |
| Traduzione basata sull'IA | ✅ Sì, supporta più fornitori di IA. Utilizzabile con chiavi API proprie. Considera il contesto dell'applicazione e l'ambito del contenuto | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No | ❌ No |
| Editor Visuale | ✅ Sì, editor visuale locale + CMS opzionale; può esternalizzare il contenuto della base di codice; incorporabile | ❌ No / disponibile tramite piattaforme di localizzazione esterne | ❌ No / disponibile tramite piattaforme di localizzazione esterne | ❌ No / disponibile tramite piattaforme di localizzazione esterne | ❌ No / disponibile tramite piattaforme di localizzazione esterne | ❌ No / disponibile tramite piattaforme di localizzazione esterne | ❌ No / disponibile tramite piattaforme di localizzazione esterne |
| Routing localizzato | ✅ Sì, supporta percorsi localizzati fin da subito (funziona con Next.js & Vite) | ⚠️ Non integrato, richiede plugin (es. next-i18next) o config personalizzata del router | ❌ No, solo formattazione dei messaggi, il routing deve essere manuale | ⚠️ Non integrato, richiede plugin o config manuale | ✅ Integrato, App Router supporta il segmento [locale] | ✅ Integrato | ✅ Integrato |
| Generazione dinamica del percorso | ✅ Sì | ⚠️ Setup manuale o plugin/ecosistema | ❌ Non fornito | ⚠️ Plugin/manuale | ✅ Sì | ✅ Sì | ❌ Non fornito (Nuxt i18n fornisce) |
| Pluralizzazione | ✅ Pattern basati su enumerazione | ✅ Configurabile (plugin come i18next-icu) | ✅ (ICU) | ✅ (ICU/messageformat) | ✅ Buona | ✅ Buona | ✅ Regole di pluralizzazione integrate |
| Formattazione (date, numeri, valute) | ✅ Formattatori ottimizzati (Intl sotto il cofano) | ⚠️ Tramite plugin o utilizzo personalizzato di Intl | ✅ Formattatori ICU | ✅ Helper ICU/CLI | ✅ Buona (helper Intl) | ✅ Buona (helper Intl) | ✅ Formattatori di data/numero integrati (Intl) |
| Formato del contenuto | ✅ .tsx, .ts, .js, .json, .md, .txt, (.yaml WIP) | ⚠️ .json | ✅ .json, .js | ⚠️ .po, .json | ✅ .json, .js, .ts | ⚠️ .json | ✅ .json, .js |
| Supporto ICU | ⚠️ WIP | ⚠️ Tramite plugin (i18next-icu) | ✅ Sì | ✅ Sì | ✅ Sì | ⚠️ Tramite plugin (i18next-icu) | ⚠️ Tramite formatore/compilatore personalizzato |
| Helper SEO (hreflang, sitemap) | ✅ Strumenti integrati: helper per sitemap, robots.txt, metadati | ⚠️ Plugin della community/manual | ❌ Non core | ❌ Non core | ✅ Buona | ✅ Buona | ❌ Non core (Nuxt i18n fornisce gli helper) |
| Ecosistema / Community | ⚠️ Più piccolo ma in rapida crescita e reattivo | ✅ Più grande e maturo | ✅ Grande | ⚠️ Più piccolo | ✅ Dimensioni medie, focalizzato su Next.js | ✅ Dimensioni medie, focalizzato su Next.js | ✅ Grande nell'ecosistema Vue |
| Server-side Rendering & Server Components | ✅ Sì, ottimizzato per SSR / React Server Components | ⚠️ Supportato a livello di pagina ma è necessario passare le t-funzioni sull'albero dei componenti per i componenti server figli | ⚠️ Supportato a livello di pagina con configurazione aggiuntiva, ma è necessario passare le t-funzioni sull'albero dei componenti per i componenti server figli | ✅ Supportato, configurazione richiesta | ⚠️ Supportato a livello di pagina ma è necessario passare le t-funzioni sull'albero dei componenti per i componenti server figli | ⚠️ Supportato a livello di pagina ma è necessario passare le t-funzioni sull'albero dei componenti per i componenti server figli | ✅ SSR tramite Nuxt/Vue SSR (no RSC) |
| Tree-shaking (carica solo contenuto utilizzato) | ✅ Sì, per componente a build-time tramite plugin Babel/SWC | ⚠️ Di solito carica tutto (può essere migliorato con namespace/code-splitting) | ⚠️ Di solito carica tutto | ❌ Non predefinito | ⚠️ Parziale | ⚠️ Parziale | ⚠️ Parziale (con code-splitting/setup manuale) |
| Caricamento lazy (Lazy loading) | ✅ Sì, per locale / per dizionario | ✅ Sì (es. backend/namespace su richiesta) | ✅ Sì (split dei bundle di locale) | ✅ Sì (importazioni di cataloghi dinamici) | ✅ Sì (per rotta/per locale), richiede la gestione dei namespace | ✅ Sì (per rotta/per locale), richiede la gestione dei namespace | ✅ Sì (messaggi di locale asincroni) |
| Pura il contenuto non utilizzato | ✅ Sì, per dizionario a build-time | ❌ No, solo tramite segmentazione manuale dei namespace | ❌ No, tutti i messaggi dichiarati sono raggruppati | ✅ Sì, le chiavi inutilizzate vengono rilevate ed eliminate nella build | ❌ No, può essere gestito manualmente con la gestione dei namespace | ❌ No, può essere gestito manualmente con la gestione dei namespace | ❌ No, possibile solo tramite caricamento lazy manuale |
| Gestione di grandi progetti | ✅ Incoraggia la modularità, adatto al design-system | ⚠️ Richiede una buona disciplina dei file | ⚠️ I cataloghi centrali possono diventare grandi | ⚠️ Può diventare complesso | ✅ Modulare con configurazione | ✅ Modulare con configurazione | ✅ Modulare con configurazione di Vue Router/Nuxt i18n |
Stelle su GitHub
Le stelle su GitHub sono un forte indicatore della popolarità di un progetto, della fiducia della comunità e della pertinenza a lungo termine. Sebbene non siano una misura diretta della qualità tecnica, riflettono quanti sviluppatori trovano utile il progetto, seguono i suoi progressi ed è probabile che lo adottino. Per stimare il valore di un progetto, le stelle aiutano a confrontare l'attrazione tra le alternative e forniscono informazioni sulla crescita dell'ecosistema.
Interoperabilità
intlayer può anche aiutare a gestire i namespace react-intl, react-i18next, next-intl, next-i18next e vue-i18n.
Utilizzando intlayer, puoi dichiarare il tuo contenuto nel formato della tua libreria i18n preferita, e intlayer genererà i tuoi namespace nella posizione che preferisci (esempio: /messages/{{locale}}/{{namespace}}.json).