# General Translation Integrations: 翻译内容 URL: https://generaltranslation.com/zh/docs/integrations/sanity/guides/translating-content.mdx --- title: 翻译内容 description: 如何通过文档操作、标签页视图或 翻译 页面翻译 Sanity 文档。 related: links: - /docs/integrations/sanity/guides/managing-translations - /docs/integrations/sanity/guides/querying-translations - /docs/integrations/sanity/guides/configuring-sanity --- 使用 General Translation 插件生成文档级或字段级翻译。 文档级翻译会为每个区域设置创建一个文档。字段级翻译会将本地化值添加到源文档中的国际化数组。 ## 翻译单个文档 [#translate-one] 每个文档都有 **翻译** 操作,但翻译工具只会显示在源语言文档上。而在翻译后的文档中,对话框则会显示一条提示消息。 1. 在 Sanity Studio 中打开一个源语言文档。 2. 点击文档操作栏中的 **翻译**。 3. 在 **翻译** 下选择目标区域设置。 4. 点击 **翻译**。 生成翻译后,对话框会在 **翻译状态** 下轮询进度。对于文档级本地化,插件会导入每个区域设置文档、修补其引用并发布它,因为默认启用了自动导入、自动修补和自动发布。你可以分别切换这些行为、在对应的状态行中手动导入某个区域设置,或使用 **全部导入**、**修补引用** 和 **发布翻译**。 对于字段级本地化,导入会将翻译后的值合并到同一文档的 `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 中的译文,而不会再次翻译。 该开关位于 **翻译** 工具中,在文档标签页中显示为 **翻译前保存本地编辑**。默认处于关闭状态。开启时会先要求确认;关闭后立即生效。 该开关适用于从当前 Studio 会话启动的翻译运行,并会在 Studio 重新加载时重置。可通过 [`preserveExistingTranslations`](/docs/integrations/sanity/reference/plugin-configuration#preserve-existing-translations) 设置其初始状态。 支持两种本地化策略。文档级翻译通过 `translation.metadata` 读取,并优先使用草稿而非已发布文档,因此未发布的编辑也会被保留。字段级翻译从源文档的国际化数组中读取。没有现有内容的区域设置会被跳过。 开启此选项后,Sanity 将成为事实来源。Sanity 中的内容会替换 General Translation 为该版本文档保存的所有内容,包括已完成但尚未导入的译文。请先导入所有待处理的译文。 如果插件无法发送现有翻译,翻译运行仍会继续,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