Volver

gt-sanity@3.0.0

Brian Lou avatarBrian Lou
gt-sanityv3.0.0sanitycmstranslationmajor

Descripción general

gt-sanity v3 refuerza su apuesta por el comportamiento nativo de Sanity. La localización a nivel de campo ahora está impulsada por sanity-plugin-internationalized-array —el plugin de referencia de Sanity— en lugar de una interfaz de usuario de Studio creada por GT, y los campos ahora pueden excluirse de la traducción directamente en tu schema con el mismo patrón basado en options que usan los plugins estándar de localización de Sanity.

El objetivo: gt-sanity organiza los plugins que el ecosistema de Sanity ya mantiene (@sanity/document-internationalization para el nivel de documento, sanity-plugin-internationalized-array para el nivel de campo) y añade encima el flujo de trabajo de traducción. Tu Studio nunca se comporta de forma distinta por tener GT instalado.


Qué hay de nuevo

La localización a nivel de campo ahora usa el plugin de referencia

Al habilitar fieldLevelLocalization (o su alias internationalizedArray), ahora se configura automáticamente sanity-plugin-internationalized-array a partir de tu sourceLocale y locales. El plugin nativo gestiona los tipos de esquema internationalizedArray* y la interfaz de usuario de edición de Studio —botones para añadir por idioma, etiquetas de idioma y acciones de campo—, por lo que el comportamiento de Studio siempre coincide con lo que los usuarios de Sanity ya conocen, y las actualizaciones del plugin llegan tan pronto como se publican upstream.

gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'fr', 'ja'],
  translateDocuments: [{ type: 'post' }],
  fieldLevelLocalization: { enabled: true },
  translationLevel: 'internationalizedArray',
});

No cambió nada en los datos almacenados: los elementos siguen siendo { _key, _type, language, value }, por lo que el contenido existente no requiere migración. La config también incorporó opciones nativas de passthrough: defaultLanguages, buttonLocations, buttonAddAll, languageDisplay y apiVersion.

Usa tu propia instancia del plugin

Si ya registras sanity-plugin-internationalized-array por tu cuenta, mantén esa configuración. La detección de traducciones se basa en la estructura: lee y escribe los datos almacenados, sin importar quién haya registrado los tipos de esquema. Deja fieldLevelLocalization desactivado para que los tipos se registren solo una vez, y habilita la traducción a nivel de campo en los documentos con 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 reexporta internationalizedArray, internationalizedArrayLanguageFilter e isInternationalizedArrayItemType para usarlos directamente.

Excluye campos de la traducción en tu schema

Marca un campo — o un tipo completo — en el schema, en lugar de mantener una lista paralela en la config del plugin:

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

El serializador también respeta las opciones de exclusión de los plugins estándar de localización de Sanity, por lo que un solo patrón lo cubre todo:

  • options.gt.exclude — el espacio de nombres propio de GT
  • options.documentInternationalization.exclude@sanity/document-internationalization
  • options.aiAssist.exclude@sanity/assist

La exclusión se aplica a cualquier nivel de anidamiento, y configurarla en las options de la definición de un tipo personalizado excluye todas las apariciones de ese tipo, en línea con la semántica nativa de “campo o tipo” de los plugins. options.gt está completamente tipado mediante fusión de declaraciones, y las opciones del plugin ignoreFields / skipFields / dedupeFields basadas en id siguen disponibles para reglas entre documentos, como la deduplicación de slug.


Cambios incompatibles

Se elimina la interfaz de usuario de Studio a nivel de campo de GT

La exportación createInternationalizedArrayTypes y el tipo FieldLevelUIComponents desaparecen, junto con las opciones typePrefix, includeCompatibilityTypes y components de GTFieldLevelLocalizationConfig; ninguna tiene un equivalente nativo. Al pasar una opción eliminada, se registra una advertencia y se ignora. Los datos creados con un typePrefix personalizado ya no se detectan; los datos estándar internationalizedArray* no se ven afectados.

Aplicación más rigurosa de localize: false

La exclusión (las opciones del schema y el localize: false legacy) ahora también se aplica a los subcampos de los campos de objeto de nivel superior, que antes no se filtraban. El contenido que antes se enviaba por error para su traducción deja de enviarse; si parece que un campo "desaparece" de las traducciones después de actualizar, comprueba si tiene una marca de exclusión.


Enlaces