内容本地化——使用 Discourse AI 进行手动和自动处理

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

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

本地化您社区的内容

Discourse 为您提供访问以下配置可用的多个本地化功能:

  • <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
数据浏览器的示例结果

您的用户来自哪里

如果您启用了 Browser pageview events enabled(站点设置),则更好的解决方案是此查询,它可以告诉您用户来自哪个国家:

SELECT
  e.country_code AS country_code,
  COUNT(*) AS pageviews
FROM browser_pageview_events e
WHERE e.country_code IS NOT NULL
  AND e.country_code <> ''
GROUP BY e.country_code
ORDER BY pageviews DESC
示例结果

设置

有了上述信息,您现在可以更好地了解您的社区应该支持哪些语言环境。

<your-site-url>/admin/site_settings/category/content_localization 中,开始进行设置。

  • Content localization enabled - 开启将原始用户书面内容替换为本地化内容的功能。继续阅读以了解自动(AI)和手动(人工)本地化模式。
  • Content localization supported locales - 您的站点支持的语言列表
  • Content localization crawler param - 在下文的爬虫部分介绍
  • Content localization language switcher - 在下文介绍
站点设置中的语言环境列表 📸

语言切换器

启用后续设置 Content localization language switcher 还可以让未登录的用户更容易访问您的社区,通过显示您在支持的语言环境列表中选择的支持语言列表:

页面右上角的语言切换器

查看本地化内容

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

对于我们的多语言登录查看者,他们可以表示他们理解多种语言,因此这些语言中的内容将不会被翻译。

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

Discourse AI 对于本地化功能至关重要,并消除了手动翻译的需要。

作为管理员,您需要前往 Discourse AI 中专门用于翻译的区域。该专用区域涵盖:

  • 翻译进度
  • AI 设置
  • 应用语言设置

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

  • AI translation backfill hourly rate - 此设置默认为 50 - 您的站点每小时将翻译 50 篇帖子、50 个主题、50 个分类、50 个标签到您已在 Content localization supported locales 中设置的语言环境。刚开始时请保持此数值较低。
  • AI translation category scope - 默认为 Public categories。您可以将其更改为所有分类或特定选择。
  • AI translation personal messagesAI translation include bot content 不言自明。
  • AI translation backfill start date - 此值默认为空。如果您“今天”启用 AI 翻译功能,日期将自动设置为“今天 - 5 天”
  • AI translation post raw translator agent(和其他代理)- 在更正式的社区中,管理员可以选择创建自己的代理。这允许您设置一个更适合您偏好的语言或词汇的提示。

您可以参考 AI bot - Agents 了解如何为每个功能配置合适的代理并微调提示。

手动本地化

由于本地化是 Discourse 的核心功能,因此我们提供在 Discourse AI 自动翻译不可用时手动填写和编辑本地化的能力。

默认情况下,管理员和版主被设置为可以编辑本地化。

目前,我们有帖子内容、主题标题、分类名称、分类描述、标签名称、标签描述和侧边栏本地化。以下各节将向您展示它们的工作原理。

分类本地化

本地化分类在以下区域可见,分类名称和描述均被本地化:

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

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

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

主题和帖子本地化

从上述分类本地化的截图中,您可能已经注意到主题标题和摘要被本地化。

有一些先决条件设置

  • 确保您的用户在 content localization allowed groups
  • 当开启 Content localization enabled 时,addTranslation 按钮会自动添加到 post menupost menu hidden items 中。这使得 :globe_with_meridians: 显示在 content localization allowed groups 中用户的帖子菜单中。
  • Content localization allow author localization 默认启用,并允许帖子作者使用上述相同的帖子菜单本地化他们自己的内容。
帖子菜单设置

编辑本地化帖子

如果用户可能正在查看本地化帖子并希望编辑该帖子,将出现一个对话框询问他们希望编辑哪个版本:

决定后会出现相应的编辑器。

自定义侧边栏本地化

“对所有人可见”的侧边栏部分还显示额外的翻译控件:

爬虫

您可以允许爬虫以您在 Content localization supported locales 中配置的各种语言查看您的站点。该站点设置位于“内容本地化”部分中的 Content localization crawler param

结果将是爬虫可以看到以下内容,其中每个支持的语言在每个主题的头部都有相应的 hreflang:

额外证明/验证

我们已广泛测试此功能,并可以确认在引入 X 数量的支持语言后,我们得到了正确的索引

常见问题

我已经设置了,但自动翻译仍然无法正常工作
确认您是否已设置以下内容

  • Content localization supported locales 至少有一种语言
  • Content localization enabled:check_mark:
    • Allow user locale:check_mark: (默认启用)
    • Set locale from cookie:check_mark:
  • Ai translation enabled:check_mark:
  • 您必须为每个翻译代理设置一个工作的 LLM

如果所有其他方法都失败,您可以启用 SiteSetting.ai_translation_verbose_logs

自动翻译是否已保存,还是每次有人查看主题时都发送到 LLM?
翻译已保存,每个帖子每种语言仅发送一次,翻译会被重用。

如果我的论坛支持英语和日语(通过 Content localization supported locales),有人用西班牙语写,他们的帖子会被翻译吗?
是的。所有主题和帖子都将被翻译成英语和日语,无论书面语言如何。

如果原始帖子被编辑,它会重新翻译吗?
是的 – 每天最多 2 次。当帖子被编辑时,它会在 5 分钟或 SiteSetting.editing_grace_period 的较大值延迟后发送重新翻译,以应对忍者编辑。Content localization allowed groups 中的授权用户可以选择立即发送帖子进行重新翻译。

如果我更改代理或 LLM,翻译会被删除吗?
不会,翻译通常会在设置更改后保留,除非使用帖子菜单项或翻译编辑器显式删除。


25 个赞
Content Localization and Automatic Translations for Your Community
I can't find discourse AI as a provider in the discourse translator plugin
2 language site
Machine-translate messages so users can read without knowing sender's language
Übersetzung wie hier auf Meta
Anonymous user language selector for Discourse
Update or Replace Header Locale Selector for New Discourse Header (widgets-end-of-life) – Is Built-in Support Available?
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
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`?
Seeking experience: Supporting a multilingual Discourse community
Ongoing translation in threads
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
Structuring a multilingual community
Why is Discourse AI translation not working
How to set up Discourse AI for internal-only usage
AI translation of all PMs
Content localization language switcher doesn't work
This Meta Branded theme is special. Can I use it on my forum too?
Feature Request: Translation of FAQ/Terms of Service/Privacy
Single post/header only partially translated -issue
Header Locale Selector
为啥的布署的discourse不支持修改语言
Topic list is shown in a language (DE) but has one (DE) topic not translated
If topic info is too long, tags are cut off and create a blank line
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

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

2 个赞

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

4 个赞

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

3 个赞

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

3 个赞

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

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

1 个赞
2 个赞

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

3 个赞

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

3 个赞

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

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

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

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

2 个赞

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

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

3 个赞

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

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

2 个赞

是的,没错——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。