# sanity: Serialización URL: https://generaltranslation.com/es/docs/sanity/guides/serialization.mdx --- title: Serialización description: Personaliza cómo se serializan los documentos de Sanity para traducirlos --- ## Resumen El plugin convierte documentos de Sanity a HTML para traducirlos y luego deserializa el HTML traducido de vuelta al formato de Sanity. Puedes personalizar este proceso para tipos de campo específicos. ## Cómo funciona la serialización 1. **Serializar**: `gt-sanity` convierte el documento en HTML 2. **Traducir**: el HTML se envía a la API de General Translation para su traducción. El contenido se reorganiza y se reformatea para la configuración regional de destino. 3. **Deserializar**: `gt-sanity` analiza el HTML traducido y lo combina con el documento original ## Comportamiento predeterminado ### Tipos traducidos El serializador procesa estos tipos de forma recursiva: * Cadenas y campos de texto * Bloques de Portable Text (párrafos, títulos, listas, etc.) * Objetos anidados * Matrices ### Tipos omitidos (tipos omitidos) Estos tipos se conservan y no se envían a traducir: ```typescript const defaultStopTypes = [ 'reference', 'crossDatasetReference', 'date', 'datetime', 'file', 'geopoint', 'image', 'number', 'slug', 'url', ]; ``` ## Serializadores personalizados En algunos casos, es posible que algunos campos no se serialicen o deserialicen correctamente de forma predeterminada. En esos casos, puede que tengas que añadir reglas de serialización personalizadas para tipos de bloque específicos. ```typescript title="sanity.config.ts" import { attachGTData, gtPlugin } from 'gt-sanity'; gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], additionalSerializers: { // Serializadores adicionales para marcas (anotaciones personalizadas) marks: { link: ({ value, children }) => attachGTData(`${children}`, value, 'markDef'), inlineMath: ({ value, children }) => attachGTData(`${children}`, value, 'markDef'), }, }, }); ``` En el ejemplo anterior, usamos `attachGTData` para incrustar datos adicionales en el HTML serializado, que luego el deserializador utiliza para facilitar la fusión del HTML traducido de nuevo en el documento original. ### Firma de la función serializadora ```typescript type Serializer = (props: { value: any; // El valor del bloque/campo de Sanity isInline?: boolean; // Si es un elemento en línea children?: string; // Contenido secundario serializado }) => string; // Devuelve una cadena HTML ``` ## Tipos omitidos adicionales Evita que se traduzcan determinados tipos: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], additionalStopTypes: [ 'codeBlock', // Fragmentos de código 'embedCode', // Incrustaciones de terceros 'mathFormula', // Contenido LaTeX/matemático 'technicalId', // Identificadores internos ], }); ``` Por ejemplo, si tu Sanity Studio usa el plugin de entrada de Mux, agrega tanto el tipo de campo de video de Mux como el tipo de metadatos de recursos de Mux: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], additionalStopTypes: [ 'mux.video', // Campo de video Mux 'mux.videoAsset', // Metadatos del recurso Mux ], }); ``` El plugin de Mux almacena los campos de video como `mux.video` y puede exponer los metadatos del recurso referenciado como `mux.videoAsset`. Omitir estos dos tipos evita que GT envíe los metadatos del recurso de video, como los ID de reproducción, los nombres de archivo y el estado de procesamiento, para su traducción. ## Próximos pasos * [Guía de configuración](/docs/sanity/guides/configuration) - Opciones de configuración del plugin * [Referencia de la API](/docs/sanity/api/plugin-config) - APIs de la clase de serialización