# General Translation Integrations: 翻译内容
URL: https://generaltranslation.com/zh/docs/integrations/sanity/guides/translating-content.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 如何通过文档操作、标签页视图或 翻译 页面翻译 Sanity 文档。

使用 General Translation 插件生成文档级或字段级翻译。

文档级翻译会为每个区域设置创建一个文档。字段级翻译会将本地化值添加到源文档中的国际化数组。

## 翻译单个文档 [#translate-one]

每个文档都有 **翻译** 操作，但翻译工具只会显示在源语言文档上。而在翻译后的文档中，对话框则会显示一条提示消息。

1. 在 Sanity Studio 中打开一个源语言文档。
2. 点击文档操作栏中的 **翻译**。
3. 在 **翻译** 下选择目标区域设置。
4. 点击 **翻译**。

对话框会在 **翻译状态** 下将每个区域设置显示为 **未翻译**、**正在翻译…**、**可导入** 或 **已导入**。当翻译任务尚未完成时，**翻译** 按钮会保持禁用状态。

对于文档级本地化，默认启用自动刷新和自动导入，因此在对话框打开期间完成的翻译会作为草稿导入。默认关闭自动修补和自动发布。你可以分别切换这些行为、在对应的状态行中手动导入某个区域设置，或使用 **全部导入**、**修补引用** 和 **发布翻译**。在你打开对话框时已经完成的翻译不会被自动重新导入，从而保留其 Sanity 文档中的编辑内容。

对于字段级本地化，导入会将翻译后的值合并到同一文档的 `internationalizedArray*` 字段中。在 Sanity 中审校并发布该文档。引用修补和翻译发布控件仅适用于文档级翻译。

## 使用“翻译”标签页 [#translations-tab]

如果你的 Studio 包含 `TranslationsTab`，请在文档中打开 **General Translation** 标签页。它提供与 **翻译** 操作相同的工作流，并会一直显示在文档编辑器中。

 (要添加该标签页，请参阅[配置 Sanity](/docs/integrations/sanity/guides/configuring-sanity#translations-tab)) 。

## 翻译多个文档 [#translate-many]

使用全站范围的**翻译**工具，一次性处理所有可翻译文档。你可以在这里：

* 为所有文档生成翻译 (**全部翻译**) 。
* 导入所有已准备好的翻译 (**全部导入**) 。
* 仅导入尚未导入的翻译 (**导入缺失项**) 。
* 修复翻译后的文档之间的引用 (**修补引用**) 。
* 发布源文档已发布的翻译后的文档 (**发布翻译**) 。
* 将 Sanity 中已有的翻译发送到 General Translation (**保存本地编辑**) 。

 (请参阅[管理翻译](/docs/integrations/sanity/guides/managing-translations)) 。

## 保留对译文的编辑 [#preserve-edits]

编辑者经常会在 General Translation 返回译文后对其进行修改。默认情况下，后续的翻译运行会重新生成这些内容，导致所做的编辑丢失。

启用 **保存本地编辑** 可保留这些编辑。开启此开关后，每次翻译运行都会先将已有 General Translation 源版本的文档中当前位于 Sanity 的现有翻译发送到 General Translation。源文本未发生变化的内容将直接复用 Sanity 中的译文，而不会再次翻译。

该开关位于 **翻译** 工具中，在文档标签页中显示为 **翻译前保存本地编辑**。默认处于关闭状态。开启时会先要求确认；关闭后立即生效。

插件会将当前 Sanity 项目和数据集的这一选择记在浏览器存储中。在后续访问时，它会优先于配置的 [`preserveExistingTranslations`](/docs/integrations/sanity/reference/plugin-configuration#preserve-existing-translations) 默认值。

支持两种本地化策略。文档级翻译通过 `translation.metadata` 读取，并优先使用草稿而非已发布文档，因此未发布的编辑也会被保留。字段级翻译从源文档的国际化数组中读取。没有现有内容的区域设置会被跳过。

<Callout type="warn">
  开启此选项后，Sanity 将成为事实来源。Sanity 中的内容会替换 General Translation 为该版本文档保存的所有内容，包括已完成但尚未导入的译文。请先导入所有待处理的译文。
</Callout>

如果插件无法发送现有翻译，翻译运行仍会继续，Studio 会警告编辑可能会被覆盖。

## 保存本地编辑而不翻译 [#save-local-edits]

使用 **保存本地编辑** 操作，可将 Sanity 中已有的翻译发送到 General Translation，而无需启动翻译运行。该插件会上传所需的源文件，然后将每个区域设置的现有内容保存为该版本的翻译。当文档尚未具有 General Translation 源版本时，请在使用开关前使用此操作。

如果项目此前通过其他方式完成翻译，在项目中采用该插件时，此操作会很有用，可让 General Translation 从你已有的内容开始。

该操作可在 **翻译** 工具和文档标签页中使用。它按需运行，不依赖 **保存本地编辑** 开关。

## 重新生成翻译 [#retranslate]

如需丢弃现有翻译并重新生成，请打开 **全部翻译**，然后勾选 **从头重新翻译**。确认按钮会变为 **全部重新翻译**。

这会丢弃在 Studio 中对翻译后的文档所做的编辑，并跳过此次运行的 **保存本地编辑** 步骤。若要复用现有翻译，请不要勾选此复选框。

此选项仅在 **全部翻译** 对话框中提供。单文档 **翻译** 工作流始终会复用现有翻译，并遵循 **保存本地编辑** 开关。

## 会被翻译的内容 [#what-translated]

该插件会将文档序列化为 HTML，发送该 HTML 进行翻译，然后根据 `translationLevel`，将译后的 HTML 合并到区域设置文档或 internationalized-array 字段中。它会递归处理：

* String 和文本字段。
* Portable Text 块。
* 嵌套对象。
* 数组。

默认情况下，某些字段类型会被保留，不会发送进行翻译，包括引用、日期、文件、图像、数字、布尔值、URL、颜色、代码和地理点。 (请参阅完整的[默认 stop types](/docs/integrations/sanity/reference/plugin-configuration#stop-types)) 。

Slug 字段默认*不会*被停止处理，因此 slug 的 `current` 值会被发送进行翻译。请使用 `dedupeFields` 或 `skipFields` 来控制 slug 的行为。

## 处理引用 [#references]

文档级翻译可以引用其他文档。插件会查找每个被引用文档的翻译，并在存在对应版本时，将引用改写为指向正确的区域设置版本。

启用 **导入后自动修补**，即可在每次导入后运行此操作，或者通过 **修补引用** 按需运行。自动修补默认处于关闭状态。 (请参阅 [管理翻译](/docs/integrations/sanity/guides/managing-translations#patch-references)) 。

## 处理 slug 和复制字段 [#slugs-fields]

有些字段不应直接翻译。请使用字段匹配器来控制它们：

* `dedupeFields` — 复制 source value，并附加区域设置，使其在每个文档中保持唯一，例如将 `about` 变为 `about-es`。通常用于 slug。
* `ignoreFields` — 将 source value 原样复制到每个翻译后的文档中。
* `skipFields` — 从翻译后的文档中完全移除该字段。

 (请参阅[管理翻译](/docs/integrations/sanity/guides/managing-translations#field-behavior)) 。

## Next steps

- /docs/integrations/sanity/guides/managing-translations
- /docs/integrations/sanity/guides/querying-translations
- /docs/integrations/sanity/guides/configuring-sanity

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
