# General Translation Changelog: gt-sanity 3.0.0: Plugins de localización nativos para Sanity
URL: https://generaltranslation.com/es/blog/gt-sanity_v3_0_0.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 
Authors: Brian Lou
Published: 2026-07-22

## 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`](https://github.com/sanity-io/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.

```ts title="sanity.config.ts"
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`:

```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` 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:

```ts
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 &quot;desaparece&quot; de las traducciones después de actualizar, comprueba si tiene una marca de exclusión.

***

## Enlaces

* [Quickstart](/docs/integrations/sanity/quickstart)
* [Guía de configuración](/docs/integrations/sanity/guides/configuring-sanity)
* [Referencia de la API](/docs/integrations/sanity/reference/plugin-configuration)

## Sitemap

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