# 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 класса сериализации