Volver

gt-sanity@2.1.0

Brian Lou avatarBrian Lou
gt-sanityv2.1.0sanitycmstranslationminor

Descripción general

gt-sanity v2.1 añade localización a nivel de campo: en lugar de crear un documento independiente por configuración regional, ahora puedes almacenar el valor de cada idioma dentro del mismo documento mediante listas internacionalizadas. El plugin genera los tipos de esquema por ti, incluye una interfaz de edición inline para cada configuración regional y canaliza la traducción a través del mismo flujo de trabajo de GT que ya usas; los valores traducidos se reintegran directamente en el documento fuente.

La estructura de datos coincide con sanity-plugin-internationalized-array ([{ _key, _type, language, value }]), por lo que el contenido existente de listas internacionalizadas funciona sin necesidad de migración.


Novedades

Localización a nivel de campo (lista internacionalizada)

La traducción a nivel de documento sigue siendo la opción predeterminada: cada configuración regional tiene su propio documento, vinculado mediante @sanity/document-internationalization. Ese modelo encaja con documentos en los que todo varía según el idioma.

El nuevo modelo a nivel de campo mantiene un único documento y localiza campos individuales en el mismo documento:

{
  _id: 'post-123',
  _type: 'post',
  title: [
    { _key: 'x1', _type: 'internationalizedArrayStringValue', language: 'en', value: 'Hello' },
    { _key: 'x2', _type: 'internationalizedArrayStringValue', language: 'es', value: 'Hola' },
  ],
}

Actívala con la nueva opción internationalizedArray (o su alias descriptivo, fieldLevelLocalization):

import { defineConfig } from 'sanity';
import { gtPlugin } from 'gt-sanity';

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

Tipos de esquema generados

Cuando está habilitado, el plugin genera tipos de esquema internationalizedArray* (por ejemplo, internationalizedArrayString, internationalizedArrayText) a partir de sourceLocale / locales, los mismos que ya pasas a gtPlugin; la configuración regional se define una sola vez. Úsalos en tus esquemas como cualquier otro tipo:

defineField({
  name: 'title',
  type: 'internationalizedArrayString',
});

fieldTypes controla qué tipos se generan. Su valor predeterminado es ['string', 'text'], admite 'block' para Portable Text y definiciones de objetos personalizadas para formas de valor arbitrarias:

internationalizedArray: {
  enabled: true,
  fieldTypes: [
    'string',
    'text',
    'block',
    { name: 'seo', type: 'seoFields' }, // genera internationalizedArraySeo
  ],
},

También puedes personalizar los nombres de tipo generados con typePrefix (los alias de compatibilidad con los nombres estándar internationalizedArray* se conservan de forma predeterminada) y las etiquetas de las configuraciones regionales que se muestran en Studio con languageTitles o getLanguageTitle.

Interfaz de edición inline por configuración regional

Los tipos generados incluyen un campo de entrada de Studio diseñado específicamente para esto: cada idioma se muestra como un editor inline con etiqueta (sin filas de objetos contraídas ni cuadros de diálogo de edición), con botones para agregar y quitar por configuración regional. El idioma de origen no se puede quitar.

Si prefieres usar tu propia interfaz, la opción components te permite reemplazar las ranuras input, item y field, o pasar false para volver al renderizado predeterminado de Sanity. La traducción no se ve afectada en ningún caso, ya que funciona sobre los datos almacenados y no sobre los componentes.

translationLevel y modo mixto

La generación de esquemas y el enrutamiento de la traducción son independientes: habilitar internationalizedArray solo añade tipos de campo editables. La nueva opción translationLevel controla cómo se traducen los documentos que coinciden:

  • 'document' (predeterminado) — traducción del documento completo con documentos por configuración regional, sin cambios desde la v2.0.
  • 'internationalizedArray' — todos los documentos que coinciden se localizan en el mismo documento mediante listas internacionalizadas.
  • 'mixed' — los tipos de documento enumerados en fieldLevelDocuments usan la estrategia de array; todo lo demás sigue siendo a nivel de documento.
gtPlugin({
  sourceLocale: 'en',
  locales: ['es', 'fr'],
  translateDocuments: [{ type: 'post' }, { type: 'siteSettings' }],
  internationalizedArray: { enabled: true },
  translationLevel: 'mixed',
  fieldLevelDocuments: [{ type: 'siteSettings' }], // localizado en el mismo documento
});

Los tipos de documento localizados en el mismo documento se excluyen automáticamente de @sanity/document-internationalization, por lo que no reciben insignias de idioma ni plantillas de documentos para cada configuración regional.

Importación en el mismo documento

Los documentos a nivel de campo pasan por el mismo flujo de trabajo de GT que ya usas. Al importarlos, los valores traducidos se reincorporan al mismo documento: solo se actualiza la configuración regional de destino, y todos los demás idiomas —incluidas las ediciones realizadas mientras la traducción estaba en curso— quedan intactos.

Los estados de traducción en Studio ahora también se mantienen precisos después de las importaciones en el mismo documento y al recargar la página, en lugar de mostrar las traducciones completadas como "sin iniciar".


Enlaces