多语言插件 🌐

多语言插件使多语言论坛的管理员能够为所有用户和访客创建一个丰富且易于理解的环境,即使他们不懂论坛的默认语言或主流语言。

:page_facing_up: 获取代码

:book: 阅读文档


功能概览

多语言插件扩展了现有的 Discourse 语言系统,为您提供以下功能:

  1. 针对论坛所用所有语言的管理界面;
  2. 内容语言系统,让您和您的用户能够按语言筛选论坛内容;
  3. 与 Discourse 翻译插件集成,自动实现内容语言系统的部分功能;
  4. 能够 翻译分类名称、标签以及其他半静态文本
  5. 能够 禁用现有界面语言 的使用;
  6. 能够直接将自定义界面语言(“语言环境”)添加到论坛;
  7. 增强的访客语言功能,包括 访客界面语言(“语言环境”)切换器(可作为页脚栏或菜单);以及
  8. 注册时可选的界面语言和内容语言字段(即将推出)。

:point_right: 请注意

上述所有功能均基于现有的 Discourse 语言系统构建,并与该系统的所有功能协同工作(此处有更详细的说明)。

如果您希望向 Discourse 添加界面语言(“语言环境”),最佳方式是遵循以下步骤:https://meta.discourse.org/t/how-to-add-a-new-language/14970。您也可以通过插件添加语言环境,[具体方法参见此处](https://meta.discourse.org/t/add-a-new-locale-from-plugin/78962)。

本插件提供的通过管理界面执行此操作的功能,仅应在现有 Discourse 支持的方法用尽后才考虑使用。通过 Discourse 支持的方法添加到 Discourse 的任何语言将自动适用于本插件的所有功能。


示例截图

管理界面

半静态文本翻译(及访客语言环境切换器)

内容语言系统

Screen Shot 2020-02-25 at 2.24.51 PM

内容语言翻译插件集成


致谢

本插件的实现得益于维基媒体基金会的支持,特别是 Elena_Lappen 和 icaria36 的支持,他们对功能集的设计提供了重要意见。

如需进一步讨论本插件背后的设计理念,请参阅:

68 个赞

哇!你最近真忙。:slight_smile: 干得漂亮,@angus!期待看到这些在实际中的应用。如果你需要有人帮忙查看并提供反馈,随时告诉我。

目前的一个空白是,尚未提供让工作人员改进翻译插件所生成帖子翻译的功能——这会是本次工作的一部分吗?

10 个赞

嗯。我并不排除这种可能性,但这可能更属于翻译插件的范畴。

我曾在某个其他项目中实现过一个略有相关的功能:一个小计数图标,当用户使用的语言环境因缺少翻译而回退到默认语言环境时,该图标会显示给用户。点击该图标,你会看到:

“此页面缺少 x 个翻译。请帮助我们在此处进行翻译:(指向 Discourse 的 Transifex 的链接)。”

7 个赞

一如既往的出色工作,Angus!我已在自己的网站上进行了测试,发现了一些小问题并提出几个疑问。

问题

  1. 编辑现有主题时,下拉菜单的文本未跟随主题颜色:

  1. 由于内容语言设置采用单行显示,当语言数量超过几种时,操作变得非常不便:

疑问

  1. 似乎我们许多旧主题正在被 retroactively(回溯性地)添加语言标签,这是预期的行为,但目前仅适用于少量主题。最终是否会运行一个任务,为所有现有帖子应用该标签?如果不是,是否有方法为所有现有帖子批量添加语言标签?我们的网站迄今为止仅使用英语,因此我希望所有现有帖子都带有 en 标签。
  2. 当在内容语言中设置了多种语言时,是否应该能够按单一语言进行筛选?目前,当我点击下拉菜单中的某个语言时,没有任何反应。
2 个赞

感谢你的反馈,David,也谢谢你尝试使用这个功能。我已经推送了多项更新,其中包括修复你上面提到的两个问题。

目前还没有。当前只有由翻译插件翻译的帖子才会自动 retroactively 添加内容标签(前提是翻译插件已启用且同步功能已启用)。

我可以添加这样一个任务,但它需要接受特定语言作为参数,并在定义的范围内运行。除了“全站范围”之外,我还可以按类别或按(非内容)标签来执行(例如,将此内容标签应用于该类别中的所有主题,或具有此其他标签的所有主题)。你觉得哪种方式对你更合适?

不行,该列表只是用来显示你当前设置的内容语言。能否详细说明一下你期望(或希望)它的行为是怎样的?

2 个赞

谢谢你,Angus,这解决了我的问题。

理想情况下,我希望将 en 标签应用到所有尚未设置语言标签的现有帖子,这样是否过于宽泛?问题在于,如果用户将其内容语言设置为英语和西班牙语,他们将只能看到带有语言标签的帖子,而看不到成千上万条没有标签的帖子。

因为这里有一个列表,并且在悬停时会高亮显示,这给人一种它们可点击的错觉。在这种情况下,我的期望是点击其中一个时,你的帖子会按该语言进行筛选。我认为这是一个有用的按语言筛选的功能,但我也并不是非它不可。

另外,我很希望能有选项来移动语言按钮。我的导航栏已经有很多项目了,开始显得拥挤。而且,高亮的按钮在新主题按钮上方显得格格不入,还迫使新主题按钮下移。我想把它移到导航栏的开头,比如在 最新 之前,是否可行?或者可以像我在 WordPress 主页上那样,浮动在角落:https://naturephotographers.network,或者像翻译插件中的选项那样放在页眉中。

我理解你把它放在导航栏中的理由,因为你是在像其他按钮一样进行筛选,但问题是,你只需要设置一次,之后就不再需要了。你并不会经常按不同语言进行筛选。

再次感谢,这个插件加上翻译功能真是改变了游戏规则。

3 个赞

对我来说,这是预期的行为。用户不应看到外语帖子。如果没有他们语言的帖子,他们就不应看到任何帖子。

不过,作为一个选项,添加“批量标记”功能会很不错。

2 个赞

同意。我在 Pavilion 上提出的解决方案是:如果默认语言与所选主题语言之一匹配,则显示所有未标记的帖子。但批量标记会是更好的选择。

@angus,我不完全确定这是否与您的插件或核心变更有关,但我可能发现了一个漏洞。当我编辑现有帖子、进行一些更改并尝试保存时,会出现错误“您选择的标签均不可用”。除了 en 标签外,没有设置其他标签,且“主题所需的最小标签数”设置为 0。有什么建议吗?

2 个赞

今天又遇到了一个问题,Angus。我之前有一个 ig 标签(代表 Instagram),但被插件删除了,以便为 Igbo 语言腾出空间。我想这个标签应该无法恢复了吧?我尝试关闭插件,希望它可能还在,但看来它已经彻底消失了。我知道测试插件时会有这样的风险。你或许应该添加一个警告,说明它会删除任何同名的标签。

3 个赞

我会通过私信联系你(内容应该不会丢失)

其他有用的建议和反馈,我明天会进行审查。

3 个赞

天哪!你太棒了!
我是说,我真的非常钦佩你。同时我也希望这篇帖子不会分散人们对你的出色工作的关注。

7 个赞

顺便提一下,David 和我已经解决了这个问题,并恢复了现有的 ig 标签。

如果现有标签与内容语言标签发生冲突,在冲突解决之前,该语言将无法作为内容语言使用。您可以在语言管理后台看到这一情况。

我将在未来一周内处理其他问题和功能请求。

9 个赞

亲爱的 Angus,能否仅为访客使用语言切换器?我不需要使用该系统的所有功能,只需要让访客能够切换界面语言即可。

2 个赞

该插件的每个功能都是独立运行的。

安装插件后,只需启用语言切换器:Pavilion

我们目前在 thepavilion.io 上正是出于此目的使用该插件。

4 个赞

太棒了,@angus

我们安装了插件,但现在用户(甚至工作人员)都看不到任何内容了。但是,当您编辑分类并尝试删除它时,会收到以下警告:

此时,访问主题的唯一方法是点击警告消息中的链接,或者知道该主题的 URL。如果我们访问该主题(RIO Paris),然后添加一个内容语言标签,例如“english”,它就会按预期显示出来。我们的推测是:多语言插件工作正常,只有与标签关联的内容才会被显示。然而,当人们无法在不关联语言标签的情况下查看所有相关主题时,这确实令人感到误导和困惑。我们有数千个之前发布的话题现在都不可见了。有没有办法快速为它们添加语言标签?因为我们目前无法看到列表。

敬请指导。

编辑:我通过为特定分类下的所有主题添加相应的语言标签解决了可见性问题。在 Rails 中操作如下:

  1. 执行 cd /var/discourse,然后运行 ./launcher enter app
  2. 使用 rake categories:list 获取分类 ID
  3. 例如,如果某个只应包含德语内容的分类 ID 是 245,则运行 rake tags:bulk_tag_category["de",245]
1 个赞

运行 ./launcher rebuild app 后出现空白页面。

发现是这个插件导致的问题。无法打开站点和管理后台。

我只启用了“多语言内容”插件,但尚未填写相关内容。

如何在数据库中重置该插件的设置?

您的 website.com/safe-mode 能正常工作吗?

我已停用此插件。问题始于管理员面板中插件列表的消失。之后我尝试重新构建应用,但重新构建后网站无法打开。现在网站可以打开,但该插件处于停用状态。

@angus,你能用最新版本的 Discourse 检查一下你的插件吗?

在安全模式下(不包含非官方插件),我看到的页面没有插件列表:

安全模式下(不包含所有插件):

是否可以在数据库中重置此插件的设置?

当时没有任何模式能解决这个问题(安全模式、非官方模式、全部模式均无效)——在所有模式下,我都未看到系统中已安装插件的列表。

1 个赞