# General Translation Changelog: gt-sanity 3.0.0: Plugin di localizzazione nativi per Sanity
URL: https://generaltranslation.com/it/blog/gt-sanity_v3_0_0.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 
Authors: Brian Lou
Published: 2026-07-22

## Panoramica

`gt-sanity` v3 punta ancora di più sul comportamento nativo di Sanity. La localizzazione a livello di campo è ora basata su [`sanity-plugin-internationalized-array`](https://github.com/sanity-io/sanity-plugin-internationalized-array) — il plugin Sanity di riferimento — invece che su una UI di Studio sviluppata da GT, e ora i campi possono essere esclusi dalla traduzione direttamente nello schema usando lo stesso pattern basato su `options` adottato dai plugin standard di localizzazione di Sanity.

L&#39;obiettivo: `gt-sanity` orchestra i plugin già mantenuti dall&#39;ecosistema Sanity (`@sanity/document-internationalization` per il livello documento, `sanity-plugin-internationalized-array` per il livello campo) e vi aggiunge sopra il workflow di traduzione. Il tuo Studio non si comporta mai in modo diverso solo perché è installato GT.

***

## Novità

### La localizzazione a livello di campo si appoggia al plugin di riferimento

Abilitando `fieldLevelLocalization` (o il relativo alias `internationalizedArray`), `sanity-plugin-internationalized-array` viene ora configurato automaticamente in base a `sourceLocale` e `locales`. Il plugin nativo gestisce i tipi di schema `internationalizedArray*` e la UI di modifica di Studio — pulsanti di aggiunta per lingua, etichette delle lingue, azioni sui campi — quindi il comportamento di Studio corrisponde sempre a quello che gli utenti di Sanity già conoscono e gli aggiornamenti del plugin arrivano non appena vengono rilasciati upstream.

```ts title="sanity.config.ts"
gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'fr', 'ja'],
  translateDocuments: [{ type: 'post' }],
  fieldLevelLocalization: { enabled: true },
  translationLevel: 'internationalizedArray',
});
```

Non è cambiato nulla nei dati archiviati: gli elementi sono ancora `{ _key, _type, language, value }`, quindi i contenuti esistenti non richiedono alcuna migrazione. Anche il config ora include opzioni native di passthrough: `defaultLanguages`, `buttonLocations`, `buttonAddAll`, `languageDisplay` e `apiVersion`.

### Usa la tua istanza del plugin

Se registri già `sanity-plugin-internationalized-array` per conto tuo, mantieni la configurazione attuale. Il rilevamento delle traduzioni si basa sulla struttura: legge e scrive i dati archiviati, indipendentemente da chi ha registrato i tipi di schema. Lascia `fieldLevelLocalization` disabilitato, così i tipi vengono registrati una sola volta, e abilita la traduzione a livello di campo per i documenti con `translationLevel`:

```ts title="sanity.config.ts"
plugins: [
  internationalizedArray({
    languages: [
      { id: 'en', title: 'English' },
      { id: 'es', title: 'Spanish' },
    ],
    fieldTypes: ['string'],
  }),
  gtPlugin({
    sourceLocale: 'en',
    locales: ['es'],
    translateDocuments: [{ type: 'post' }],
    translationLevel: 'internationalizedArray',
  }),
],
```

`gt-sanity` riesporta `internationalizedArray`, `internationalizedArrayLanguageFilter` e `isInternationalizedArrayItemType` per l&#39;utilizzo diretto.

### Escludi i campi dalla traduzione nello schema

Contrassegna un campo — o un intero tipo — invece di mantenere un elenco separato nella config del plugin:

```ts
defineField({
  name: 'internalNotes',
  type: 'string',
  options: { gt: { exclude: true } },
});
```

Il serializer rispetta anche le opzioni di esclusione dei plugin standard di localizzazione di Sanity, quindi un unico pattern copre tutto:

* `options.gt.exclude` — il namespace di GT
* `options.documentInternationalization.exclude` — `@sanity/document-internationalization`
* `options.aiAssist.exclude` — `@sanity/assist`

L&#39;esclusione si applica a qualsiasi livello di annidamento e, se viene impostata nelle `options` della definizione di un tipo personalizzato, esclude ogni occorrenza di quel tipo, in linea con la semantica nativa dei plugin &quot;campo o tipo&quot;. `options.gt` è completamente tipizzato tramite declaration merging, e le opzioni del plugin basate su id `ignoreFields` / `skipFields` / `dedupeFields` restano disponibili per regole tra documenti, come la deduplicazione degli slug.

***

## Modifiche non retrocompatibili

### L&#39;interfaccia utente a livello di campo di GT in Studio è stata rimossa

L&#39;export `createInternationalizedArrayTypes` e il tipo `FieldLevelUIComponents` non esistono più, insieme alle opzioni `typePrefix`, `includeCompatibilityTypes` e `components` di `GTFieldLevelLocalizationConfig` — nessuna di esse ha un equivalente nativo. Se si passa un&#39;opzione rimossa, viene registrato un avviso e l&#39;opzione viene ignorata. I dati creati con un `typePrefix` personalizzato non vengono più rilevati; i dati `internationalizedArray*` standard non sono interessati.

### Applicazione più rigorosa di `localize: false`

L&#39;esclusione (le options dello schema e il `localize: false` legacy) ora si applica anche ai campi contenuti nei campi oggetto di primo livello, che in precedenza non venivano filtrati. I contenuti che prima venivano inviati erroneamente per la traduzione non vengono più inviati: se dopo l&#39;aggiornamento un campo sembra &quot;scomparire&quot; dalle traduzioni, verifica che sia contrassegnato per l&#39;esclusione.

***

## Link

* [Quickstart](/docs/integrations/sanity/quickstart)
* [Guida alla configurazione](/docs/integrations/sanity/guides/configuring-sanity)
* [Riferimento API](/docs/integrations/sanity/reference/plugin-configuration)

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
