# sanity: Configurazione URL: https://generaltranslation.com/it/docs/sanity/guides/configuration.mdx --- title: Configurazione description: Configura il plugin gt-sanity per il progetto Sanity --- ## Panoramica La funzione `gtPlugin` accetta un oggetto di configurazione per personalizzare il comportamento della traduzione, le impostazioni regionali e la gestione dei documenti. ```typescript title="sanity.config.ts" import { gtPlugin } from 'gt-sanity'; export default defineConfig({ plugins: [ gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], // Sostituisci con le tue impostazioni regionali di destinazione languageField: 'language', singletons: ['siteSettings', 'navigation'], }), ], }); ``` ## Configurazione di base ### Lingua di origine e impostazioni regionali di destinazione Definisci la lingua di origine e le impostazioni regionali di destinazione: ```typescript gtPlugin({ sourceLocale: 'en', // Lingua di origine del contenuto locales: ['es', 'zh', 'ja'], // Lingue di destinazione per la traduzione }); ``` ### Uso di `defaultLocale` da `gt.config.json` Se hai già un `gt.config.json` (ad esempio perché usi `gt-next` o `gt-react`), puoi espanderlo direttamente nella configurazione del plugin. Il campo `defaultLocale` è accettato anche come alias di `sourceLocale`: ```typescript import gtConfig from './gt.config.json'; gtPlugin({ ...gtConfig, // { defaultLocale: 'en', locales: ['es', 'zh', 'ja'] } }); ``` Se vengono specificati sia `sourceLocale` che `defaultLocale`, `sourceLocale` ha la precedenza. ### Campo lingua Specifica quale campo memorizza l'impostazione regionale del documento. Per impostazione predefinita è `'language'`: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], languageField: 'locale', // Per impostazione predefinita, i documenti usano il campo 'language'. Qui usiamo 'locale' al suo posto. }); ``` ## Filtrare i documenti ### Traduci tipi di documenti specifici Limita la traduzione a specifici tipi di documento: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], translateDocuments: [{ type: 'page' }, { type: 'post' }], }); ``` ### Tradurre documenti specifici Seleziona gli ID dei documenti specifici: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], translateDocuments: [ { documentId: 'homepage' }, { documentId: 'about-page' }, ], }); ``` ## Documenti singleton I singleton sono documenti di Sanity che esistono in un'unica istanza con varianti tradotte. Configura come vengono denominate le versioni tradotte: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], singletons: ['siteSettings', 'navigation', 'footer'], // Elenco degli ID dei documenti singleton singletonMapping: (docId, locale) => `${docId}-${locale}`, // Funzione opzionale per personalizzare gli ID dei documenti singleton tradotti }); ``` Per impostazione predefinita, le traduzioni dei singleton avranno ID generati casualmente, a meno che non venga fornito `singletonMapping`. ## Ignora i campi Campi che non vuoi tradurre o inviare all'API di GT, ma che devono comunque essere copiati dal documento sorgente alla traduzione. I campi ignorati vengono rimossi prima della serializzazione (quindi il contenuto non viene mai inviato all'API), quindi ripristinati dal documento sorgente dopo la creazione del documento tradotto. Usa `ignoreFields` per campi come categorie, tag o metadati interni che devono avere lo stesso valore sia nel documento sorgente sia in quello tradotto, ma che non richiedono traduzione: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], ignoreFields: [ { fields: [{ property: '$.category' }] }, // stessa categoria per tutte le lingue { fields: [{ property: '$..linkType' }] }, // metadati interni dei link { fields: [{ property: '$..frequencies.default' }] }, ], }); ``` `property` è un'espressione [JSONPath](https://goessner.net/articles/JsonPath/) che identifica uno o più campi nei documenti. `type` è un parametro facoltativo per filtrare ulteriormente i campi da ignorare in base a tipi specifici. ## Rendere univoci i campi Campi che non vuoi tradurre né inviare all'API di GT, ma che devono comunque essere copiati dal documento sorgente e resi univoci quando un documento tradotto viene creato per la prima volta. Questi campi vengono rimossi prima della serializzazione, quindi ripristinati dal documento sorgente con l'impostazione regionale di destinazione aggiunta. Usa `dedupeFields` per gli slug di Sanity o altri identificatori testuali che devono continuare a basarsi sul valore sorgente, ma risultare univoci per ogni lingua: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], dedupeFields: [ { fields: [{ property: '$.slug', type: 'slug' }] }, // "about" diventa "about-es" ], }); ``` Per i campi slug di Sanity, il plugin aggiorna il valore `current` dell’oggetto slug. Ad esempio, `{ _type: 'slug', current: 'about' }` diventa `{ _type: 'slug', current: 'about-es' }` quando viene creato il documento spagnolo. Se in seguito un editor modifica lo slug tradotto, le future importazioni di traduzione mantengono quel valore modificato. ## Escludere i campi Campi che non devono essere copiati automaticamente nei documenti tradotti. A differenza di `ignoreFields` (che mantiene il valore di origine nel documento tradotto), `skipFields` rimuove completamente i campi corrispondenti dal documento tradotto. Usa `skipFields` per campi come gli URL canonici SEO, i metadati presenti solo nella sorgente o gli slug che gli editor devono impostare manualmente per ogni lingua: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], skipFields: [ { fields: [{ property: '$.slug', type: 'slug' }] }, // gli editor impostano gli slug manualmente per lingua { fields: [{ property: '$.canonicalUrl' }] }, // only relevant on source { documentId: 'homepage', fields: [{ property: '$.debugInfo' }], // source-only debug data }, ], }); ``` ## Opzioni di serializzazione Estendi il comportamento di serializzazione predefinito: ```typescript import { attachGTData, gtPlugin } from 'gt-sanity'; gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], additionalSerializers: { // Serializzatori aggiuntivi per i mark (annotazioni personalizzate) marks: { link: ({ value, children }) => attachGTData(`${children}`, value, 'markDef'), inlineMath: ({ value, children }) => attachGTData(`${children}`, value, 'markDef'), }, }, }); ``` Per i dettagli, consulta la [Guida alla serializzazione](/docs/sanity/guides/serialization). ## Esempio completo ```typescript title="sanity.config.ts" import { defineConfig } from 'sanity'; import { gtPlugin } from 'gt-sanity'; export default defineConfig({ name: 'default', title: 'My Project', projectId: 'your-project-id', dataset: 'production', plugins: [ gtPlugin({ sourceLocale: 'en', locales: ['es', 'fr', 'de', 'ja', 'zh'], languageField: 'language', singletons: ['siteSettings', 'navigation'], translateDocuments: [{ type: 'article' }, { type: 'page' }], ignoreFields: [ { fields: [{ property: '$.publishedAt' }], }, ], dedupeFields: [ { fields: [{ property: '$.slug', type: 'slug' }], }, ], skipFields: [ { fields: [{ property: '$.internalNotes' }], }, ], }), ], schema: { types: schemaTypes, }, }); ``` ## Passaggi successivi * [Guida alla serializzazione](/docs/sanity/guides/serialization) - Regole di serializzazione personalizzate * [Riferimento API](/docs/sanity/api/plugin-config) - Tutte le opzioni di configurazione