无法自定义某些网站文本

@sam,感谢您的回复。我使用不同的方法部署了三个 Discourse 实例,但都出现了相同的问题,因此我认为这不是安装问题。

重新检查我的插件时,我发现其中一个插件创建了一个区域设置文件(plugins/XXXX/config/locales/client.en.yml),其内容如下:

en:
   js:

删除此文件后问题得到解决。在对 I18n 实现进行简要调查后,我发现 deep_merge 用于在加载期间合并翻译:

    # File activesupport/lib/active_support/vendor/i18n-0.4.1/i18n/backend/simple.rb, line 31
31:         def store_translations(locale, data, options = {})
32:           locale = locale.to_sym
33:           translations[locale] ||= {}
34:           data = data.deep_symbolize_keys
35:           translations[locale].deep_merge!(data)
36:         end

上面的 YAML 被解析为:

{"en": {"js": null}}

这会导致在合并后删除 en.js 键下的所有内容。作为插件开发者,我明白这个问题源于我自己的编码错误,我对此负全部责任。但是,我认为 Discourse 可以通过额外的检查来警告此类情况,特别是考虑到 Discourse 已经有检查区域设置文件的设计,如此处所示。

4 个赞