# sanity: 序列化
URL: https://generaltranslation.com/zh/docs/sanity/guides/serialization.mdx
---
title: 序列化
description: 自定义 Sanity 文档在翻译时的序列化方式
---
## 概览
该 plugin 会先将 Sanity 文档转换为 HTML 以便翻译,然后再将翻译后的 HTML 反序列化为 Sanity 格式。你可以针对特定字段类型自定义这一流程。
## 序列化的工作原理
1. **序列化**:`gt-sanity` 将文档转换为 HTML
2. **翻译**:HTML 会被发送到 General Translation API 进行翻译。内容会根据目标区域设置重新编排和格式化。
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: {
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 input plugin,请同时添加
Mux 视频字段类型和 Mux 资源元数据类型:
```typescript
gtPlugin({
sourceLocale: 'en',
locales: ['es', 'zh', 'ja'],
additionalStopTypes: [
'mux.video', // Mux 视频字段
'mux.videoAsset', // Mux 资产元数据
],
});
```
Mux plugin 将视频字段存储为 `mux.video`,并且可能会将引用的
资源元数据公开为 `mux.videoAsset`。同时排除这两种类型可防止 GT 发送
视频资源元数据 (例如播放 ID、文件名和处理状态)
用于翻译。
## 后续步骤
* [设置指南](/docs/sanity/guides/configuration) - plugin 设置选项
* [API 参考](/docs/sanity/api/plugin-config) - 序列化类 API