أحاول تعديل سلاسل نصية معينة في صفحة تفضيلات المستخدم. لقد انتقلت إلى Admin -\u003e Site Texts وبحثت عن المفاتيح ذات الصلة. ومع ذلك، لم أتمكن من تخصيص النص المحدد الذي كنت أبحث عنه لأنه أخبرني أنه لم يتم العثور على نصوص.
أنا متأكد إلى حد معقول من أن المفتاح صالح، حيث تم تعريفه هنا:
ثم قمت بتغيير اللغة المستهدفة إلى الإنجليزية، ولكن لم يتم العثور على نتائج لـ user.username.short_instructions. علاوة على ذلك، حاولت البحث عن سلاسل نصية أخرى، مثل user.username.title و user.preferences.title و filters.latest.title، ولكن دون جدوى.
يبدو أنه لا توجد أخطاء ذات صلة، وبناءً على نتائج الطلب، قد تكون هناك مشكلة في الواجهة الخلفية.
على الرغم من أنني لا أعتقد أن الإضافات التي قمت بتثبيتها قد عدلت هذا الجزء المحدد، سأحاول إزالة جميع الإضافات غير الرسمية لاحقًا لمعرفة ما إذا كان ذلك سيحل المشكلة.
لست متأكدًا من سبب إرجاع I18n.exists?("js.user.username.short_instructions", :en) للقيمة false. قد أستمر في التحقيق لتحديد ما إذا كانت المشكلة خاصة بنسختي أم مشكلة عامة في Discourse.
@سام، شكراً على ردك. لقد قمت بنشر ثلاث مثيلات من 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 لديه بالفعل تصميم لفحص ملفات اللغة، كما هو موضح هنا.
أنت على حق. لقد افترضت افتراضًا غير مبرر أن هذه الفحوصات ستُنفذ في وقت التشغيل. عند البحث في مستودع GitHub، يبدو أن هذه الفحوصات يتم استدعاؤها فقط ضمن مهمة rake:
لن يؤدي إضافة فحوصات هنا إلى تحديد المشكلة التي واجهتها بشكل استباقي. ربما يكون الحل الأكثر مباشرة هو تحذير المطورين من هذه الممارسة في الوثائق