@سام، شكراً على ردك. لقد قمت بنشر ثلاث مثيلات من 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 لديه بالفعل تصميم لفحص ملفات اللغة، كما هو موضح هنا.