Невозможно настроить некоторые тексты на сайте

@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 уже существует механизм проверки файлов локализации, как показано здесь.