# sanity: Guida rapida a Sanity URL: https://generaltranslation.com/it/docs/sanity/guides/quickstart.mdx --- title: Guida rapida a Sanity description: Integra General Translation con Sanity CMS usando gt-sanity --- **Prerequisiti:** Sanity Studio v5+, React 19+, progetto Sanity esistente **Sono richieste modifiche agli schemi e al frontend.** Ogni tipo di documento che traduci deve includere un campo `language` nel proprio schema — per i dettagli, vedi il [setup del campo language](/docs/sanity#language-field). Le traduzioni vengono archiviate come documenti separati, quindi dovrai anche aggiornare le query del frontend per recuperare la versione corretta nella lingua desiderata. Per alcuni esempi, vedi [eseguire query sul contenuto tradotto](#querying-translated-content) qui sotto. ## Installazione Installa il pacchetto `gt-sanity` nella directory del tuo progetto Sanity Studio: ```bash npm install gt-sanity ``` ```bash yarn add gt-sanity ``` ```bash bun add gt-sanity ``` ```bash pnpm add gt-sanity ``` ## Configurazione ```typescript title="sanity.config.ts" import { defineConfig } from 'sanity' import { gtPlugin } from 'gt-sanity' export default defineConfig({ // ... la tua configurazione esistente plugins: [ gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], // Sostituisci con le tue impostazioni regionali di destinazione translateDocuments: [{ type: 'article' }, { type: 'page' }], // Tipi di documento per cui abilitare le traduzioni }) ] }) ``` Quando viene specificato `translateDocuments`, il plugin aggiunge automaticamente le funzionalità di @sanity/document-internationalization: badge della lingua, un menu di traduzione nella barra degli strumenti del documento e template di documento per lingua. Imposta `showDocumentInternationalization: false` per disattivarlo. Ogni tipo di documento che traduci deve avere un campo `language`: ```typescript title="schema/article.ts" import { defineField, defineType } from 'sanity' export const articleType = defineType({ name: 'article', title: 'Article', type: 'document', fields: [ // ... i tuoi campi esistenti defineField({ name: 'language', type: 'string', readOnly: true, hidden: true, }), ], }) ``` Se hai configurato un `languageField` personalizzato nelle opzioni del plugin, usa quel nome invece di `'language'`. Nella cartella del tuo Studio, crea un file chiamato `populateSecrets.js` con il seguente contenuto: ```javascript title="populateSecrets.js" import { getCliClient } from 'sanity/cli'; const client = getCliClient({ apiVersion: '2026-04-06' }); client.createOrReplace({ // Il `.` in questo _id farà sì che il documento sia privato // anche in un dataset pubblico! _id: 'generaltranslation.secrets', _type: 'generaltranslationSettings', secret: process.env.GT_API_KEY, project: process.env.GT_PROJECT_ID, }); ``` Quindi, ottieni una chiave API di produzione da [dash.generaltranslation.com](https://dash.generaltranslation.com). Esegui lo script con le tue credenziali: ```bash GT_API_KEY=your-api-key GT_PROJECT_ID=your-project-id npx sanity exec populateSecrets.js --with-user-token ``` Verifica che il documento sia stato creato usando Vision Tool nello Studio ed eseguendo la query `*[_id == 'generaltranslation.secrets']`. Nota: se hai più dataset, dovrai farlo in tutti. Se il documento è stato trovato nel tuo dataset o nei tuoi dataset, elimina `populateSecrets.js`. Queste credenziali verranno archiviate nel database di Sanity. Per impostazione predefinita, sono archiviate nel documento `generaltranslation.secrets`, che è privato per impostazione predefinita, anche in un dataset pubblico. Tuttavia, se temi che possano essere esposte agli utenti autenticati del tuo Studio, puoi controllare l'accesso a questo percorso con il [controllo degli accessi basato sui ruoli](https://www.sanity.io/docs/access-control). Il plugin aggiunge automaticamente un'azione **Traduci** a ogni documento che apre una finestra di dialogo. Se vuoi anche una vista in una scheda dedicata, aggiungi il componente `TranslationsTab` alle viste del documento: ```typescript title="sanity.config.ts" import { defineConfig } from 'sanity' import { structureTool } from 'sanity/structure' import { gtPlugin, TranslationsTab } from 'gt-sanity' export default defineConfig({ // ... la tua configurazione plugins: [ structureTool({ structure: (S) => S.list() .title('Contenuto') .items(S.documentTypeListItems()), defaultDocumentNode: (S, { schemaType }) => { return S.document().views([ S.view.form(), S.view .component(TranslationsTab) .title('General Translation') ]) } }), gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'] }) ] }) ``` ## Utilizzo Una volta configurato, puoi tradurre i documenti direttamente da Sanity Studio: 1. Apri un documento qualsiasi nello Studio 2. Fai clic sul pulsante **Traduci** nella barra delle azioni del documento — si aprirà una finestra di dialogo 3. Seleziona le lingue di destinazione 4. Fai clic su **Generate Translations** per inviare i contenuti alla traduzione 5. Per impostazione predefinita, il plugin importerà automaticamente le traduzioni nel documento non appena saranno pronte. 6. Inoltre, i documenti importati verranno analizzati automaticamente per individuare eventuali riferimenti ad altri documenti e aggiornati in modo che puntino alle traduzioni corrette di tali documenti. ## Eseguire query sul contenuto tradotto Il plugin archivia le traduzioni come documenti separati con un campo `language` (configurabile tramite [`languageField`](/docs/sanity/api/plugin-config)). Le query GROQ esistenti per il contenuto di origine continuano a funzionare senza alcuna modifica. Per recuperare il contenuto tradotto, filtra per il campo `language`: Le query esistenti restano invariate — non devi modificare nulla: ```plaintext // Recupera tutti gli articoli (restituisce i documenti nella lingua di origine) *[_type == "article"]{ title, slug, body } ``` Per recuperare i documenti tradotti, aggiungi un filtro `language`: ```plaintext // Recupera gli articoli in spagnolo *[_type == "article" && language == "es"]{ title, slug, body } // Recupera un articolo specifico in una lingua specifica *[_type == "article" && slug.current == "hello-world" && language == "es"][0]{ title, body } // Recupera gli articoli in qualsiasi lingua *[_type == "article"]{ title, slug, body, language } ``` Per impostazione predefinita, nei documenti di origine il campo `language` non è impostato. Per interrogare il contenuto di origine insieme alle traduzioni, puoi filtrare i documenti in cui `language` corrisponde alla tua impostazione regionale di origine oppure non è impostato: `language == "en" || !defined(language)`. ## Passaggi successivi * [Guida alla configurazione](/docs/sanity/guides/configuration) - Personalizza il comportamento del plugin * [Guida alla serializzazione](/docs/sanity/guides/serialization) - Regole di serializzazione personalizzate * [Riferimento API](/docs/sanity/api/plugin-config) - Opzioni di configurazione complete