# sanity: Сериализация URL: https://generaltranslation.com/ru/docs/sanity/guides/serialization.mdx --- title: Сериализация description: Настройте сериализацию документов Sanity при переводе --- ## Обзор Плагин преобразует документы Sanity в HTML для перевода, а затем преобразует переведённый HTML обратно в формат Sanity. Этот процесс можно настроить для определённых типов полей. ## Как работает сериализация 1. **Сериализация**: `gt-sanity` преобразует документ в HTML 2. **Перевод**: HTML отправляется в API General Translation для перевода. Содержимое перестраивается и переформатируется под целевую локаль. 3. **Десериализация**: `gt-sanity` обрабатывает переведённый HTML и объединяет его с исходным документом ## Поведение по умолчанию ### Переводимые типы Сериализатор рекурсивно обрабатывает следующие типы данных: * Строки и текстовые поля * Блоки Portable Text (абзацы, заголовки, списки и т. д.) * Вложенные объекты * Массивы ### Пропускаемые типы (типы для исключения) Эти типы сохраняются и не отправляются на перевод: ```typescript const defaultStopTypes = [ 'reference', 'crossDatasetReference', 'date', 'datetime', 'file', 'geopoint', 'image', 'number', 'slug', 'url', ]; ``` ## Пользовательские сериализаторы В некоторых случаях отдельные поля по умолчанию могут сериализоваться или десериализоваться некорректно. В таких случаях может потребоваться добавить пользовательские правила сериализации для определённых типов блоков. ```typescript title="sanity.config.ts" import { attachGTData, gtPlugin } from 'gt-sanity'; gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], additionalSerializers: { // Дополнительные сериализаторы для marks (пользовательские аннотации) marks: { link: ({ value, children }) => attachGTData(`${children}`, value, 'markDef'), inlineMath: ({ value, children }) => attachGTData(`${children}`, value, 'markDef'), }, }, }); ``` В приведённом выше примере мы используем `attachGTData`, чтобы встроить дополнительные данные в сериализованный HTML, которые затем десериализатор использует при объединении переведённого HTML с исходным документом. ### Сигнатура функции сериализации ```typescript type Serializer = (props: { value: any; // Значение блока/поля Sanity isInline?: boolean; // Является ли элемент строчным children?: string; // Сериализованное содержимое дочерних элементов }) => string; // Возвращает HTML-строку ``` ## Дополнительные типы для исключения Исключите перевод определённых типов: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], additionalStopTypes: [ 'codeBlock', // Фрагменты кода 'embedCode', // Встраиваемые элементы сторонних сервисов 'mathFormula', // Содержимое LaTeX/математических формул 'technicalId', // Внутренние идентификаторы ], }); ``` Например, если в вашем Sanity Studio используется плагин ввода Mux, добавьте и тип поля видео Mux, и тип метаданных ресурса Mux: ```typescript gtPlugin({ sourceLocale: 'en', locales: ['es', 'zh', 'ja'], additionalStopTypes: [ 'mux.video', // Поле видео Mux 'mux.videoAsset', // Метаданные ресурса Mux ], }); ``` плагин Mux хранит видеополя как `mux.video` и может предоставлять метаданные связанного ассета как `mux.videoAsset`. Исключение обоих типов не позволит GT отправлять на перевод метаданные видеоассета, такие как идентификаторы воспроизведения, имена файлов и статус обработки. ## Что дальше * [Руководство по настройке](/docs/sanity/guides/configuration) - Параметры настройки плагина * [Справочник по API](/docs/sanity/api/plugin-config) - API класса сериализации