# sanity: Configuración URL: https://generaltranslation.com/es/docs/sanity/guides/configuration.mdx --- title: Configuración description: Configura el plugin gt-sanity para tu proyecto de Sanity --- ## Descripción general La función `gtPlugin` acepta un objeto de configuración para personalizar el comportamiento de la traducción, la configuración regional y la gestión de documentos. ```typescript title="sanity.config.ts" import { gtPlugin } from 'gt-sanity'; export default defineConfig({ plugins: [ gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], // Reemplaza con tus configuraciones regionales de destino languageField: 'language', singletons: ['siteSettings', 'navigation'], }), ], }); ``` ## Configuración básica ### Configuración regional de origen y configuraciones regionales de destino Define tu idioma de origen y las configuraciones regionales de destino: ```typescript gtPlugin({ sourceLocale: 'en', // Idioma de origen del contenido locales: ['es', 'zh', 'ja'], // Idiomas de destino para la traducción }); ``` ### Uso de `defaultLocale` desde `gt.config.json` Si ya tienes un `gt.config.json` (p. ej., por usar `gt-next` o `gt-react`), puedes incorporarlo directamente en la configuración del plugin. El campo `defaultLocale` se acepta como alias de `sourceLocale`: ```typescript import gtConfig from './gt.config.json'; gtPlugin({ ...gtConfig, // { defaultLocale: 'en', locales: ['es', 'zh', 'ja'] } }); ``` Si se proporcionan tanto `sourceLocale` como `defaultLocale`, `sourceLocale` prevalece. ### Campo de idioma Especifica qué campo almacena la configuración regional del documento. El valor predeterminado es `'language'`: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], languageField: 'locale', // Por defecto, los documentos usan el campo 'language'. Aquí usamos 'locale' en su lugar. }); ``` ## Filtrado de documentos ### Traducir tipos de documentos concretos Limita la traducción a tipos de documentos concretos: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], translateDocuments: [{ type: 'page' }, { type: 'post' }], }); ``` ### Traducir documentos específicos Especifica los ID de documentos concretos: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], translateDocuments: [ { documentId: 'homepage' }, { documentId: 'about-page' }, ], }); ``` ## Documentos singleton Los documentos singleton son documentos de Sanity que existen como una única instancia con variantes traducidas. Configura cómo se nombran las versiones traducidas: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], singletons: ['siteSettings', 'navigation', 'footer'], // Lista de IDs de documentos singleton singletonMapping: (docId, locale) => `${docId}-${locale}`, // Función opcional para personalizar los ids de los documentos singleton traducidos }); ``` De forma predeterminada, las traducciones de los singletons tendrán `id` generados aleatoriamente, a menos que se proporcione `singletonMapping`. ## Ignorar campos Campos que no quieres traducir ni enviar a la API de GT, pero que aun así deben copiarse del documento de origen a la traducción. Los campos ignorados se eliminan antes de la serialización (por lo que el contenido nunca se envía a la API) y luego se restauran desde el documento de origen una vez creado el documento traducido. Usa `ignoreFields` para campos como categorías, etiquetas o metadatos internos que deben tener el mismo valor tanto en el documento de origen como en el traducido, pero que no necesitan traducirse: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], ignoreFields: [ { fields: [{ property: '$.category' }] }, // misma categoría en todos los idiomas { fields: [{ property: '$..linkType' }] }, // metadatos internos de enlace { fields: [{ property: '$..frequencies.default' }] }, ], }); ``` `property` es una expresión [JSONPath](https://goessner.net/articles/JsonPath/) que coincide con uno o varios campos de los documentos. `type` es un parámetro opcional para filtrar aún más los campos que se deben ignorar por tipos específicos. ## Deduplicación de campos Campos que no quieres traducir ni enviar a la API de GT, pero que aun así deben copiarse del documento de origen y ser únicos cuando se crea por primera vez un documento traducido. Los campos deduplicados se eliminan antes de la serialización y luego se restauran a partir del documento de origen con la configuración regional de destino añadida. Usa `dedupeFields` para slugs de Sanity u otros identificadores de tipo cadena que deben seguir basándose en el valor de origen, pero ser únicos por idioma: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], dedupeFields: [ { fields: [{ property: '$.slug', type: 'slug' }] }, // "about" pasa a ser "about-es" ], }); ``` En los campos slug de Sanity, el plugin actualiza el valor `current` del objeto slug. Por ejemplo, `{ _type: 'slug', current: 'about' }` pasa a ser `{ _type: 'slug', current: 'about-es' }` cuando se crea el documento en español. Si un editor cambia más tarde el slug traducido, las futuras importaciones de traducción conservan ese valor editado. ## Omitir campos Campos que no deben copiarse automáticamente a los documentos traducidos bajo ningún concepto. A diferencia de `ignoreFields` (que conserva el valor de origen en la traducción), `skipFields` elimina por completo del documento traducido los campos que coincidan. Usa `skipFields` para campos como URL canónicas de SEO, metadatos exclusivos del original o slugs que los editores deben establecer manualmente para cada idioma: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], skipFields: [ { fields: [{ property: '$.slug', type: 'slug' }] }, // los editores configuran los slugs manualmente por idioma { fields: [{ property: '$.canonicalUrl' }] }, // solo relevante en el origen { documentId: 'homepage', fields: [{ property: '$.debugInfo' }], // datos de depuración exclusivos del origen }, ], }); ``` ## Opciones de serialización Amplía el comportamiento de serialización predeterminado: ```typescript 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'), }, }, }); ``` Consulta la [guía de serialización](/docs/sanity/guides/serialization) para más información. ## Ejemplo completo ```typescript title="sanity.config.ts" import { defineConfig } from 'sanity'; import { gtPlugin } from 'gt-sanity'; export default defineConfig({ name: 'default', title: 'My Project', projectId: 'your-project-id', dataset: 'production', plugins: [ gtPlugin({ sourceLocale: 'en', locales: ['es', 'fr', 'de', 'ja', 'zh'], languageField: 'language', singletons: ['siteSettings', 'navigation'], translateDocuments: [{ type: 'article' }, { type: 'page' }], ignoreFields: [ { fields: [{ property: '$.publishedAt' }], }, ], dedupeFields: [ { fields: [{ property: '$.slug', type: 'slug' }], }, ], skipFields: [ { fields: [{ property: '$.internalNotes' }], }, ], }), ], schema: { types: schemaTypes, }, }); ``` ## Próximos pasos * [Guía de serialización](/docs/sanity/guides/serialization) - Reglas de serialización personalizadas * [Referencia de la API](/docs/sanity/api/plugin-config) - Todas las opciones de configuración