일부 사이트 텍스트를 사용자 지정할 수 없음

@sam, 답변해 주셔서 감사합니다. 저는 서로 다른 방법으로 Discourse 인스턴스 3개를 배포해 보았는데, 모두 동일한 문제를 보여 설치 문제라고 생각하지 않습니다.

플러그인을 다시 살펴본 결과, 다음 내용으로 로케일 파일(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가 로케일 파일을 검사하기 위한 설계가 이미 존재한다는 점을 고려할 때(여기: here), 이러한 발생을 경고하기 위한 추가적인 점검이 Discourse에 도움이 될 것이라고 생각합니다.