@sam, grazie per la tua risposta. Ho distribuito tre istanze di Discourse utilizzando metodi diversi e tutte presentano lo stesso problema, il che mi porta a credere che non si tratti di un problema di installazione.
Riesaminando i miei plugin, ho scoperto che uno di essi ha creato un file locale (plugins/XXXX/config/locales/client.en.yml) con il seguente contenuto:
en:
js:
L’eliminazione di questo file ha risolto il problema. Dopo una breve indagine sull’implementazione di I18n, ho scoperto che deep_merge viene utilizzato per unire le traduzioni durante il caricamento:
# 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
Lo YAML sopra viene analizzato come:
{"en": {"js": null}}
Ciò comporta l’eliminazione dell’intero contenuto sotto la chiave en.js dopo l’unione. In qualità di sviluppatore di plugin, comprendo che questo problema deriva da un mio errore di codifica e ne sono pienamente responsabile. Tuttavia, credo che Discourse potrebbe beneficiare di controlli aggiuntivi per avvisare contro tali occorrenze, soprattutto considerando che Discourse ha già una progettazione per ispezionare i file locali, come si vede qui.