Retour

gt-sanity@3.0.0

Brian Lou avatarBrian Lou
gt-sanityv3.0.0sanitycmstranslationmajor

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 — 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.

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 :

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 :

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'interface Studio « niveau des champs » de GT est supprimée

L'export createInternationalizedArrayTypes et le type FieldLevelUIComponents ont été supprimés, ainsi que les options typePrefix, includeCompatibilityTypes et components de GTFieldLevelLocalizationConfig — aucun n'a d'équivalent natif. Si vous transmettez une option supprimée, un avertissement est consigné et l'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