内容本地化——手动和自动(使用 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,翻译会被删除吗?

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


23 个赞
Content Localization and Automatic Translations for Your Community
I can't find discourse AI as a provider in the discourse translator plugin
Machine-translate messages so users can read without knowing sender's language
Update or Replace Header Locale Selector for New Discourse Header (widgets-end-of-life) – Is Built-in Support Available?
Anonymous user language selector for Discourse
Übersetzung wie hier auf Meta
2 language site
The usage problem after using AI translation
AI translation backfill not working after all settings configured
AI translation backfill not working after all settings configured
Single post/header only partially translated -issue
Language Switcher Problem, Not Translating Posts
配置好 ai 翻译后,帖子已经被自动翻译,但是在帖子顶部和右侧没有显示语言切换按钮
Feature Request: Allow Users to Localize Only Their Own Topics
How to configure ai translate of `Ai translation backfill hourly rate`?
I need help to configure LLM DeepSeek R1 0528 - free for Automatic translations with Discourse AI
I need help to configure LLM DeepSeek R1 0528 - free for Automatic translations with Discourse AI
Not sure how to juggle languages while setting up my francophone community
How to set up Discourse AI for internal-only usage
Single post/header only partially translated -issue
Header Locale Selector
Content Localization and Automatic Translations for Your Community
Images break when the page is auto-translated by a browser translation extension (S3/R2 + CDN is configured correctly)
Bearbeitung von Übersetzen Beiträgen verbessern
Why Is the Discourse AI Translation Icon Not Appearing?
Why are posts in Swedish un-translated to Finnish, default locale?
Discourse AI Translator, Planet Icon Missing
Language switcher and language content
Multilingual user feedback on Automatic Translations
Sharing approaches to using automation to send messages to members
Translate Discourse automatically (without a button)
Help which plugin is in the screenshot
About auto translation
Auto Country Translation
How to Add Automatic Multilingual Translation Interface in Discourse?
3.6.0.beta2: Built-in palette editing, live AI translation progress, and better wiki tracking

是否有针对现有分类批量执行此操作的建议?最坏的情况是,也许通过 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。