# General Translation Changelog: gt-sanity 3.0.0: Plugins de localisation natifs pour Sanity
URL: https://generaltranslation.com/fr/blog/gt-sanity_v3_0_0.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 
Authors: Brian Lou
Published: 2026-07-22

## Vue d’ensemble

`gt-sanity` v3 mise encore plus sur le comportement natif de Sanity. La localisation au niveau des champs repose désormais sur [`sanity-plugin-internationalized-array`](https://github.com/sanity-io/sanity-plugin-internationalized-array) — le plugin Sanity de référence — plutôt que sur une interface Studio développée par GT, et les champs peuvent maintenant être exclus de la traduction directement dans votre schéma avec la même approche basée sur `options` que celle qu’utilisent les plugins de localisation Sanity standards.

L’objectif : `gt-sanity` orchestre les plugins déjà maintenus par l’écosystème Sanity (`@sanity/document-internationalization` pour le niveau document, `sanity-plugin-internationalized-array` pour le niveau champ) et y ajoute le workflow de traduction. Votre Studio ne se comporte jamais différemment du seul fait que GT est installé.

***

## Nouveautés

### La localisation au niveau des champs repose sur le plugin de référence

L’activation de `fieldLevelLocalization` (ou de son alias `internationalizedArray`) configure désormais automatiquement `sanity-plugin-internationalized-array` à partir de votre `sourceLocale` et de `locales`. Le plugin natif prend en charge les types de schéma `internationalizedArray*` ainsi que l’interface d’édition de Studio — boutons d’ajout par langue, libellés de langue, actions sur les champs — afin que le comportement de Studio reste toujours conforme à ce que les utilisateurs de Sanity connaissent déjà, et que les mises à jour du plugin soient disponibles dès leur publication en amont.

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

Rien n’a changé concernant les données stockées : les éléments sont toujours `{ _key, _type, language, value }`, donc le contenu existant ne nécessite aucune migration. La config a également gagné des options de passthrough natives : `defaultLanguages`, `buttonLocations`, `buttonAddAll`, `languageDisplay` et `apiVersion`.

### Utilisez votre propre instance de plugin

Si vous enregistrez déjà vous-même `sanity-plugin-internationalized-array`, conservez votre configuration. La détection des traductions repose sur la structure : elle lit et écrit les données stockées, quel que soit l’élément qui a enregistré les types de schéma. Laissez `fieldLevelLocalization` désactivé afin que les types ne soient enregistrés qu’une seule fois, et activez la traduction au niveau des champs pour les documents avec `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` réexporte `internationalizedArray`, `internationalizedArrayLanguageFilter` et `isInternationalizedArrayItemType` afin de permettre leur utilisation directe.

### Exclure des champs de la traduction dans votre schéma

Marquez un champ — ou un type entier — plutôt que de maintenir une liste parallèle dans la config du plugin :

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

Le sérialiseur respecte également les options d’exclusion des plugins de localisation standard de Sanity ; une seule approche couvre donc l’ensemble :

* `options.gt.exclude` — l’espace de noms propre à GT
* `options.documentInternationalization.exclude` — `@sanity/document-internationalization`
* `options.aiAssist.exclude` — `@sanity/assist`

L’exclusion s’applique à n’importe quel niveau d’imbrication, et la définir dans les `options` d’une définition de type personnalisée exclut chaque occurrence de ce type — conformément à la sémantique native des plugins « champ ou type ». `options.gt` est entièrement typé via la fusion de déclarations, et les options de plugin `ignoreFields` / `skipFields` / `dedupeFields` basées sur l’id restent disponibles pour les règles entre documents, comme la déduplication de slug.

***

## Modifications incompatibles

### L&#39;interface Studio « niveau des champs » de GT est supprimée

L&#39;export `createInternationalizedArrayTypes` et le type `FieldLevelUIComponents` ont été supprimés, ainsi que les options `typePrefix`, `includeCompatibilityTypes` et `components` de `GTFieldLevelLocalizationConfig` — aucun n&#39;a d&#39;équivalent natif. Si vous transmettez une option supprimée, un avertissement est consigné et l&#39;option est ignorée. Les données créées avec un `typePrefix` personnalisé ne sont plus détectées ; les données `internationalizedArray*` standard ne sont pas affectées.

### Application plus stricte de `localize: false`

L’exclusion (options du schéma et `localize: false` legacy) s’applique désormais aussi aux champs des objets de premier niveau, qui n’étaient auparavant pas filtrés. Le contenu qui était auparavant envoyé à tort à la traduction ne l’est plus — si un champ semble « disparaître » des traductions après une mise à niveau, vérifiez s’il comporte une marque d’exclusion.

***

## Liens

* [Quickstart](/docs/integrations/sanity/quickstart)
* [Guide de configuration](/docs/integrations/sanity/guides/configuring-sanity)
* [Référence API](/docs/integrations/sanity/reference/plugin-configuration)

## Sitemap

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