Autore:
    Creazione:2024-08-13Ultimo aggiornamento:2026-08-30

    Documentazione della configurazione di Intlayer

    Panoramica

    I file di configurazione di Intlayer consentono di personalizzare vari aspetti del plugin, come l'internazionalizzazione (i18n), il middleware e la gestione dei contenuti. Questo documento fornisce una descrizione dettagliata di ogni proprietà nella configurazione.

    Sommario

    Supporto File di Configurazione

    Intlayer accetta formati di file di configurazione JSON, JS, MJS e TS:

    • intlayer.config.ts
    • intlayer.config.js
    • intlayer.config.json
    • intlayer.config.json5
    • intlayer.config.jsonc
    • intlayer.config.cjs
    • intlayer.config.mjs
    • .intlayerrc

    Esempio di File di Configurazione

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    import { nextjsRewrite } from "intlayer/routing";
    import { syncJSON } from "@intlayer/sync-json-plugin";
    import { z } from "zod";
    
    /**
     * Esempio di file di configurazione Intlayer con tutte le opzioni disponibili.
     */
    const config: IntlayerConfig = {
      /**
       * Configurazione delle impostazioni di internazionalizzazione.
       */
      internationalization: {
        /**
         * Elenco dei locale supportati nell'applicazione.
         * Predefinito: [Locales.ENGLISH]
         */
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
    
        /**
         * Elenco dei locale richiesti da definire in ogni dizionario.
         * Se vuoto, tutti i locale sono richiesti in modalità `strict`.
         * Predefinito: []
         */
        requiredLocales: [Locales.ENGLISH],
    
        /**
         * Livello di rigore per i contenuti internazionalizzati.
         * - "strict": Errore in caso di locale dichiarati mancanti o non dichiarati.
         * - "inclusive": Avviso in caso di locale dichiarati mancanti.
         * - "loose": Accetta qualsiasi locale esistente.
         * Predefinito: "inclusive"
         */
        strictMode: "inclusive",
    
        /**
         * Locale predefinito utilizzato come fallback se il locale richiesto non è disponibile.
         * Predefinito: Locales.ENGLISH
         */
        defaultLocale: Locales.ENGLISH,
      },
    
      /**
       * Impostazioni che controllano le operazioni del dizionario e il comportamento del contenuto mancante.
       */
      dictionary: {
        /**
         * Controlla come vengono importati i dizionari.
         * - "static": Importazione statica al momento del build.
         * - "dynamic": Importazione dinamica utilizzando Suspense.
         * - "fetch": Recupero dinamico tramite l'API Live Sycn.
         * Predefinito: "static"
         */
        importMode: "static",
    
        /**
         * Strategia per compilare automaticamente le traduzioni mancanti utilizzando l'IA.
         * Può essere un booleano o un pattern di percorso per salvare il contenuto compilato.
         * Predefinito: true
         */
        fill: true,
    
        /**
         * Posizione fisica dei file del dizionario.
         * - "local": Memorizzato nel file system locale.
         * - "remote": Memorizzato nel CMS Intlayer.
         * - "hybrid": Memorizzato sia localmente che nel CMS Intlayer.
         * - "plugin" (o qualsiasi stringa personalizzata): Fornito da un plugin o da una sorgente personalizzata.
         * Predefinito: "local"
         */
        location: "local",
    
        /**
         * Se trasformare automaticamente il contenuto (es. Markdown in HTML).
         * Predefinito: false
         */
        contentAutoTransformation: false,
      },
    
      /**
       * Configurazione del routing e del middleware.
       */
      routing: {
        /**
         * Strategia di routing per locale.
         * - "prefix-no-default": Prefisso per tutti i locale tranne quello predefinito (es. /dashboard, /fr/dashboard).
         * - "prefix-all": Prefisso per tutti i locale (es. /en/dashboard, /fr/dashboard).
         * - "no-prefix": Nessun locale nell'URL.
         * - "search-params": Usa ?locale=...
         * Predefinito: "prefix-no-default"
         */
        mode: "prefix-no-default",
    
        /**
         * Abilita il proxy di routing delle locale di Intlayer (middleware).
         * Gestisce rilevamento della locale, redirect e rewrite in dev, preview e SSR.
         * - non impostato (auto): i server di dev e preview mantengono il routing
         *   guidato dall'URL ignorando la locale salvata in cookie e header. I prefissi
         *   vengono ancora risolti, la locale viene ancora persistita e il rilevamento
         *   Accept-Language si applica ancora. In produzione si comporta come `true`.
         * - true: comportamento completo in ogni ambiente.
         * - false: nessun routing delle locale.
         * Predefinito: undefined (auto)
         */
        enableProxy: undefined,
    
        /**
         * Dove memorizzare il locale selezionato dall'utente.
         * Opzioni: 'cookie', 'localStorage', 'sessionStorage', 'header' o un array di questi.
         * Predefinito: ['cookie', 'header']
         */
        storage: ["cookie", "header"],
    
        /**
         * Percorso base dell'URL dell'applicazione.
         * Predefinito: ""
         */
        basePath: "",
    
        /**
         * Regole di riscrittura URL personalizzate per percorsi specifici locali.
         */
        rewrite: nextjsRewrite({
          "/[locale]/about": {
            en: "/[locale]/about",
            fr: "/[locale]/a-propos",
          },
        }),
    
        /**
         * Mappa i locale ai nomi host del dominio per il routing basato sul dominio.
         * Gli URL per questi locale saranno assoluti (es. https://intlayer.cn/).
         * Il dominio implica il locale, quindi non viene aggiunto alcun prefisso di locale al percorso.
         * Predefinito: undefined
         */
        domains: {
          en: "intlayer.org",
          zh: "intlayer.cn",
        },
      },
    
      /**
       * Impostazioni per la scoperta e l'elaborazione dei file di contenuto.
       */
      content: {
        /**
         * Estensioni di file per scansionare i dizionari.
         * Predefinito: ['.content.ts', '.content.js', '.content.json', ecc.]
         */
        fileExtensions: [".content.ts", ".content.js", ".content.json"],
    
        /**
         * Directory in cui si trovano i file .content.
         * Predefinito: ["."]
         */
        contentDir: ["src"],
    
        /**
         * Directory del codice sorgente.
         * Utilizzato per l'ottimizzazione del build e la trasformazione del codice.
         * Predefinito: ["."]
         */
        codeDir: ["src"],
    
        /**
         * Pattern da escludere dalla scansione.
         * Predefinito: ['node_modules', '.intlayer', ecc.]
         */
        excludedPath: ["node_modules"],
    
        /**
         * Se monitorare le modifiche e rigenerare i dizionari durante lo sviluppo.
         * Predefinito: true in modalità sviluppo
         */
        watch: true,
    
        /**
         * Comando per formattare i file .content appena creati / aggiornati.
         */
        formatCommand: 'npx prettier --write "{{file}}"',
      },
    
      /**
       * Configurazione dell'Editor Visuale.
       */
      editor: {
        /**
         * Se l'editor visuale è abilitato.
         * Predefinito: false
         */
        enabled: true,
    
        /**
         * L'URL della tua applicazione per la convalida dell'origine.
         * Predefinito: ""
         */
        applicationURL: "http://localhost:3000",
    
        /**
         * La porta del server dell'editor locale.
         * Predefinito: 8000
         */
        port: 8000,
    
        /**
         * L'URL pubblico per l'editor.
         * Predefinito: "http://localhost:8000"
         */
        editorURL: "http://localhost:8000",
    
        /**
         * L'URL del CMS Intlayer.
         * Predefinito: "https://app.intlayer.org"
         */
        cmsURL: "https://app.intlayer.org",
    
        /**
         * L'URL del server API di backend.
         * Predefinito: "https://back.intlayer.org"
         */
        backendURL: "https://back.intlayer.org",
    
        /**
         * Se abilitare la sincronizzazione dei contenuti in tempo reale.
         * Predefinito: false
         */
        liveSync: true,
      },
    
      /**
       * Configurazione degli analytics.
       */
      analytics: {
        /**
         * Se la raccolta degli analytics è abilitata (visualizzazioni di pagina, esposizioni di contenuto, eventi A/B).
         * Richiede che `@intlayer/analytics` sia installato e che `editor.clientId` sia impostato per l'attribuzione.
         * Predefinito: true
         */
        enabled: true,
    
        /**
         * Millisecondi tra gli invii automatici in batch al backend.
         * Predefinito: 20000
         */
        flushInterval: 20000,
    
        /**
         * Frazione di sessioni da registrare, da 0 (nessuna) a 1 (tutte).
         * Predefinito: 1
         */
        sampleRate: 1,
      },
    
      /**
       * Impostazioni per le traduzioni e la generazione tramite IA.
       */
      ai: {
        /**
         * Fornitore IA da utilizzare.
         * Opzioni: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio', 'moonshotai'
         * Predefinito: 'openai'
         */
        provider: "openai",
    
        /**
         * Modello da utilizzare per il fornitore selezionato.
         */
        model: "gpt-4o",
    
        /**
         * La chiave API per il fornitore.
         */
        apiKey: process.env.OPENAI_API_KEY,
    
        /**
         * Contesto globale per guidare l'IA durante la generazione delle traduzioni.
         */
        applicationContext: "Questa è un'applicazione di prenotazione viaggi.",
    
        /**
         * URL base per l'API IA.
         */
        baseURL: "http://localhost:3000",
    
        /**
         * Serializzazione dei dati
         *
         * Opzioni:
         * - "json": predefinito, affidabile; utilizza più token.
         * - "toon": più veloce, meno token, meno stabile di JSON.
         *
         * Predefinito: "json"
         */
        dataSerialization: "json",
      },
    
      /**
       * Impostazioni di build e ottimizzazione.
       */
      build: {
        /**
         * Modalità di esecuzione del build.
         * - "auto": Build automatica durante il build dell'applicazione.
         * - "manual": Richiede il comando di build esplicito.
         * Predefinito: "auto"
         */
        mode: "auto",
    
        /**
         * Se ottimizzare il bundle dell'applicazione rimuovendo i dizionari inutilizzati.
         * Predefinito: true in produzione
         */
        optimize: true,
    
        /**
         * Minifica i dizionari per ridurre le dimensioni del bundle.
         * Predefinito: false
         *
         * Note:
         * - Questa opzione verrà ignorata se `optimize` è disabilitato.
         * - Questa opzione verrà ignorata se `editor.enabled` è vero.
         */
        minify: true,
    
        /**
         * Rimuovi le chiavi non utilizzate nei dizionari.
         * Predefinito: false
         *
         * Note:
         * - Questa opzione verrà ignorata se `optimize` è disabilitato.
         */
        purge: true,
    
        /**
         * Raggruppare i chunk di dizionario per lingua in base al confine di
         * code-splitting che li utilizza, così una pagina caricata in modo lazy
         * recupera il suo contenuto con una sola richiesta.
         * Predefinito: true
         *
         * Nota:
         * - Si applica solo ai dizionari che usano `importMode: 'dynamic'`.
         */
        chunkGrouping: true,
    
        /**
         * Caricare un dizionario insieme al chunk che lo utilizza, invece di
         * recuperarlo una volta che quel chunk viene renderizzato. I lettori vengono
         * renderizzati in modo sincrono invece di sospendersi, quindi la navigazione
         * non mostra più un lampeggio di caricamento.
         * Predefinito: true
         *
         * Nota:
         * - Viene attesa solo la lingua risolta, quindi la pagina scarica solo la
         *   lingua che mostra.
         */
        dictionariesPreload: true,
    
        /**
         * Formato di output per i file del dizionario generati.
         * Predefinito: ['cjs', 'esm']
         */
        outputFormat: ["cjs", "esm"],
    
        /**
         * Se controllare i tipi di TypeScript durante il build.
         * Predefinito: false
         */
        checkTypes: false,
      },
    
      /**
       * Configurazione del Logger.
       */
      log: {
        /**
         * Livello di logging.
         * - "default": Logging standard.
         * - "verbose": Logging di debug dettagliato.
         * - "disabled": Nessun logging.
         * Predefinito: "default"
         */
        mode: "default",
    
        /**
         * Prefisso per tutti i messaggi nei log.
         * Predefinito: "[intlayer]"
         */
        prefix: "[intlayer]",
      },
    
      /**
       * Configurazione di sistema (per uso avanzato)
       */
      system: {
        /**
         * Directory in cui memorizzare i dizionari localizzati.
         */
        dictionariesDir: ".intlayer/dictionary",
    
        /**
         * Directory per l'aumento del modulo (module augmentation).
         */
        moduleAugmentationDir: ".intlayer/types",
    
        /**
         * Directory in cui memorizzare i dizionari non fusi (unmerged).
         */
        unmergedDictionariesDir: ".intlayer/unmerged_dictionary",
    
        /**
         * Directory in cui memorizzare i tipi del dizionario.
         */
        typesDir: ".intlayer/types",
    
        /**
         * Directory in cui si trovano i file principali dell'applicazione.
         */
        mainDir: ".intlayer/main",
    
        /**
         * Directory in cui si trovano i file di configurazione compilati.
         */
        configDir: ".intlayer/config",
    
        /**
         * Directory per i file di cache.
         */
        cacheDir: ".intlayer/cache",
      },
    
      /**
       * Configurazione del compilatore (per uso avanzato)
       */
      compiler: {
        /**
         * Se il compilatore è abilitato.
         *
         * - false: disabilita il compilatore.
         * - true: abilita il compilatore.
         * - "build-only": salta il compilatore durante lo sviluppo per un avvio più rapido.
         *
         * Predefinito: false
         */
        enabled: true,
    
        /**
         * Determina il percorso del file di output. Sostituisce `outputDir`.
         *
         * - I percorsi che iniziano con `./` sono risolti rispetto alla directory del componente.
         * - I percorsi che iniziano con `/` sono risolti rispetto alla directory base del progetto (`baseDir`).
         *
         * - La presenza della variabile `{{locale}}` nel percorso abilita la generazione del dizionario per locale.
         *
         * Esempi:
         * ```ts
         * {
         *   // Genera file .content.ts multilingue accanto al componente
         *   output: ({ fileName, extension }) => `./${fileName}${extension}`,
         *
         *   // output: './{{fileName}}{{extension}}', // Equivalente tramite stringa template
         * }
         * ```
         *
         * ```ts
         * {
         *   // Genera JSON centralizzati per locale nella base del progetto
         *   output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
         *
         *   // output: '/locales/{{locale}}/{{key}}.content.json', // Equivalente tramite stringa template
         * }
         * ```
         *
         * Elenco delle variabili:
         *   - `fileName`: Nome del file.
         *   - `key`: Chiave del contenuto.
         *   - `locale`: Locale del contenuto.
         *   - `extension`: Estensione del file.
         *   - `componentFileName`: Nome del file del componente.
         *   - `componentExtension`: Estensione del file del componente.
         *   - `format`: Formato del dizionario.
         *   - `componentFormat`: Formato del dizionario del componente.
         *   - `componentDirPath`: Percorso della directory del componente.
         */
        output: ({ locale, key }) => `compiler/${locale}/${key}.json`,
    
        /**
         * Se salvare i componenti dopo averli trasformati.
         *
         * - Se impostato su `true`, il compilatore riscriverà il file del componente sul disco. Pertanto la trasformazione sarà permanente e il compilatore salterà la trasformazione per il processo successivo. In questo modo, il compilatore può trasformare l'app e poi può essere rimosso.
         *
         * - Se impostato su `false`, il compilatore inietterà la chiamata alla funzione `useIntlayer()` nel codice solo nell'output della build, mantenendo intatta la base di codice originale. La trasformazione verrà eseguita solo in memoria.
         */
        saveComponents: false,
    
        /**
         * Conserva solo il contenuto nel file generato. Utile per formati i18next o output JSON ICU MessageFormat per locale.
         */
        noMetadata: false,
    
        /**
         * Prefisso della chiave del dizionario
         */
        dictionaryKeyPrefix: "", // Aggiungi un prefisso opzionale alle chiavi del dizionario estratto
      },
    
      /**
       * Schemi personalizzati per la convalida del contenuto del dizionario.
       */
      schemas: {
        "my-schema": z.object({
          title: z.string(),
        }),
      },
    
      /**
       * Configurazione del dizionario.
       */
      dictionary: {
        /**
         * Controlla come vengono importati i dizionari.
         * - "static": Importato staticamente in fase di compilazione.
         * - "dynamic": Importato dinamicamente usando Suspense.
         * - "fetch": Recuperato dinamicamente tramite API di sincronizzazione live.
         */
        importMode: "static",
    
        /**
         * Il formato del messaggio predefinito per tutti i dizionari nel progetto.
         * - 'intlayer': Formato intlayer nativo (predefinito).
         * - 'icu': Formato del messaggio ICU.
         * - 'i18next': Formato i18next.
         * - 'vue-i18n': Formato Vue I18n.
         * - 'po': Formato GNU Gettext PO.
         */
        format: "icu",
      },
    
      /**
       * Configurazione dei plugin.
       */
      plugins: [
        syncJSON({
          format: "icu",
          source: ({ locale }) => `./messages/${locale}.json`,
        }),
      ],
    };
    
    export default config;
    

    Guida di Riferimento alla Configurazione

    Di seguito è riportata una descrizione dettagliata dei vari parametri di configurazione disponibili in Intlayer.

    Configurazione Internazionalizzazione (Internationalization)

    Definisce le impostazioni relative all'internazionalizzazione, inclusi i locale disponibili e il locale predefinito.

    CampoDescrizioneTipoPredefinitoEsempioCommenti
    localesElenco dei locale supportati nell'applicazione.string[][Locales.ENGLISH]['en', 'fr', 'es']
    requiredLocalesElenco dei locale richiesti nell'applicazione.string[][][]• Se vuoto, tutti i locale sono richiesti in modalità strict.
    • Assicurati che i locale richiesti siano definiti anche nel campo locales.
    strictModeGarantisce un'implementazione forte dei contenuti internazionalizzati utilizzando TypeScript.string'inclusive'• Se "strict": La definizione di ogni locale dichiarato è obbligatoria per la funzione t - errore se mancante o non dichiarato.
    • Se "inclusive": Avviso per i locale mancanti ma permette l'uso di locale esistenti non dichiarati.
    • Se "loose": Accetta qualsiasi locale esistente.
    defaultLocaleLocale predefinito utilizzato come fallback se il locale richiesto non è disponibile.stringLocales.ENGLISH'en'Utilizzato per determinare il locale se non specificato nell'URL, nei cookie o negli header.

    Configurazione Editor (Editor)

    Definisce le impostazioni per l'editor visuale, incluse la porta del server e lo stato di abilitazione.

    CampoDescrizioneTipoPredefinitoEsempioCommenti
    applicationURLL'URL della tua applicazione.stringundefined'http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • Utilizzato per limitare l'origine dell'editor per motivi di sicurezza.
    • Se impostato su '*', l'editor è accessibile da qualsiasi origine.
    portLa porta del server dell'editor visuale.number8000
    editorURLL'URL del server dell'editor.string'http://localhost:8000''http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • Utilizzato per limitare le origini che possono comunicare con l'applicazione.
    • Se impostato su '*', è accessibile da qualsiasi origine.
    • Necessario se la porta viene cambiata o se l'editor è ospitato su un altro dominio.
    cmsURLL'URL del CMS Intlayer.string'https://app.intlayer.org''https://app.intlayer.org'
    backendURLL'URL del server di backend.stringhttps://back.intlayer.orghttp://localhost:4000
    enabledSe l'applicazione deve comunicare con l'editor visuale.booleanfalseprocess.env.NODE_ENV !== 'production'• Se false, l'editor non potrà comunicare con l'applicazione.
    • Disabilitare questo per certi ambienti aumenta la sicurezza.
    clientIdPermette ai pacchetti intlayer di autenticarsi con il backend tramite oAuth2. Visita intlayer.org/project per ottenere il tuo token di accesso.string |
    undefined
    undefinedDeve essere mantenuto segreto; usa le variabili d'ambiente.
    clientSecretPermette ai pacchetti intlayer di autenticarsi con il backend tramite oAuth2. Visita intlayer.org/project per ottenere il tuo token di accesso.string |
    undefined
    undefinedDeve essere mantenuto segreto; usa le variabili d'ambiente.
    dictionaryPriorityStrategyStrategia di priorità del dizionario quando sono presenti sia dizionari locali che remoti.string'local_first''distant_first''distant_first': Priorità ai dizionari remoti rispetto a quelli locali.
    'local_first': Priorità ai dizionari locali rispetto a quelli remoti.
    liveSyncSe il server dell'applicazione ricarica istantaneamente il contenuto quando viene rilevata una modifica nel CMS
    Editor Visuale
    Server di Backend.
    booleantruetrue• Aggiorna il contenuto della pagina dell'applicazione quando i dizionari vengono aggiunti/aggiornati.
    • Live Sync accetta contenuti da un server esterno, il che potrebbe influire leggermente sulle prestazioni.
    • Si consiglia di ospitare entrambi sulla stessa macchina.
    liveSyncPortLa porta del server Live Sync.number40004000
    liveSyncURLL'URL del server Live Sync.string'http://localhost:{liveSyncPort}''https://example.com'Punta a localhost per impostazione predefinita; può essere cambiato per puntare a un server Live Sync remoto.

    Configurazione Analytics (Analytics)

    Definisce le impostazioni relative agli analytics di Intlayer: la raccolta di quale contenuto viene effettivamente mostrato agli utenti (visualizzazioni di pagina, esposizioni di contenuto) e il supporto ai test A/B sui contenuti.

    Gli analytics sono opt-out: sono abilitati per impostazione predefinita e iniziano a raccogliere dati non appena il pacchetto @intlayer/analytics è installato e una chiave di progetto (editor.clientId) è configurata per l'attribuzione. Imposta analytics.enabled su false — oppure non installare il pacchetto — e l'intera integrazione analytics viene eliminata dal bundle dell'applicazione (dead-code elimination).

    CampoDescrizioneTipoPredefinitoEsempioNota
    enabledAbilita la raccolta degli analytics (visualizzazioni di pagina, esposizioni di contenuto, eventi A/B).booleantruefalseRichiede che @intlayer/analytics sia installato e che editor.clientId sia impostato per l'attribuzione; altrimenti gli analytics rimangono disabilitati anche se enabled è true.
    flushIntervalMillisecondi tra gli invii automatici in batch al backend.number2000010000
    sampleRateFrazione di sessioni da registrare, da 0 (nessuna) a 1 (tutte).number10.5Il campionamento è deterministico per sessione, quindi una sessione registrata riporta tutti i suoi eventi (nessun funnel parziale).

    Configurazione Routing (Routing)

    Impostazioni che controllano il comportamento del routing, inclusa la struttura dell'URL, lo storage del locale e la gestione del middleware.

    CampoDescrizioneTipoPredefinitoEsempioCommenti
    modeModalità di routing URL per la gestione dei locale.'prefix-no-default' |
    'prefix-all' |
    'no-prefix' |
    'search-params'
    'prefix-no-default''prefix-no-default': /dashboard (en) o /fr/dashboard (fr). 'prefix-all': /en/dashboard. 'no-prefix': locale gestito diversamente. 'search-params': /dashboard?locale=frNon influisce sulla gestione dei cookie o sul local storage.
    enableProxyAbilita il proxy di routing delle locale di Intlayer (middleware).boolean |
    undefined
    undefined (auto)true• Non impostato (auto): i server di dev e preview ignorano la locale salvata in cookie/header come sorgente di redirect; prefissi, persistenza e rilevamento Accept-Language si applicano ancora. In produzione si comporta come true.
    true: comportamento completo ovunque.
    false: nessun routing delle locale. Su Next.js il middleware intlayerProxy diventa trasparente.
    storageConfigurazione per lo storage del locale sul client.false |
    'cookie' |
    'localStorage' |
    'sessionStorage' |
    'header' |
    CookiesAttributes |
    StorageAttributes |
    Array
    ['cookie', 'header']'localStorage'
    [{ type: 'cookie', name: 'custom-locale', secure: true }]
    Vedi la tabella dei parametri di storage sotto.
    basePathPercorso base per gli URL dell'applicazione.string'''/my-app'Se la tua app è su https://example.com/my-app, basePath è '/my-app' e gli URL sono https://example.com/my-app/en.
    rewriteRegole di riscrittura URL personalizzate per sovrascrivere la modalità di routing predefinita per percorsi specifici. Supporta parametri dinamici [param].Record<string, StrictModeLocaleMap<string>>undefinedVedi Esempio sotto• Regole di riscrittura con priorità più alta rispetto alla mode.
    • Funziona con Next.js e Vite.
    getLocalizedUrl() applica automaticamente le regole appropriate.
    • Vedi Riscritture URL Personalizzate.
    domainsMappa i locale ai nomi host del dominio per il routing basato sul dominio. Quando impostato, gli URL per un locale usano quel dominio come base (URL assoluto) e non viene aggiunto alcun prefisso di locale al percorso.Partial<Record<Locale, string>>undefined{ zh: 'intlayer.zh', fr: 'intlayer.org' }• Il protocollo è impostato su https:// se non incluso nel nome host.
    • Il dominio stesso identifica il locale, quindi non viene aggiunto alcun prefisso /zh/.
    getLocalizedUrl('/', 'zh') restituisce https://intlayer.zh/.

    Esempio di rewrite:

    typescript
    routing: {
      mode: "prefix-no-default", // Strategia di fallback
      rewrite: nextjsRewrite({
        "/about": {
          en: "/about",
          fr: "/a-propos",
        },
        "/product/[slug]": {
          en: "/product/[slug]",
          fr: "/produit/[slug]",
        },
        "/blog/[category]/[id]": {
          en: "/blog/[category]/[id]",
          fr: "/journal/[category]/[id]",
        },
      }),
    }
    

    Parametri di Storage (Storage)

    ValoreCommentiDescrizione
    'cookie'• Garantire il consenso dell'utente appropriato per l'implementazione GDPR.
    • Configurabile tramite CookiesAttributes ({ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }).
    Memorizza il locale in un cookie - accessibile sia dal client che dal server.
    'localStorage'• Non scade se non rimosso esplicitamente.
    • Intlayer Proxy non può accedervi.
    • Configurabile tramite StorageAttributes ({ type: 'localStorage', name: 'custom-locale' }).
    Memorizza il locale nel browser senza scadenza - solo lato client.
    'sessionStorage'• Rimosso alla chiusura del tab/finestra.
    • Intlayer Proxy non può accedervi.
    • Configurabile tramite StorageAttributes ({ type: 'sessionStorage', name: 'custom-locale' }).
    Memorizza il locale per la durata della sessione della pagina - solo lato client.
    'header'• Utile per chiamate API.
    • Il lato client non può accedervi.
    • Configurabile tramite StorageAttributes ({ type: 'header', name: 'custom-locale' }).
    Memorizza o passa il locale tramite header HTTP - solo lato server.

    Quando si utilizza lo storage in un cookie, è possibile impostare attributi aggiuntivi:

    CampoDescrizioneTipo
    nameNome del cookie. Predefinito: 'INTLAYER_LOCALE'string
    domainDominio del cookie. Predefinito: undefinedstring
    pathPercorso del cookie. Predefinito: undefinedstring
    secureRichiede HTTPS. Predefinito: undefinedboolean
    httpOnlyFlag HTTP-only. Predefinito: undefinedboolean
    sameSitePolitica SameSite.'strict' |
    'lax' |
    'none'
    expiresUn numero rappresenta i giorni dalla creazione; una data (o stringa di data ISO) è una data di scadenza assoluta. Predefinito: undefinedDate |
    number |
    string
    maxAgeDurata in secondi dalla creazione. Ha la precedenza su expires. Predefinito: undefinednumber

    Attributi dello Storage (Storage Attributes)

    Quando si utilizza localStorage o sessionStorage:

    CampoDescrizioneTipo
    typeTipo di storage.'localStorage' |
    'sessionStorage'
    nameNome della chiave nello storage. Predefinito: 'INTLAYER_LOCALE'string

    Esempi di Configurazione

    Ecco alcuni esempi di configurazione comuni per la nuova struttura di routing v7:

    Configurazione Base (Predefinita):

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default",
        storage: "localStorage",
        basePath: "",
      },
    };
    
    export default config;
    

    Configurazione con Conformità GDPR:

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default",
        storage: [
          {
            type: "localStorage",
            name: "user-locale",
          },
          {
            type: "cookie",
            name: "user-locale",
            secure: true,
            sameSite: "strict",
            httpOnly: false,
          },
        ],
        basePath: "",
      },
    };
    
    export default config;
    

    Modalità Parametri di Ricerca (Search Params):

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "search-params",
        storage: "localStorage",
        basePath: "",
      },
    };
    
    export default config;
    

    Modalità Senza Prefisso con Storage Personalizzato:

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "no-prefix",
        storage: {
          type: "sessionStorage",
          name: "app-locale",
        },
        basePath: "/my-app",
      },
    };
    
    export default config;
    

    Riscritture URL Personalizzate con Percorsi Dinamici:

    typescript
    // intlayer.config.ts
    import { nextjsRewrite } from "intlayer/routing";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default", // Fallback per i percorsi non riscritti
        storage: "cookie",
        rewrite: nextjsRewrite({
          "/about": {
            en: "/about",
            fr: "/a-propos",
          },
          "/product/[slug]": {
            en: "/product/[slug]",
            fr: "/produit/[slug]",
          },
          "/blog/[category]/[id]": {
            en: "/blog/[category]/[id]",
            fr: "/journal/[category]/[id]",
          },
        }),
      },
    };
    
    export default config;
    

    Configurazione Contenuto (Content)

    Impostazioni per come i contenuti sono gestiti nell'applicazione, inclusi i nomi delle directory, le estensioni dei file e le configurazioni derivate.

    CampoDescrizioneTipoPredefinitoEsempioCommenti
    watchIndica se Intlayer deve monitorare le modifiche nei file di dichiarazione del contenuto per rigenerare i dizionari.booleantrue
    fileExtensionsEstensioni dei file da scansionare durante la compilazione dei dizionari.string[]['.content.ts', '.content.js', '.content.cjs', '.content.mjs', '.content.json', '.content.json5', '.content.jsonc', '.content.tsx', '.content.jsx']['.data.ts', '.data.js', '.data.json']Può aiutare a evitare conflitti di personalizzazione.
    contentDirPercorso della directory dove si trovano i file di definizione del contenuto (.content.*).string[]['.']['src', '../../ui-library', require.resolve("@my-package/content"), '@my-package/content']Utilizzato per il monitoraggio dei file di contenuto e la rigenerazione dei dizionari.
    codeDirDirectory del percorso in cui si trova il codice, rispetto alla directory base.string[]['.']['src', '../../ui-library']• Utilizzato per il monitoraggio dei file di codice per la trasformazione (rimozione di parti non necessarie, ottimizzazione).
    • Separare da contentDir può migliorare le prestazioni.
    excludedPathDirectory da escludere dalla scansione del contenuto.string[]['**/node_modules/**', '**/dist/**', '**/build/**', '**/.intlayer/**', '**/.next/**', '**/.nuxt/**', '**/.expo/**', '**/.vercel/**', '**/.turbo/**', '**/.tanstack/**']Attualmente non utilizzato; pianificato per il futuro.
    formatCommandComando per formattare i file di contenuto quando Intlayer li scrive localmente.stringundefined'npx prettier --write "{{file}}" --log-level silent' (Prettier), 'npx biome format "{{file}}" --write --log-level none' (Biome), 'npx eslint --fix "{{file}}" --quiet' (ESLint){{file}} sarà sostituito dal percorso del file.
    • Se non definito, Intlayer tenta di dedurlo (testando prettier, biome, eslint).

    Configurazione del Sistema

    Impostazioni relative ai percorsi interni e ai risultati dell'output di Intlayer. Queste impostazioni sono tipicamente interne e non dovrebbero aver bisogno di essere modificate dall'utente.

    FieldDescriptionTypeDefaultExampleNote
    baseDirLa directory di base per il progetto.stringprocess.cwd()'/path/to/project'Utilizzato per risolvere tutte le directory correlate a Intlayer.
    dictionariesDirIl percorso della directory per archiviare i dizionari di localizzazione.string'.intlayer/dictionary'
    moduleAugmentationDirDirectory per l'augmentazione dei moduli, che consente migliori suggerimenti dell'IDE e controllo dei tipi.string'.intlayer/types''intlayer-types'Assicurati di includerlo in tsconfig.json.
    unmergedDictionariesDirLa directory per l'archiviazione dei dizionari non uniti.string'.intlayer/unmerged_dictionary'
    typesDirLa directory per l'archiviazione dei tipi di dizionario.string'.intlayer/types'
    mainDirLa directory in cui vengono archiviati i file dell'applicazione principale.string'.intlayer/main'
    configDirLa directory in cui vengono archiviati i file di configurazione.string'.intlayer/config'
    cacheDirLa directory in cui vengono archiviati i file della cache.string'.intlayer/cache'

    Configurazione Dizionario (Dictionary)

    Parametri che controllano le operazioni del dizionario, inclusi i comportamenti di auto-compilazione e la generazione dei contenuti.

    Questa configurazione del dizionario serve a due scopi principali:

    1. Valori Predefiniti: Definisci valori predefiniti durante la creazione di file di dichiarazione del contenuto
    2. Comportamento di Fallback: Fornisci valori di fallback quando campi specifici non sono definiti, permettendoti di definire il comportamento dell'operazione del dizionario a livello globale

    Per ulteriori informazioni sui file di dichiarazione dei contenuti e su come vengono applicati i valori di configurazione, consulta la Documentazione dei File di Contenuto.

    CampoDescrizioneTipoPredefinitoEsempioCommenti
    fillControlla come vengono generati i file di output della compilazione automatica (traduzione IA).boolean |
    FilePathPattern |
    Partial<Record<Locale, boolean | FilePathPattern>>
    true{ en: '/locales/en/{{key}}.json', fr: ({ key }) => '/locales/fr/${key}.json', es: false }true: Percorso predefinito (stesso file della sorgente).
    false: Disabilita.
    • Stringa template/Funzione abilita la generazione per locale.
    • Oggetto per locale: Ogni locale corrisponde al proprio template; false esclude quel locale.
    • L'inclusione di {{locale}} abilita la generazione per locale.
    fill a livello di dizionario ha sempre la priorità su questa impostazione globale.
    descriptionAiuta l'editor e il CMS a comprendere lo scopo del dizionario. Utilizzato anche come contesto per generare traduzioni tramite IA.stringundefined'User profile section'
    localeTrasforma il dizionario in un formato per un locale specifico. Ogni campo dichiarato diventa un nodo di traduzione. Se mancante, il dizionario è considerato multilingue.LocalesValuesundefined'en'Usalo se il dizionario è per un locale specifico invece di contenere più traduzioni.
    contentAutoTransformationSe trasformare automaticamente le stringhe di contenuto in nodi tipizzati (Markdown, HTML o inserimenti).boolean |
    { markdown?: boolean; html?: boolean; insertion?: boolean }
    falsetrue• Markdown : ### Titlemd('### Title').
    • HTML : <div>Title</div>html('<div>Title</div>').
    • Inserimento : Hello {{name}}insert('Hello {{name}}').
    locationIndica dove sono memorizzati i file del dizionario e come sono sincronizzati con il CMS.'local' |
    'remote' |
    'hybrid' |
    'plugin' |
    string
    'local''hybrid''local': Solo gestione locale.
    'remote': Solo gestione remota (CMS).
    'hybrid': Sia gestione locale che remota.
    'plugin' o stringa personalizzata: Gestione tramite plugin o sorgente personalizzata.
    importModeControlla come vengono importati i dizionari.'static' |
    'dynamic' |
    'fetch'
    'static''dynamic''static': Importazione statica.
    'dynamic': Importazione dinamica tramite Suspense.
    'fetch': Recupero tramite l'API Live Sync; fallback a 'dynamic' in caso di fallimento.
    • Richiede i plugin @intlayer/babel e @intlayer/swc.
    • Le chiavi devono essere dichiarate staticamente.
    • Ignorato se optimize è disattivato.
    • Non influisce su getIntlayer, getDictionary, ecc.
    formatIl formato del messaggio predefinito per tutti i dizionari nel progetto.'intlayer' |
    'icu' |
    'i18next' |
    'vue-i18n' |
    'po'
    'intlayer''icu''intlayer': Formato intlayer nativo.
    'icu': Formato del messaggio ICU.
    'i18next': Formato i18next.
    'vue-i18n': Formato Vue I18n.
    'po': Formato GNU Gettext PO.
    priorityPriorità del dizionario. Quando si risolvono i conflitti tra i dizionari, i valori più alti vincono su quelli più bassi.numberundefined1
    liveDEPRECATO - usa importMode: 'fetch'. Indica se il contenuto del dizionario debba essere recuperato dinamicamente tramite l'API Live Sycn.booleanundefinedRinominato in importMode: 'fetch' in v8.0.0.
    schemaGenerato automaticamente da Intlayer per la convalida dello schema JSON.'https://intlayer.org/schema.json'Auto-genNon modificare manualmente.
    titleAiuta a identificare i dizionari nell'editor e nel CMS.stringundefined'User Profile'
    tagsCategorizza i dizionari e fornisce contesto o istruzioni per l'editor e l'IA.string[]undefined['user', 'profile']
    versionVersione del dizionario remoto; aiuta a tracciare quale versione è attualmente utilizzata.stringundefined'1.0.0'• Gestito nel CMS.
    • Non modificare localmente.

    Esempio di fill:

    ts
    dictionary: {
      fill: {
        en: "/locales/en/{{key}}.content.json",
        fr: ({ key }) => `/locales/fr/${key}.content.json`,
        es: false,
      },
    };
    

    Configurazione Logger (Log)

    Parametri per personalizzare l'output dei log di Intlayer.

    CampoDescrizioneTipoPredefinitoEsempioCommenti
    modeIndica la modalità del logger.'default' |
    'verbose' |
    'disabled'
    'default''verbose''verbose': Logga più informazioni per il debug.
    'disabled': Disabilita completamente il logger.
    prefixPrefisso per tutti i messaggi nei log.string'[intlayer] ''[mio prefisso] '

    Configurazione IA (AI)

    Impostazioni che controllano le funzionalità IA di Intlayer, inclusi il fornitore, il modello e la chiave API.

    Questa configurazione è facoltativa se ti registri sulla Dashboard Intlayer con una chiave di accesso. Intlayer gestirà automaticamente per te la soluzione IA più economica ed efficiente secondo le tue necessità. L'uso delle opzioni predefinite garantisce il miglior supporto a lungo termine man mano che Intlayer viene costantemente aggiornato per utilizzare i modelli più recenti.

    Se preferisci utilizzare la tua chiave API o un modello specifico, puoi definire la tua configurazione IA. Questa configurazione IA sarà utilizzata globalmente nel tuo ambiente Intlayer. I comandi CLI utilizzeranno queste impostazioni per impostazione predefinita per comandi come fill, così come l'SDK, l'Editor Visuale e il CMS. È possibile sovrascrivere questi valori predefiniti in casi specifici tramite i parametri del comando.

    Intlayer supporta diversi fornitori IA per la massima flessibilità. I fornitori attualmente supportati sono:

    • OpenAI (predefinito)
    • Anthropic Claude
    • Mistral AI
    • DeepSeek
    • Google Gemini
    • Google AI Studio
    • Google Vertex
    • Meta Llama
    • Ollama
    • OpenRouter
    • Alibaba Cloud
    • Fireworks
    • Hugging Face
    • Groq
    • Amazon Bedrock
    • Together.ai
    • LM Studio
    CampoDescrizioneTipoPredefinitoEsempioCommenti
    providerFornitore IA da utilizzare per le funzionalità IA di Intlayer.'openai' |
    'anthropic' |
    'mistral' |
    'deepseek' |
    'gemini' |
    'ollama' |
    'openrouter' |
    'alibaba' |
    'fireworks' |
    'groq' |
    'huggingface' |
    'bedrock' |
    'googleaistudio' |
    'googlevertex' |
    'togetherai' |
    'lmstudio' |
    'moonshotai'
    undefined'anthropic'Fornitori diversi richiedono chiavi API diverse e hanno prezzi diversi.
    modelModello IA da utilizzare per le funzionalità IA.stringNessuno'gpt-4o-2024-11-20'I modelli specifici dipendono dal fornitore.
    temperatureControlla la casualità della risposta IA.numberNessuno0.1Temperatura più alta = più creativo e meno affidabile.
    apiKeyLa tua chiave API per il fornitore selezionato.stringNessunoprocess.env.OPENAI_API_KEYDeve essere mantenuto segreto; usa le variabili d'ambiente.
    applicationContextContesto aggiuntivo sulla tua applicazione per aiutare l'IA a generare traduzioni più accurate (dominio, pubblico di destinazione, tono, terminologia).stringNessuno'Mio contesto applicativo personalizzato'Può essere utilizzato per aggiungere regole (es: "Non dovresti tradurre i tuoi URL").
    baseURLURL base per l'API IA.stringNessuno'https://api.openai.com/v1'
    'http://localhost:5000'
    Può puntare a endpoint API IA locali o personalizzati.
    dataSerializationFormato di serializzazione dei dati per le funzionalità IA.'json' |
    'toon'
    undefined'toon''json': predefinito, affidabile; utilizza più token.
    'toon': meno token, meno stabile.
    • Passa il contesto al modello come parametro aggiuntivo (reasoning effort, ecc.).

    Configurazione Build (Build)

    Parametri che controllano come Intlayer ottimizza e compila l'internazionalizzazione della tua applicazione.

    Le opzioni di build sono applicate ai plugin @intlayer/babel e @intlayer/swc.

    In modalità sviluppo, Intlayer utilizza importazioni statiche dei dizionari per facilitare il processo di sviluppo.
    Durante l'ottimizzazione, Intlayer sostituirà le chiamate ai dizionari per ottimizzare il suddivisione del codice (chunking) in modo che il bundle risultante importi solo i dizionari effettivamente utilizzati.
    CampoDescrizioneTipoPredefinitoEsempioCommenti
    modeControlla la modalità di build.'auto' |
    'manual'
    'auto''manual''auto': Il build viene lanciato automaticamente durante il build dell'applicazione.
    'manual': Viene eseguito solo tramite un comando di build esplicito.
    • Può essere utilizzato per impedire il build dei dizionari (es. per evitare l'esecuzione in ambiente Node.js).
    optimizeControlla se le ottimizzazioni del build debbano essere eseguite.booleanundefinedprocess.env.NODE_ENV === 'production'• Se non definito, l'ottimizzazione viene lanciata durante il build del framework (Vite/Next.js).
    true forza l'ottimizzazione anche in modalità dev.
    false la disabilita.
    • Se abilitato, sostituisce le chiamate ai dizionari per l'ottimizzazione del chunking.
    • Richiede i plugin @intlayer/babel e @intlayer/swc.
    minifyMinifica i dizionari per ridurre le dimensioni del bundle.booleanfalse• Indica se il bundle deve essere minificato.
    • Predefinito: true in produzione.
    • Questa opzione verrà ignorata se optimize è disabilitato.
    • Questa opzione verrà ignorata se editor.enabled è vero.
    purgeRimuovi le chiavi non utilizzate nei dizionari.booleanfalse• Indica se il bundle deve essere rimosso.
    • Predefinito: true in produzione.
    • Questa opzione verrà ignorata se optimize è disabilitato.
    checkTypesIndica se il build debba controllare i tipi di TypeScript e loggare gli errori.booleanfalsePuò rallentare il processo di build.
    chunkGroupingIndica se raggruppare i chunk di dizionario per lingua in base al confine di code-splitting che li utilizza.booleantrue• Senza raggruppamento, una pagina composta da molti componenti emette una richiesta per dizionario.
    • I dizionari raggiunti da più confini vengono spostati in un chunk condiviso, così nessuna pagina include il contenuto di un'altra.
    • Si applica solo ai dizionari che usano importMode: 'dynamic'.
    • Si applica solo alla build client, e solo durante il bundling (non in dev).
    dictionariesPreloadIndica se un dizionario debba essere caricato insieme al chunk che lo utilizza, invece di essere recuperato una volta che quel chunk viene renderizzato.booleantrue• Il punto di ingresso generato attende la lingua di navigazione al livello superiore, quindi una route caricata in modo lazy non è considerata caricata finché il suo contenuto non è disponibile.
    • I lettori vengono renderizzati in modo sincrono invece di sospendersi, quindi la navigazione non mostra più un lampeggio di caricamento.
    • Viene attesa solo la lingua risolta, quindi la pagina scarica solo la lingua che mostra.
    • Si applica solo ai dizionari che usano importMode: 'dynamic', nella build client.
    • Richiede un bundler che supporti il top-level await (Vite, esbuild).
    outputFormatControlla il formato di output per i dizionari.('esm' | 'cjs')[]['esm', 'cjs']['cjs']
    traversePatternPattern che specifica i file da scansionare durante l'ottimizzazione.string[]['**/*.{tsx,ts,js,mjs,cjs,jsx,vue,svelte,svte}', '!**/node_modules/**', '!**/dist/**', '!**/.intlayer/**', '!**/*.config.*', '!**/*.test.*', '!**/*.spec.*', '!**/*.stories.*']['src/**/*.{ts,tsx}', '../ui-library/**/*.{ts,tsx}', '!**/node_modules/**']• Limita l'ottimizzazione ai file rilevanti per migliorare le prestazioni del build.
    • Ignorato se optimize è disattivato.
    • Utilizza pattern glob.

    Configurazione Compilatore (Compiler)

    Impostazioni che controllano il compilatore Intlayer, che raccoglie i dizionari direttamente dai tuoi componenti.

    CampoDescrizioneTipoPredefinitoEsempioCommenti
    enabledIndica se il compilatore debba essere attivo per raccogliere i dizionari.boolean |
    'build-only'
    true'build-only''build-only' salta il compilatore durante lo sviluppo per build più veloci; viene eseguito solo durante i comandi di build.
    dictionaryKeyPrefixPrefisso per le chiavi del dizionario raccolte.string'''mio-prefisso-'Anteposto alla chiave generata (basata sul nome del file) per evitare conflitti.
    saveComponentsIndica se i componenti debbano essere salvati dopo essere stati trasformati.booleanfalse• Se impostato su true, il compilatore riscriverà il file del componente sul disco. La trasformazione sarà permanente e il compilatore potrà essere rimosso.
    • Se impostato su false, il compilatore inietterà la chiamata alla funzione useIntlayer() nel codice solo nell'output della build, mantenendo intatta la base di codice originale.
    outputDetermina il percorso del file di output. Sostituisce outputDir. Supporta variabili template: {{fileName}},
    {{key}},
    {{locale}},
    {{extension}},
    {{componentFileName}},
    {{componentExtension}},
    {{format}},
    {{componentFormat}},
    {{componentDirPath}}.
    boolean |
    FilePathPattern |
    Partial<Record<Locale, boolean | FilePathPattern>>
    undefined'./{{fileName}}{{extension}}'
    '/locales/{{locale}}/{{key}}.json'
    { en: ({ key }) => './locales/en/${key}.json', fr: '...', es: false }
    • Percorsi ./ risolti rispetto alla directory del componente.
    • Percorsi / rispetto alla base del progetto.
    {{locale}} abilita la generazione per locale.
    • Supporta la notazione ad oggetto per locale.
    noMetadataSe true, il compilatore rimuove i metadati del dizionario (chiave, wrapper del contenuto) dall'output.booleanfalsefalse{"key":"mia-chiave","content":{"key":"valore"}}
    true{"key":"valore"}
    • Utile per formati i18next o output JSON ICU MessageFormat.
    • Funziona bene con il plugin loadJSON.
    dictionaryKeyPrefixPrefisso della chiave del dizionariostring''Aggiungi un prefisso opzionale alle chiavi del dizionario estratto

    Schemi Personalizzati (Custom Schemas)

    CampoDescrizioneTipo
    schemasConsente di definire schemi Zod per convalidare la struttura dei tuoi dizionari.Record<string, ZodSchema>

    Plugin (Plugins)

    CampoDescrizioneTipo
    pluginsElenco dei plugin di Intlayer da includere.IntlayerPlugin[]

    Domande frequenti

    Alla radice del tuo progetto, accanto a package.json. Intlayer accetta anche intlayer.config.js, intlayer.config.mjs, intlayer.config.cjs e JSON, così il file si adatta a qualunque sistema di moduli usi il tuo progetto.

    Molto meno di una configurazione basata su namespace, perché una pagina non scarica mai un catalogo che non renderizza. Il markup renderizzato lato server risolve i suoi contenuti sul server, e il compilatore in fase di build sostituisce le chiamate useIntlayer con le esatte voci del dizionario che un componente utilizza, quindi le chiavi e le lingue non utilizzate vengono eliminate. I dizionari dinamici suddividono il resto per locale. Misurato rispetto alle alternative abituali, Intlayer riduce la dimensione del bundle e delle pagine fino al 50%. Vedi ottimizzazione del bundle e il benchmark.

    Sì, e ci sono due percorsi. Puoi migrare il contenuto progressivamente con la guida alla migrazione da i18next o la guida alla migrazione da next-intl. Oppure puoi mantenere interamente la tua API attuale: gli adattatori di compatibilità espongono esattamente la stessa API di i18next, react-i18next, next-intl, next-i18next, react-intl, use-intl, vue-i18n e Lingui, ma servita dai dizionari Intlayer, quindi cambiano gli import e il codice dei componenti no.

    Sì. Il plugin di sincronizzazione JSON mantiene i tuoi file /messages/{locale}/{namespace}.json come fonte di verità e genera dizionari Intlayer da essi, in entrambe le direzioni. Un plugin di sincronizzazione PO fa lo stesso per i cataloghi gettext, e i file per locale ti permettono di dividere il contenuto per lingua invece di raggruppare i locale in un unico file.

    No. Esegui npx intlayer extract e Intlayer legge i tuoi file sorgente, estrae le stringhe visibili all'utente e scrive un file .content accanto a ciascuno, così puoi rivedere un diff invece di copiare le stringhe in un catalogo una alla volta. Vedi il comando extract.

    Per una pipeline completamente automatizzata, il Compilatore Intlayer fa lo stesso in fase di build sul codice sorgente JSX, TSX, Vue e Svelte, generando i dizionari ad ogni modifica così non ci sono chiavi da mantenere a mano. Funziona per analisi statica, quindi le stringhe che esistono solo a runtime restano fuori portata, e ha bisogno di alcune annotazioni per distinguere il testo visibile all'utente dalla logica applicativa.

    Cinque componenti, tutti opzionali:

    • Estensione VS Code: salta da una chiave useIntlayer al file di contenuto che la dichiara, estrai il contenuto da un componente ed esegui build, fill, test, push e pull dalla palette dei comandi o da una scheda Intlayer dedicata.
    • Server LSP: la stessa consapevolezza in qualsiasi editor che parla LSP, con vai alla definizione, trova tutti i riferimenti, anteprime al passaggio del mouse di un valore tradotto, autocompletamento di chiavi e campi, e un avviso quando una chiave non è dichiarata da nessuna parte. Risolve anche le chiamate i18next, react-i18next, next-intl e use-intl, il che aiuta durante la migrazione.
    • Server MCP: espone la documentazione di Intlayer e la CLI a Cursor, VS Code, Claude Desktop, Claude Code e ChatGPT, così un assistente risponde in base alla documentazione aggiornata invece di tirare a indovinare, e può eseguire da solo comandi come intlayer fill.
    • Agent skills: competenze mirate come intlayer-config, intlayer-cli e intlayer-content, più una per framework, che insegnano a un agente la tua configurazione di routing e i tipi di nodo dei contenuti.
    • Plugin ESLint: no-raw-text segnala le stringhe hardcoded, con ulteriori regole per le chiavi statiche dei dizionari e i contenuti non utilizzati.