内容本地化——手动和自动(使用 Discourse AI)

在本主题中,我们将带您了解内容本地化功能以及如何启用它们。这些功能分为两部分:Discourse 默认提供的功能;以及用于自动翻译的 Discourse AI。

:warning: 为了快速访问相关章节,请使用 wiki 标题 :backhand_index_pointing_right:t2:

本地化您的社区内容

Discourse 的更新版本 (3.5.0.beta7-dev) 为您提供了多个本地化功能,您可以在以下位置进行配置:

  • <your-site-url>/admin/site_settings/category/content_localization
站点设置中的新内容本地化 📸

获取用户信息

首先,了解您的社区信息非常重要。以下数据浏览器查询可以帮助您了解有多少用户可能在 /my/preferences/interface 中设置了他们的语言环境。


SELECT locale, count(*) as count

FROM users

WHERE (locale IS NOT null AND locale <> '')

GROUP BY locale

ORDER BY count DESC
数据浏览器示例结果

设置社区支持的语言环境

根据以上信息,我们现在更清楚您的社区应该支持哪些语言环境。

<your-site-url>/admin/site_settings/category/content_localization 中,您可以选择要支持的语言环境。

  • 启用内容本地化 - 启用此功能,将用户编写的原始内容替换为本地化内容。请继续阅读,了解自动和手动本地化模式。

  • 内容本地化支持的语言环境 - 您的网站支持的语言列表

  • 内容本地化语言切换器 - 将在下文介绍

网站设置中的语言环境列表 📸

启用后续设置“内容本地化语言切换器”后,您还可以通过在支持的语言环境列表中显示您选择的语言列表,使未登录用户更容易访问您的社区:

语言切换器位于页面右上角

查看本地化内容

meta.discourse.org 上的本地化欢迎主题

对于本地化内容的查看者(所有网站访问者),他们可以将鼠标悬停在帖子日期旁边的指示器上,以查看帖子的原始语言。此指示器仅在帖子语言不是他们的语言时才会显示。

如果用户只想查看原始内容,他们可以使用主题时间线上方的切换按钮来禁用整个网站的本地化。

使用 Discourse AI 进行自动翻译 :sparkles:

Discourse AI 是本地化功能不可或缺的动力,它免去了手动翻译的需要。

作为管理员,您需要前往我们全新的 AI 功能版块查看翻译功能。

Discourse AI 功能在管理员设置中📸

向下滚动到 /admin/plugins/discourse-ai/ai-features

以下是一些重要的设置和建议:

  • “AI 翻译回填每小时速率” - 此设置默认值为“0”。警告:如果此值为 0,则不会开始自动翻译。 假设速率为 50,则您的网站每小时将翻译 50 篇文章、50 个主题和 50 个分类,翻译语言为您在“内容本地化支持的语言”中设置的语言。建议在开始时将此值设置得较低。

  • “AI 翻译回填最大年龄天数” - 默认值为“5”。这意味着超过 5 天的主题和文章将不会被翻译。您可以将其值增加到较大的值以翻译所有主题和文章。

  • “AI 翻译回填限制为公共内容” - 默认值为“true”。此设置可防止将私信和私有分类中的内容发送到本地化管理 (LLM)。设置为“false”时,群组私信和私有分类将包含在翻译中。个人之间的私信将不会被翻译。

  • AI 翻译最大帖子长度 - 默认值为 10000。这是一项安全措施,防止翻译长度超过一定限制的帖子。

  • AI 翻译最大词元数倍增器 - 默认值为 1.0。我们通常会限制每次翻译使用的词元数上限(discourse/plugins/discourse-ai/lib/translation/base_translator.rb at f74a4385a0dc9dcd645e08386c08063d7723b65c · discourse/discourse · GitHub Gemini Pro 3 等思维/推理语言学习模型进行翻译时,您需要将此倍增器增加到大约 3.0

  • AI 翻译帖子原始译者角色(以及其他角色) - 在更正式的社区中,管理员可以选择创建自己的角色。这样,您可以设置更符合您偏好的语言或词汇的提示语。

您可以参考 AI bot - Personas 了解如何配置合适的角色并针对每个功能微调提示语。

翻译进度

您可以在 /admin/plugins/discourse-ai/ai-translations 的“翻译进度”图表中找到更多关于自动翻译进度的信息。

如果满足以下条件,则会显示此图表:

  • 所有译员角色都拥有有效的语言学模型 (LLM)

  • discourse ai enabled :check_mark:

  • ai translation enabled :check_mark:

  • content localization supported locales 已填写

  • ai translation backfill max age days 大于 0

  • ai translation backfill hourly rate 大于 0

手动本地化

由于本地化是 Discourse 的核心功能,我们允许您在自动翻译出现问题时手动填写和编辑本地化内容。 Discourse AI 暂不可用。

默认情况下,管理员和版主拥有编辑本地化的权限。

站点设置中允许本地化的组 📸

内容本地化的管理员站点设置

目前,我们支持文章内容、主题标题、分类名称和分类描述本地化。标签本地化暂不支持,但将在不久的将来推出。以下后续章节将向您展示其工作原理。

分类本地化

本地化分类会在以下区域显示,分类名称和描述均已本地化:

分类本地化位置 📸
  1. 首页、侧边栏和分类下拉菜单
  1. 分类页面
  1. 包含子分类的特定分类

作为管理员,您应该可以像往常一样访问类别设置,并在左侧找到新的“本地化”导航项。

在类别设置中编辑类别本地化 📸

主题和文章本地化

从上方“分类本地化”部分的截图中,您可能已经注意到主题标题和摘要都已本地化。

有一些前提设置:

  • 确保您的用户属于“允许内容本地化的用户组”

  • 在站点设置中为“文章菜单”添加“addTranslation”选项。这样,对于属于“允许内容本地化的用户组”的用户,文章菜单中就会显示“:globe_with_meridians:”图标。

  • “允许作者本地化的内容本地化”选项默认启用,允许文章作者使用与上述相同的文章菜单来本地化自己的内容。

3 网站设置 📸

:backhand_index_pointing_down:t2:

再次强调,可本地化的语言列表位于上面提到的“内容本地化支持的区域设置”中。

编辑本地化文章

如果用户正在查看本地化文章并想要编辑该文章,系统会弹出一个对话框,询问他们想要编辑哪个版本:

选择后,相应的编辑器将会出现。

删除特定语言环境的帖子翻译

如果您已正确按照上述关于“帖子菜单”设置的说明操作,并且您属于“允许内容本地化”组,则应该可以执行以下操作:

以管理员身份删除本地化|视频

常见问题解答

我已经设置好了,但自动翻译仍然无法正常工作

请确认您是否已完成以下设置:

  • “内容本地化支持的区域”至少包含一种语言

  • “内容本地化已启用”已勾选

  • “允许用户区域设置”已勾选

  • “从 Cookie 设置区域设置”已勾选

  • “AI 翻译已启用”已勾选

  • “AI 翻译最大保留天数”不为 0

  • “AI 翻译回填每小时费率”大于 12

  • 您必须为每个翻译角色设置一个可用的本地化语言管理器 (LLM)。

如果以上方法均无效,您可以启用 SiteSetting.ai_translation_verbose_logs

所有帖子都会被翻译吗?

如果 AI 翻译回填限制为公共内容 已勾选,则除机器人(用户 ID < 0)发布的帖子外,所有公共分类下的帖子都将被翻译。

自动翻译是保存的,还是每次有人查看主题时都会发送到 LLM?

翻译会被保存,每个帖子每种语言只发送一次,并且翻译会被重复使用。

如果我的论坛支持英语和日语(通过 内容本地化支持的语言),而有人用西班牙语发帖,他们的帖子会被翻译吗?
是的。所有主题和帖子都会被翻译成英语和日语,无论其写作语言是什么。

如果原始帖子被编辑,是否会被重新翻译?

是的——每天最多两次。当帖子被编辑后,会在 5 分钟后(或 SiteSetting.editing_grace_period 指定的宽限期)自动发送进行重新翻译,以应对用户擅自编辑的情况。已授权加入“允许内容本地化组”的用户可以选择立即发送帖子进行重新翻译。

如果我更改 Persona 或 LLM,翻译会被删除吗?

不会,除非使用帖子菜单项或翻译编辑器明确删除,否则翻译通常会在设置更改后保留。


22 个赞

是否有针对现有分类批量执行此操作的建议?最坏的情况是,也许通过 API

2 个赞

嗯,好问题。我会确保 API 文档得到更新,以包含类别更新端点。:memo:

4 个赞

是否会支持按语言划分的版主?我正在考虑元(meta)——我可能会在那里志愿检查特定语言的帖子并手动更新它们。特别是文档,可能需要一些人工润色。但你说只有版主才能做到,而我可能永远也做不到。

2 个赞

嗯,好建议。我认为可以做到,但我们需要考虑如何设置的细节。

2 个赞

如何访问它?您能提供一个命令吗?

Sidekiq 是否有任何关联的任务?是否可以手动触发它?

1 个赞
2 个赞

在 Moin 上面的帖子中补充一下,一旦进入控制台,只需输入 SiteSetting. ai_translation_backfill_hourly_rate 即可。该作业每五分钟运行一次,并相应地进行速率限制。

2 个赞

文档中现在提供本地化了。谢谢 @nat

3 个赞

太棒了,团队棒极了!我正在测试,并将分享我的想法和整体体验。

我们希望列表中有世界语;这可以“简单地”添加,还是需要先将其内置到 discourse-languages 中?

哇,你真快——我正要在这里报告。 :laughing:

是的,差不多。我们希望获得完整的本地化体验,其中控件(按钮、标签等)通过 Crowdin(参见 https://meta.discourse.org/c/dev/translations/27)得到正确且充分的翻译(70% 就很好了),这样我们就可以为该语言提供支持。

1 个赞

内容本地化是否适用于文档类别?在我看来,即使我本地化了索引主题,侧边栏内容也没有得到翻译。

我还注意到一个奇怪的行为。当我看到用原始语言显示的本地化主题并刷新时,它会切换到本地化版本。我必须手动再次切换到原始版本。

2 个赞

哦,太棒了!是的,它还没有起作用,但 @nat 会跟踪这件事!

我想知道这是否会促使我们为侧边栏文档链接提出更好的抽象/数据模型。

1 个赞

是的,没错——Discourse 中有很多地方需要显式翻译,所以我会在发现时记录下来。最近,我们也本地化了主题标题的通知。这是一个我创建的功能主题示例 - https://meta.discourse.org/t/show-translated-user-bios/378908。

我将创建一个新主题并@你,以确保我们涵盖侧边栏的所有内容。

编辑:@tvavrda 在这里已涵盖 - https://meta.discourse.org/t/translate-sidebar-documentation-links/379540。请查看并判断是否合理。

你说的“再次切换”是什么意思?

下次发生这种情况时,你介意分享一个视频录像(包括地址栏)吗?:folded_hands:t2: 如果内容不适合公开,请随时私信我。另外,你当时是登录状态吗?从技术上讲,这些东西是通过 cookie 来跟踪的,所以对我来说有点令人费解。

1 个赞

已发送视频。

另一个观察结果——我无法看到已翻译内容的差异,对吗?如果内容有更新,这可能会很有用。虽然不是非常重要,但我认为这有道理。

还有另一个——主题下的反向链接没有显示本地化主题名称。

还有一个问题:本地化类别设置中的类别描述有什么意义?类别描述应该来自“关于”主题的本地化版本,不是吗?本地化版本不支持 Markdown,所以我无法使用我想要的链接。

1 个赞

嗯……旧的 GitHub - discourse/discourse-docs-sidebar 组件实际上尊重本地化 :slight_smile: 我暂时切换到了那个组件。

是的,这目前也不支持,而且将是一项艰巨的任务。

当帖子版本发生变化时,我们会有一个特殊颜色的指示器(类似于旁边的帖子编辑指示器),表示翻译可能已过时。

1 个赞

我还看到固定主题摘要中的未翻译内容。因此,我看到的主题列表是翻译后的语言,但固定主题的摘要显示的是原始语言。

1 个赞

我们可以手动进行或修复翻译,但能否手动触发翻译构建?有点像按需工作。

我想的是,我允许翻译一年以上的主题。但如果这一年是从当前日期开始计算的,那么这个限制会一直朝着已翻译的内容移动。但最大的需求是那些有价值的旧内容,我希望能够快速地触达它们,而无需进行缓慢的大批量操作。

我想知道,有人在使用翻译功能后有成本数据吗?我们的网站已经运行了一段时间了,虽然我希望能够翻译整个网站,但成本确实是一个问题。所以,如果有人能根据你们的经验提供一些大致的成本数据,例如 1000 篇帖子花费 1 美元,这将极大地帮助我们估算成本。

内容本地化是一次性完成然后存储起来,而不是按需进行的吗?如果是这样,有什么能阻止我在我的桌面上启动 Ollama 和一些开源 LLM,比如 Llama 3 或 Deepseek 3,然后让它运行直到完成吗?

编辑:我猜这可能有助于降低初始翻译成本,但对于新帖子来说则不然,除非决定永久运行本地 LLM。