博客

WordPress 网站多语言翻译完全指南

Leonardo Losoviz
作者:Leonardo Losoviz ·

翻译 WordPress 网站是一个需要精心规划和执行的复杂过程。我们基于使用插件 Gato AI Translations for Polylang 进行网站翻译的丰富经验,创建了这份全面指南。

本指南将引导您了解所需掌握的一切:从初始准备和配置,到实际翻译过程,再到验证和故障排除。请遵循本指南,确保顺畅的翻译体验。

安装并配置 Polylang

Gato AI Translations for Polylang 需要安装并激活 PolylangPolylang 是管理您的语言和翻译关系的多语言框架。

安装后,您需要配置 Polylang 并添加您的语言:

  1. 前往 WordPress 管理菜单中的 Languages
  2. 添加您的默认语言(现有内容所使用的语言)
  3. 添加您希望翻译成的所有目标语言
配置 Polylang 语言
在 Polylang 设置中添加和配置语言

您必须验证所有已激活的插件是否与 Polylang 兼容。某些插件在多语言环境中可能无法正常工作。

如果发现不兼容的插件,请寻找替代方案、联系开发者获取支持,或考虑它是否真的必不可少。

首先审核并修复您的原始内容

在开始翻译之前,确保您的原始内容处于完美状态至关重要。原始内容中的任何问题都会被复制到所有翻译中,这意味着您需要多次修复同一个问题(每种语言各修复一次)。

内容审核清单:

  1. 检查断链

    • 使用 Broken Link Checker 等插件识别内部和外部断链
    • 翻译前修复所有断链
    • 验证内部链接指向正确的文章/页面
  2. 验证所有图片存在且已优化

    • 检查所有图片是否正确加载
    • 确保图片具有适当的 alt 文本,以满足可访问性和 SEO 要求
    • 验证图片文件大小合理(不要过大)
    • 删除任何占位图片或断开的图片引用
  3. 检查格式和样式

    • 检查文本格式是否一致
    • 验证标题是否结构正确(H1、H2、H3 等)
    • 确保列表、表格和其他结构化内容正确显示
    • 测试自定义样式和 CSS 是否按预期工作
  4. 验证内容结构

    • 确保正确使用 Gutenberg 块或页面构建器元素
    • 检查自定义文章类型和分类法是否设置正确
    • 验证元数据(自定义字段、ACF 字段等)是否完整
  5. 检查占位内容

    • 删除任何"Lorem ipsum"或占位文本
    • 用最终版本替换所有临时内容
    • 确保所有内容均已准备好发布
  6. SEO 注意事项

    • 验证已设置 meta 标题和描述
    • 检查 URL 是否对 SEO 友好
    • 确保标题的使用符合 SEO 结构要求

配置内部链接替换

翻译内容时,内部链接需要更新以指向翻译版本。Gato AI Translations for Polylang 可以自动为您处理此问题

该插件允许您配置应替换哪些类型的内部链接:

  • Custom Posts:指向其他文章、页面、自定义文章类型等的链接
  • Media:指向媒体项目(图片、视频等)的链接
  • Tags:指向标签存档页面的链接
  • Categories:指向分类存档页面的链接
  • Users:指向作者页面的链接

内容中的文章链接会自动从原始内容中提取并替换。对于其他链接类型(media、tags、categories、users),如果您希望替换它们,需要在设置中启用。

配置方法:

  1. 前往设置页面,在 Plugin Configuration > Internal Links Replacement
  2. 仅启用您实际在内容中使用的链接类型
  3. 保存您的设置
用于替换内部链接的设置页面
在插件设置中配置应替换哪些类型的内部链接

验证所有链接使用正确的 URL

要使内部链接替换功能正常工作,内容中的所有链接必须使用正确的 URL 格式。这适用于以下位置的链接:

  • 文章/页面内容(Gutenberg 块、HTML 等)
  • Elementor 小部件和 meta 字段
  • Bricks 构建器元素和 meta 字段
  • 自定义字段和元数据

URL 要求:

  1. URL 必须包含完整域名

    • ✅ 正确:https://www.mysite.com/hello-world/
    • ❌ 错误:/hello-world/(相对 URL)
    • ❌ 错误:hello-world/(无域名或协议)
  2. URL 必须指向当前的别名

    • 如果您更改了文章的别名,请更新所有链接以使用新别名
    • WordPress 需要能够从 URL 中检索文章
    • 重定向的旧别名不适用于链接替换
  3. URL 必须使用正确的域名(无重定向)

    • ✅ 正确:https://www.mysite.com/hello-world/
    • ❌ 错误:https://mysite.com/hello-world/(如果您的站点使用 www)
    • 插件需要精确的域名来正确匹配和替换链接

要修复 URL 中的错误域名,您可以使用 Better Search Replace 等插件直接在数据库中搜索和替换 URL,例如:将 https://mysite.com 替换为 https://www.mysite.com

选择草稿或发布状态

创建翻译时,您需要决定是立即发布还是先保存为草稿以供审核。

默认情况下,翻译保存为草稿。要使翻译立即发布,请前往设置页面,在 Plugin Configuration > General Configuration 下,将 Status when translated 选项设置为 PublishSame as origin post(如果原始文章已发布)。

将“Status when translated”选项设置为“Publish”或“Same as origin post”
将“Status when translated”选项设置为“Publish”或“Same as origin post”

从右到左(RTL)语言支持

如果您要翻译成从右到左书写的语言(如希伯来语、阿拉伯语、波斯语或乌尔都语),您需要确保您的主题正确支持 RTL 布局。

显示 LTR 布局的 Blocksy 主题
显示 RTL 布局的 Blocksy 主题
LTR 和 RTL 布局(Blocksy 主题)

RTL 影响的内容:

RTL 语言不仅仅需要更改文本方向。您的主题需要处理:

  • 布局方向:元素应从右向左流动
  • 文本对齐:文本默认应右对齐
  • 间距调整margin-left 应变为 margin-rightpadding-left 应变为 padding-right
  • 导航:菜单和导航应从右向左流动
  • 表单:输入字段和按钮应正确对齐
  • 图标和图片:可能需要镜像或重新定位

已自动处理的内容:

  • Polylang 自动设置正确的语言方向(dir="rtl" 属性)
  • 内容翻译对 RTL 和 LTR 语言的工作方式完全相同
  • Gato AI Translations 无论文本方向如何都能正确翻译内容
显示 RTL 语言的 Polylang 语言配置
Polylang 自动检测并配置 RTL 语言

您需要检查的内容:

  1. 主题 RTL 支持:使用 RTL 语言测试您的主题,看它是否能正确处理

    • 许多现代主题包含 RTL 样式表
    • 查看主题文档以获取 RTL 支持信息
    • 在主题中查找 rtl.css 或类似文件
  2. 自定义 CSS:检查您添加的任何自定义 CSS

    • 硬编码的 left/right 值可能需要调整
    • 考虑使用逻辑属性(用 margin-inline-start 代替 margin-left
  3. 页面构建器兼容性:如果使用 Elementor、Bricks 或其他页面构建器

    • 检查它们是否支持 RTL 布局
    • 翻译前在 RTL 模式下测试布局

如果您的主题不能很好地支持 RTL,您可能需要切换到兼容 RTL 的主题、添加自定义 RTL CSS,或使用添加 RTL 支持的插件。

识别需要翻译的第三方插件内容

许多 WordPress 插件创建自己的自定义文章类型(CPT)来存储内容(例如:WooCommerce 产品、Events Calendar 活动、LearnDash 课程等)。

翻译前,您需要:

  1. 识别哪些 CPT 包含需要翻译的内容

    • 查看您已激活的插件及其 CPT
    • 确定哪些需要翻译(并非所有都需要)
  2. 确保相关 CPT 和分类法可翻译

    • 前往 Polylang 的 Languages > Settings > Custom post types and Taxonomies
    • 为相关 CPT 和分类法启用翻译
配置要翻译的 CPT 和分类法
配置要翻译的 CPT 和分类法

自动创建 CPT 的翻译条目

如果某个 CPT 依赖 wp_insert_post 方法来创建条目,您可以前往设置页面,在 Plugin Configuration > General Configuration 下,为该 CPT 启用 Automatic creation of translation entries 选项,让插件自动创建翻译条目。

设置“Automatic creation of translation entries”选项
设置“Automatic creation of translation entries”选项

如果某个 CPT 使用的方法不是 wp_insert_post,您需要在翻译之前使用 Polylang 的 UI 手动创建翻译条目。

例如,对于 WooCommerce 产品,您需要先创建翻译条目。请查看翻译第三方自定义文章类型的文档以获取演示视频。

验证您的 SEO 插件是否受支持

SEO 元数据(meta 标题、描述、Open Graph 标签等)对多语言 SEO 至关重要。Gato AI Translations for Polylang 内置对最流行的 SEO 插件的支持,自动翻译所有与 SEO 相关的元数据。

该插件支持 8 个主要 SEO 插件

  1. All in One SEO
  2. Rank Math
  3. SEO Simple Pack
  4. SEOPress
  5. Slim SEO
  6. The SEO Framework
  7. WP Meta SEO
  8. Yoast SEO

如果您使用的 SEO 插件未在上述列表中,您必须指定哪些 meta 键需要同步和翻译,以对应您所使用的 SEO 插件。任何将其元数据存储在 wp_postmeta 表中的插件均受支持。

选择您的 AI 提供商和模型

翻译质量取决于您选择的 AI 服务和模型。

现代 AI 服务(如 ChatGPTClaudeGemini)比传统服务(Google TranslateDeepL)提供更好的翻译效果,因为它们能更好地理解上下文、语气和细微差别;正确保留 HTML 结构和格式;不会错误翻译 URL 或相对链接;在翻译过程中保持写作风格和语态;并能更好地处理技术术语和特定领域语言。

您可以从以下 AI 服务中选择:

  • ChatGPT (OpenAI)
  • Claude (Anthropic)
  • DeepSeek
  • Gemini (Google)
  • Mistral AI
  • OpenRouter(LLM 聚合器,提供对所有主要模型的访问,包括 GrokLlama
  • 自托管 LLM(托管在您自己的服务器上,例如通过 Ollama

我们建议使用最新可用的模型版本(例如,ChatGPT 5.2 优于 5.0),因为较新的模型始终提供更好的翻译质量。

专业提示: 您可以为不同语言配置不同的 AI 服务。例如,对中文使用 DeepSeek(质量出色且非常实惠),对欧洲语言使用 ChatGPT,对复杂的技术内容使用 Claude。这样您可以同时优化质量和成本。

您可以使用 OpenRouter 在新模型发布后立即访问最新的 AI 模型

考虑自定义您的 AI 翻译提示词

默认翻译提示词对大多数内容效果良好,但针对您的特定用途进行自定义可以提高翻译质量。

示例:

旅游博客可以通过添加以下内容来自定义其提示词:

Translate to a natural, flowing, easy-to-read, casual blog-style language. Keep original content structure, meaning, and styling (but do adjust sentence structure and style to be relevant to the target language).
 
Lightly improve boring parts - Add curiosity triggers, light humor, and light slang (as fits the target language), like a human travel blogger would write.

您可以修改默认提示词,或创建多个自定义 AI 提示词并在设置中选择使用哪一个:

编辑 AI 提示词
编辑自定义提示词的系统消息和提示词模板

审核您的 Gutenberg 块

翻译前,您需要识别正在使用的块并确保它们支持翻译。

开箱即用支持的 Gutenberg 块:

  • 所有 WordPress 核心块:Paragraph、Heading、List、Quote、Image、Gallery 等
  • 第三方块:来自 Yoast SEOGenerateBlocksKadenceGreenshift 等插件的块

如果您使用了包含需要翻译的字符串但不受支持的块,您可以:

需要帮助? 我们可以为您集成自定义块。如果您希望由专家处理集成,请查看我们的自定义服务

注意: 有些块无法被翻译

如果您需要替换不受支持的块,您需要找到所有使用该块的文章。请查看查找包含特定块的文章的教程,了解识别特定块使用位置的方法。

审核您的 Elementor 小部件

如果您使用 Elementor 页面构建器,您需要审核正在使用的小部件并确保它们支持翻译。该过程与审核 Gutenberg 块类似,但专门针对 Elementor 小部件。

所有 Elementor 核心小部件均开箱即用受支持

如果您有不受支持的小部件:

审核您的 Bricks 元素

如果您使用 Bricks 页面构建器,您需要审核正在使用的元素并确保它们支持翻译。该过程与审核 Gutenberg 块类似,但专门针对 Bricks 元素。

所有 Bricks 核心元素均开箱即用受支持

如果您有不受支持的元素:

处理包含文字的图片

翻译网站时,一个常见的疏忽是忘记图片可能包含需要翻译的文字

翻译文章时,图片会被复制到翻译版本,图片元数据(标题、alt 文本、说明)会被翻译,但图片中的任何文字仍保持原始语言。

审核图片最简单的方法是将 WordPress 媒体库切换到网格布局——这样您可以一目了然地视觉扫描所有图片,快速发现任何包含错误语言嵌入文字的图片。

网格布局的 WordPress 媒体库
在媒体库中使用网格布局,直观查看所有含嵌入文字的图片

例如,这张图片包含希伯来语文字,不适合用于其他语言。

带有希伯来语文字的泰国地图
图片可能包含翻译时需要考虑的文字

您的选项:

  1. 保留嵌入文字(如果该语言仍能被普遍理解)

    • 适用于文字使用广泛理解的语言或通用符号/数字的情况
    • 无需额外工作
  2. 从图片中删除文字

    • 使用不含嵌入文字的图片
  3. 使用文字叠加层代替嵌入文字

    • 使用不含嵌入文字的图片
    • 叠加文字(使用 Gutenberg 块、Elementor 小部件、Bricks 元素或 CSS),这些文字将被自动翻译
  4. 创建图片的翻译版本

    • 为每种语言创建单独的图片文件
    • 手动替换翻译文章中的图片

处理其他用户数据翻译

Polylang 可以处理 WordPress 用户资料的传记字段,但如果您在自定义字段(通过 ACFMeta Box 或其他方式)中存储了额外的用户数据,您将需要一种特殊的方法。

如果您有需要翻译的用户数据(例如职位、资质、描述等),您需要为每种语言创建单独的字段。

  1. 为每种语言创建单独的字段

    • 使用 ACF 或 Meta Box,创建如下字段:
      • Qualification EN
      • Qualification FR
      • Qualification DE
      • 等等
  2. 更新您的主题以显示正确的字段

    • 修改主题模板以检查当前语言
    • 根据当前激活的语言显示相应字段
    • PHP 代码示例:
      $current_lang = pll_current_language();
      $qualification = get_field("qualification_{$current_lang}", 'user_' . $user_id);
      echo $qualification;
  3. 手动填充字段

    • 翻译内容后,手动更新用户资料字段

跳过不应翻译的术语

某些术语永远不应被翻译——品牌名称、专有名词、技术术语或特定领域专业词汇。

您可以通过在自定义提示词中添加说明来跳过这些术语的翻译,例如:

Do not translate the following types of terms:
- Hotel names (e.g., "Grand Hotel", "Beach Resort")
- Restaurant names
- Brand names
- Technical acronyms (API, SEO, CMS, etc.)
 
Keep these terms exactly as they appear in the original text.

避免跨语言的重复标签

您的内容可能有代表不同语言中相同概念的标签。翻译这些标签时,可能会造成重复或冲突。

例如,如果您有一个正在翻译成英语的中文网站,并且同时有标签 布宜诺斯艾利斯(中文的 Buenos Aires)和英语标签 Buenos Aires,翻译成英语时,两个标签都变成了 buenos-aires。这就造成了重复标签的情况。

跨 2 种语言的重复标签
跨 2 种语言的重复标签

翻译前的修复方法:

  1. 审核您的标签

    • 查看原始语言中的所有标签
    • 识别可能与其他语言标签重复的标签
    • 查找代表相同概念但使用不同语言的标签
  2. 整合标签

    • 选择保留一个语言版本(通常是原始语言)
    • 合并或删除重复标签
    • 更新文章以使用整合后的标签
  3. 翻译前清理

    • 确保您的原始内容仅包含原始语言的标签
    • 从原始内容中删除目标语言的任何标签
    • 这可以防止翻译过程中的冲突

避免跨语言的重复地名

如果您的内容使用混合文字的标题,您可能会看到这种模式:标题以当地地名开始,然后是括号中的相同名称的拉丁字母拼写,然后是该行的其余部分。

典型的原始模式(示例):

  • 原始(例如希伯来语):פוקט (Pouket) - מדריך לאי היפה — 当地名称,然后括号中是英语或国际拼写,然后是副标题。
  • 翻译后(例如英语):Pouket (Pouket) - beautiful island guide

翻译后,标题已经是一种语言和文字,因此模型的字面渲染会重复相同的地名两次(例如 Pouket (Pouket))。

解决方案:精化翻译提示词

自定义您的提示词,使模型在括号内容不包含新信息时规范化冗余的「名称(相同名称)」开头。例如,添加如下说明:

If a heading begins with a place name followed by the same translated name in parentheses, remove the duplicate and keep one natural version. Do not remove the parenthesis if the text inside uses a different script, a different spelling, or includes additional descriptive information.

注意您的标签/分类别名

如果您的标签或分类别名已经是目标语言,您可能会认为无需翻译。

希伯来语的分类具有英语别名
希伯来语的分类具有英语别名

这通常没问题——但 Polylang 免费版(非 Pro 版)有一个需要注意的问题。

使用 Polylang Pro,翻译后的术语可以跨语言重用相同的别名。使用免费版时,WordPress 在全局范围内强制要求别名唯一,因此翻译后的术语别名会自动附加 -2 后缀。

例如:一个希伯来语别名为 travels_and_attractions 的分类,翻译成英语后,会变成 travels_and_attractions-2,而不是保留相同的别名。

如果这影响您的 URL 或 SEO,您需要在翻译后手动修复别名,或升级到 Polylang Pro 以允许跨语言重用别名。

确保您的嵌入内容使用适当的语言

如果您嵌入了第三方内容——如 Google Maps、社交媒体小部件或其他平台的 iframe——请检查该嵌入是否以目标语言显示。

例如,为希伯来语配置的 Google Maps 嵌入,即使您已将页面其余部分翻译成英语,仍会显示希伯来语标签、街道名称和 UI。在这种情况下,您可能需要使用与语言无关的嵌入。

在英语页面上显示希伯来语信息的 Google Maps 嵌入
这个 Google Maps 嵌入仍然显示希伯来语信息——将网站翻译成英语后不适合继续使用

同样的情况也适用于任何生成特定语言嵌入的平台或服务(例如 YouTube 章节、评论小部件、预订表单)。翻译后务必验证每个嵌入内容。

确保原始内容中没有特定语言的样式

为特定语言编写的文章内容——尤其是希伯来语或阿拉伯语等 RTL 语言——可能包含直接应用于 HTML 元素的内联方向和语言属性。当该内容被翻译成其他语言时,这些硬编码的样式会被继承并破坏布局。

RTL 原始内容中的常见问题:

  • <div dir="rtl" lang="he"> — 强制整个部分使用 RTL 方向并将语言标记为希伯来语
  • <p dir="rtl"> — 强制单个段落使用 RTL 对齐
  • <h2 style="text-align: right;"> — 在标题上硬编码右对齐

当此内容被翻译成英语(或任何 LTR 语言)时,文本变成了英语,但布局仍然从右到左渲染——导致标题错位、文本流向颠倒和格式混乱。

翻译前,请审核您的原始内容中的这些属性并将其删除。 让主题和 WordPress 的语言/区域设置在全局范围内控制方向和对齐,而不是将其嵌入到各个内容块中。

处理 Elementor 主题构建器模板

如果您使用 Elementor 的主题构建器创建全局模板(页眉、页脚、单篇文章模板、存档模板等),了解这些模板在翻译过程中的处理方式非常重要。

会被翻译的内容:

  • 菜单:菜单项会被替换为翻译后的菜单版本
  • 动态内容:从文章/页面提取的内容会被翻译(因为源内容已翻译)

不会被翻译的内容:

  • 硬编码文本:直接添加到模板中的文本(不来自动态内容)不会被翻译
  • 小部件文本:标题、段落、按钮等小部件中的文本仍保持原始语言
  • 自定义 HTML:任何自定义 HTML 或代码块保持未翻译状态

示例:

这个 Elementor 页眉模板包含硬编码文本("Our Phone Number:"):

Elementor 页眉模板
Elementor 页眉模板

解决方案:

设计模板时只使用:

  • 菜单(自动替换)
  • 图片(与语言无关)
  • 动态内容(来自翻译后的文章)
  • 避免在模板中直接添加任何硬编码文本、标题或描述

这可确保您网站的全局元素(页眉、页脚等)在所有语言中都能正常工作。

配置 Advanced Custom Fields(ACF)

如果您使用 Advanced Custom Fields(ACF),您需要配置每个字段在翻译过程中的处理方式。ACF 字段可以包含各种类型的内容,每种类型可能需要不同的处理方式。

Gato Translate 部分,ACF 字段可以设置为以下选项之一:

  1. (不执行任何操作):该字段被跳过,不进行翻译或同步

  2. Translate:字段内容翻译成目标语言

    • 适用于:文本字段、文本区域字段、WYSIWYG 字段以及任何包含可翻译文本的字段
  3. Copy:字段值按原样复制到翻译中(不翻译)

    • 适用于:数字、日期、复选框、true/false 字段以及任何不应翻译的字段
  4. Translate Reference:字段引用另一个实体(文章、页面、用户等),引用将更新为指向翻译版本

    • 适用于:Post Object、Page Link、Relationship、User 和 Taxonomy 字段
配置 ACF 字段的翻译选项
为每个 ACF 字段配置翻译选项(Translate、Copy 或 Translate Reference)

字段组不仅可以应用于文章和页面,还可以应用于:

  • 分类
  • 标签
  • 媒体项目
  • 用户
  • 自定义分类法
  • 自定义文章类型

确保也为应用于这些实体的字段组配置翻译设置!

如果您使用的是 Polylang Pro,您还必须禁用其 ACF 翻译功能,以便让 Gato AI Translations 来处理翻译。

配置 Meta Box

如果您使用 Meta Box(另一个流行的自定义字段插件),配置过程与 ACF 类似。Meta Box 字段也需要配置翻译、复制或引用翻译。

Gato Translate 部分,Meta Box 字段可以设置为以下选项之一:

  1. (不执行任何操作):该字段被跳过,不进行翻译或同步
  2. Translate:字段内容被翻译
  3. Copy:字段值按原样复制
  4. Translate Reference:字段引用更新为指向翻译后的实体
配置 Meta Box 字段组的同步/翻译
配置 Meta Box 字段组的同步/翻译

您还必须禁用 Polylang 的 Meta Box 翻译功能,以便让 Gato AI Translations 来处理翻译。

配置自定义 Meta 字段

除了 ACF、Meta Box 和 SEO 插件之外,您的网站可能还有来自以下来源的其他自定义 meta 字段:

  • 自定义代码
  • 其他插件
  • WordPress 自定义字段(基本的 Custom Fields 元框)

这些 meta 字段需要在插件设置中手动配置

识别自定义 meta 键:

  1. 导出您的内容

    • 前往 WordPress 中的 Tools > Export
    • 导出您计划翻译的所有内容类型
    • 这将创建一个包含所有内容和元数据的 XML 文件
  2. 分析导出文件

    • 在文本编辑器中打开 XML 文件
    • 搜索 <wp:postmeta> 标签
    • 列出所有唯一的 meta 键
  3. 过滤掉已知字段

    • 删除 ACF 字段(通常以字段组名称为前缀)
    • 删除 Meta Box 字段
    • 删除 WordPress 核心字段(例如 _edit_last_wp_old_slug_thumbnail_id
    • 删除 SEO 插件字段(如果使用受支持的 SEO 插件)
  4. 识别剩余内容

    • 这些是您的自定义 meta 字段
    • 确定每个字段包含什么以及应如何处理

确定翻译需求:

对于每个自定义 meta 字段,确定:

  • Translate:包含可翻译文本(标题、描述、内容)
  • Copy:包含不应翻译的数据(ID、数字、设置)
  • Translate Reference:包含应指向翻译版本的实体 ID

在插件中配置:

  1. 前往设置中的 Meta Configuration 标签
  2. 选择翻译选项(Translate/Copy/Translate Reference)
  3. 添加自定义 meta 键名称,使用精确匹配或正则表达式模式
配置要翻译的 meta 键
在插件设置中为翻译配置自定义 meta 键

执行翻译流程

所有准备工作完成后,是时候执行翻译了。

首先测试流程

在开始翻译整个网站之前,首先在小范围内测试该流程至关重要。这种方法将节省您的时间,并防止问题被复制到所有内容中。

以下是推荐的测试工作流程:

  1. 从单篇文章和一种语言开始

    • 选择一篇包含各种内容类型(文本、图片、链接等)的代表性文章
    • 将其翻译成您非常了解的一种目标语言
    • 详细验证翻译:检查每个块、每个链接、每张图片和每条元数据
    • 如果发现任何问题(例如,某个块未被翻译、链接未被替换、格式被破坏),在继续之前修复它。如果您现在不处理,同样的问题将被复制到所有语言。
  2. 扩展到更多文章

    • 第一篇翻译完美后,将另外 3-5 篇文章翻译成同一语言
    • 彻底验证每一篇
    • 这有助于您识别任何模式或反复出现的问题
  3. 使用其他语言测试

    • 如果您要翻译成多种语言,再测试一种语言,确保在不同语言对之间一切正常
  4. 然后再进行批量翻译

    • 一旦您确信一切都正常运行,就可以继续翻译网站的其余部分

这种渐进式方法可确保任何配置问题或内容问题都能在早期被发现,在易于修复的阶段得到处理。

翻译顺序

翻译不同内容类型的顺序很重要,尤其是当内容引用其他内容时。

按以下特定顺序翻译内容,以避免引用问题:

  1. Users

    • 用户描述可能包含在块中
  2. Taxonomies(标签/分类)

    • 标签和分类(以及自定义分类法)通常被文章引用,因此它们需要在文章翻译之前存在
  3. Media

    • 媒体项目(图片、视频、文档)被文章作为特色图片或图库图片引用,因此在文章之前翻译它们
  4. 自定义文章类型

    • 翻译文章、页面和其他 CPT
    • 重要:如果一个 CPT 引用另一个 CPT,按逆依赖顺序翻译
    • 例如:如果文章使用可重用块,先翻译可重用块,再翻译文章
  5. 菜单

    • 菜单引用文章、页面和分类,因此最后翻译菜单

决定是否翻译别名

文章和分类别名翻译成目标语言,对于拉丁文字语言(例如法语、德语、西班牙语)通常是理想的:路径保持可读,您可以在 URL 中反映本地化关键词。

对于非拉丁文字——希伯来语、日语、中文等——本地化别名往往会变得一团糟:别扭的音译、非常长的路径段、百分比编码,或难以分享和比较的 URL。许多团队对这些语言保留拉丁文字(或原始语言)别名,并依靠翻译后的标题来显示本地化名称。

将别名翻译视为每种目标语言的策略,而不是整个网站的单一开关:

  1. 将语言分组 — 例如,对拉丁文字目标语言「翻译别名」,对中文、日文、希伯来文等「不翻译别名」
  2. 分批运行翻译 — 启用别名翻译后批量翻译一组,然后关闭别名翻译再运行另一批
  3. 配置每个批次 — 通过 Gato Translate (Custom)(在下方的翻译执行方法中介绍):对于您希望保持别名不变的批次,禁用 Translate custom post slugs?Translate tag and category slugs? 等选项。每次运行针对一种策略(例如一种语言或共享相同规则的语言组),确保设置与预期结果一致。

对于脚本化或可重复的工作流程,WP-CLI 支持每次调用使用 --translate-slugs=true--translate-slugs=false

两阶段翻译

如果您启用了内部链接替换实体引用翻译,您可能需要分两个阶段进行翻译:

第一阶段:仅翻译属性

  1. 将翻译配置为排除内容meta,即仅翻译属性(标题/名称和别名)
  2. 执行翻译
仅选择文章属性(标题、别名)进行翻译
第一阶段:仅翻译属性(标题、别名)以创建翻译条目

执行第一阶段后,翻译后的文章将以其翻译后的 URL 和 ID 创建,允许将内部链接 URL 和实体引用 ID 解析为目标语言。

第二阶段:仅翻译内容和 Meta

  1. 将翻译配置为仅翻译内容meta(即排除属性
  2. 再次执行翻译
仅选择文章内容和 meta 进行翻译
第二阶段:仅翻译内容和 meta 以替换内部链接和实体引用

执行第二阶段后,其余内容和 meta 将被翻译,内部链接 URL 和实体引用 ID 将被替换为翻译版本。

翻译执行方法

选项 1:WordPress 管理后台(批量操作)

  1. 前往内容列表(文章、页面、媒体等)
  2. 选择您想翻译的项目
  3. 从批量操作下拉菜单中选择 Gato Translate
  4. 点击应用
执行 Gato Translate 操作
使用批量操作一次翻译多个项目

替代方案:Gato Translate (Custom)

为了获得更多控制,请使用 Gato Translate (Custom),它允许您覆盖该次特定翻译运行的设置:

执行 Gato Translate (Custom) 批量操作
使用 Gato Translate (Custom) 进行每次翻译的自定义设置

这将打开一个自定义设置页面,您可以在其中为该次翻译运行指定特定选项:

自定义“Gato Translate”操作的执行
为此次特定执行自定义翻译设置

选项 2:WP-CLI(适用于大批量)

对于拥有数百或数千个项目的大型网站,WP-CLI 是一个便捷的替代方案。

您可以通过命令行批量运行翻译,这样您就可以在后台执行翻译,同时做其他工作。

执行“gatotranslate.sh”脚本
执行“gatotranslate.sh”脚本

检查翻译日志

当翻译失败(由于 API 下线、API 积分耗尽等原因)或产生警告时,您将在插件菜单中看到通知徽章:

“Hello World”文章的西班牙语翻译失败,并显示通知徽章
翻译失败时会出现通知徽章

查看翻译日志以了解发生了什么:

  1. 前往插件菜单中的 Logs 菜单项
  2. 查看任何错误或警告
  3. 在继续之前修复所有问题
浏览日志
浏览翻译日志以识别问题
查看单条日志
查看详细日志条目以了解错误

重新运行失败的翻译

每当翻译失败时,您可以仅重新触发该条目和语言的翻译,避免为成功的翻译花费 API 积分。

失败的翻译在 Polylang 编辑图标上以黄色背景高亮显示:

失败翻译的 Polylang 编辑图标上有黄色背景
失败的翻译以黄色背景高亮显示

您可以筛选以仅显示有失败翻译的条目:

筛选以仅显示有失败翻译的条目
筛选以仅显示失败的翻译

要仅重新翻译失败的条目,请使用带有 Process failed translations only 选项的 Gato Translate (Custom) 批量操作:

筛选以仅显示有失败翻译的条目
有失败翻译的条目列表
在“Gato Translate (Custom)”设置页面中选择“Process failed translations only”选项
仅对失败的条目重新运行翻译

验证翻译质量和完整性

翻译内容后,验证翻译是否成功且质量良好至关重要。不要假设一切都完美运行——花时间进行验证。

编辑器验证:

在 WordPress 编辑器中打开已翻译的文章并检查:

  1. 内容翻译

    • 所有文本是否都已翻译?(不仅仅是标题)
    • 所有块/小部件/元素是否都已翻译?
    • 检查 Gutenberg 块、Elementor 小部件或 Bricks 元素
    • 验证格式是否得到保留
  2. 自定义字段

    • ACF 字段是否正确翻译/复制/引用?
    • Meta Box 字段是否正确处理?
    • 自定义 meta 字段是否正确配置?
  3. SEO 元数据

    • 检查 meta 标题是否已翻译
    • 验证 meta 描述是否已翻译
    • 确认 Open Graph 标签是否已翻译
    • 查看其他 SEO 插件字段
  4. 媒体

    • 特色图片是否设置正确?
    • 内容中的图片是否指向翻译版本(如适用)?
    • 图片 alt 文本是否已翻译?
  5. 链接

    • 内部链接是否指向翻译版本?
    • 外部链接是否正确保留?
    • 分类/标签链接是否有效?

前端验证:

在浏览器中查看翻译后的文章并验证:

  1. 视觉外观

    • 页面显示是否正确?
    • 布局是否得到保留?
    • 图片是否正确显示?
    • 样式是否正确?
  2. 模板应用

    • 是否使用了正确的模板?
    • 页眉/页脚是否正确显示?
    • 侧边栏/小部件是否显示?
    • 菜单是否显示翻译版本?
  3. 功能性

    • 所有链接是否有效?
    • 表单是否正常运行?
    • 交互元素是否工作?
    • 导航是否正确?
  4. 特定语言元素

    • 对于 RTL 语言,布局是否正确?
    • 字体是否正确渲染?
    • 文字方向是否正确?

翻译质量:

现代 AI 翻译质量通常很好,但您仍应检查:

  1. 您理解的语言

    • 通读您了解的语言的翻译
    • 检查准确性、语气和风格
    • 验证技术术语是否正确
    • 确保品牌声音得到维护
  2. 您不理解的语言

    • 对于您不会说的语言,考虑聘请母语人士进行审核
    • 这对于与您自己的语言差异很大的语言(例如英语到韩语、中文、阿拉伯语)尤其重要
    • 即使是快速审核也能发现主要问题
    • 对于重要内容,建议进行专业校对
  3. 特定领域内容

    • 技术内容可能需要专家审核
    • 法律/医疗内容应由专业人士审核
    • 营销内容可能需要调整品牌声音

修复「无效内容」块

翻译包含许多标签和属性的大型 HTML 块时,AI 服务有时会返回破坏块输出的响应。

例如,使用 ChatGPT 5.0 mini 翻译包含非常大的 HTML 块的 core/paragraph 块时,如下所示:

<!-- wp:paragraph -->
<p>
  Pédagogie: 
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">★★★★
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">☆</mark></mark></mark></mark></mark></mark></mark><strong><br></strong>Support : 
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">★★★★
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">☆</mark></mark></mark></mark></mark></mark></mark><br>Coûts : 
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">★★★★
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">☆</mark></mark></mark></mark></mark></mark></mark><br>Débouchés : 
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">★★★★
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
  <mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">☆</mark></mark></mark></mark></mark>
</p>
<!-- /wp:paragraph -->

……响应可能会引入原始内容中不存在的额外 <mark> 标签:

<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">★★
+<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">
<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color">

在 WordPress 编辑器中编辑该文章时,该块可能无法渲染,并显示消息「Block contains unexpected or invalid content」:

显示无效内容消息的损坏块
显示无效内容消息的损坏块

点击 Attempt recovery 很可能会解决该问题。

如果可能,请避免使用 HTML 块,因为整个 HTML 块必须作为单个单元进行翻译。

改用带有属性的自定义块,这样可以识别、提取和翻译可翻译字符串,而不会破坏任何格式。

排查损坏数据错误

有时,由于您的内容包含损坏或陈旧的数据,翻译过程中可能会出现错误。这通常发生在以下情况:

  • 文章类型以前支持某个功能(如父文章),但现在不再支持
  • 内容引用了不再存在的实体
  • 迁移或插件变更导致的数据库不一致
  • 自定义字段中的孤立关系

理解错误:

当您在日志中看到如下错误时:

2025-10-25T03:40:38+00:00 Error [Query "create-missing-translation-media"] Execution with errors: 🔴 Object with ID '26061' (of type 'GenericCustomPost') cannot be loaded. Please check if referencing this ID is stale data (i.e. still stored on the WordPress database, but pointing to a non-existing object) and, if so, remove it or fix it.

这意味着:

  • 内容引用了 ID 为 26061 的实体(文章、页面、媒体等)
  • 该实体在数据库中不再存在
  • 插件无法解析引用,因此无法翻译

修复方法:

方法 1:WordPress 编辑器(最简单)

  1. 打开翻译失败的文章/项目
  2. 识别损坏的引用(检查自定义字段、关系等)
  3. 删除或修复引用
  4. 保存文章
  5. 再次尝试翻译

方法 2:数据库清理

如果无法通过编辑器修复:

  1. 识别包含错误引用的字段
  2. 使用数据库工具或插件删除陈旧数据
  3. 注意——在对数据库进行更改之前务必备份

方法 3:Gato GraphQL(高级)

由于 Gato AI Translations for Polylang 在内部使用 Gato GraphQL,您可以运行 GraphQL Query 以编程方式修复损坏的数据:

  1. 首先,使用 GraphQL Query 检索有问题的项目的 ID。

  2. 然后使用 mutation 修复问题。例如,要从媒体项目中删除父引用:

mutation {
  updateMediaItem( input: { id: 26066, customPostID: null } ) {
    status
    errors {
      __typename
      ...on GenericErrorPayload {
        message
      }
    }
  }
}

如果无法修复:

如果损坏的数据无法清理,您可能需要:

  • 从头重新创建文章/项目
  • 导出内容、清理后重新导入
  • 联系支持团队以获得复杂案例的协助

将翻译后的条目集成到配置中

翻译内容后,新创建的翻译条目可能需要集成到网站配置中。

更新 ACF 字段组

ACF 字段组可以分配给特定的文章、页面、分类、标签或其他实体。翻译内容时,翻译版本也可能需要分配给相同的字段组。

翻译后,更新您的 ACF 字段组分配以包含翻译版本:

  1. 前往 ACF 插件菜单中的 Field Groups 菜单项
  2. 编辑适用于特定实体的字段组
  3. Location Rules 中,添加翻译版本
  4. 保存字段组

示例:

一个字段组适用于原始语言中的特定文章 "Hello World"

添加翻译前的 ACF 字段组
添加翻译前的 ACF 字段组——仅适用于原始文章

翻译文章后,翻译版本(西班牙语的 "Hola Mundo" 和中文的 "你好世界")也必须分配给相同的字段组:

添加翻译后的 ACF 字段组
添加翻译后的 ACF 字段组——适用于所有语言版本

完成!

您已完成翻译流程。恭喜! 👏

结语

这份全面指南应该能帮助您成功翻译您的 WordPress 网站。如果您需要更多信息,请查阅 Gato AI Translations for Polylang 文档


了解接下来会推出什么

订阅我们的新闻通讯:当我们发布新版本、推出新插件或有消息要分享时,第一时间通知你。