لا يمكن تخصيص بعض نصوص الموقع

أحاول تعديل سلاسل نصية معينة في صفحة تفضيلات المستخدم. لقد انتقلت إلى Admin -\u003e Site Texts وبحثت عن المفاتيح ذات الصلة. ومع ذلك، لم أتمكن من تخصيص النص المحدد الذي كنت أبحث عنه لأنه أخبرني أنه لم يتم العثور على نصوص.

أنا متأكد إلى حد معقول من أن المفتاح صالح، حيث تم تعريفه هنا:

ثم قمت بتغيير اللغة المستهدفة إلى الإنجليزية، ولكن لم يتم العثور على نتائج لـ user.username.short_instructions. علاوة على ذلك، حاولت البحث عن سلاسل نصية أخرى، مثل user.username.title و user.preferences.title و filters.latest.title، ولكن دون جدوى.

إعجابَين (2)

غريب جدًا، يمكنني عرض المفتاح

إذا قمت بالنقر بزر الماوس الأيمن وفتحت مستعرض المتصفح، هل هناك أي أخطاء في علامة التبويب الخاصة بوحدة التحكم؟

إعجاب واحد (1)

يبدو أنه لا توجد أخطاء ذات صلة، وبناءً على نتائج الطلب، قد تكون هناك مشكلة في الواجهة الخلفية.

على الرغم من أنني لا أعتقد أن الإضافات التي قمت بتثبيتها قد عدلت هذا الجزء المحدد، سأحاول إزالة جميع الإضافات غير الرسمية لاحقًا لمعرفة ما إذا كان ذلك سيحل المشكلة.

إعجاب واحد (1)

يمكنك تعطيل التخصيصات مؤقتًا باستخدام الوضع الآمن ومعرفة ما إذا كان ذلك يعمل

إعجاب واحد (1)

لدي بعض التحديثات بخصوص هذه المسألة. يمكنني الآن التأكيد بشكل قاطع أن المشكلة تكمن في الواجهة الخلفية. أثناء فحص الكود، لاحظت سطرًا معينًا:

لدهشتي، فإن تنفيذ I18n.exists?("js.user.username.short_instructions", :en) على نسختي يُرجع false.

لقد قمت بإزالة هذا السطر من الكود يدويًا، وأنا الآن قادر على البحث عن user.username.short_instructions

لست متأكدًا من سبب إرجاع I18n.exists?("js.user.username.short_instructions", :en) للقيمة false. قد أستمر في التحقيق لتحديد ما إذا كانت المشكلة خاصة بنسختي أم مشكلة عامة في Discourse.

يبدو أنها مشكلة عامة في نسخة Discourse الخاصة بك.

sam@arch discourse % bin/rails c
Loading development environment (Rails 8.0.4)
[1] pry(main)> I18n.exists?("js.user.username.short_instructions", :en)
=> true

خاصة شيء ما يتعلق بالبناء. أثناء البناء، نقوم بتحليل كل هذه الأشياء ووضعها في جداول، ويبدو أن هذا لم يحدث بعد في نسختك.

نوصي بإعادة بناء وحدة التحكم.

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

4 إعجابات

يسعدني أنك وجدته!

سأقوم بإعلام فريق تطوير XP حتى يكونوا على علم.

4 إعجابات

صيد جيد، شكراً لتحديثنا بالحل @pangbo.

يمكننا بالتأكيد إضافة فحص هنا، على الرغم من أنني أتذكر أن هذا الفاحص يُستخدم فقط أثناء اختبارات RSpec. هل كان ذلك سيساعد في حالتك؟

بالتأكيد منفتحون على وجود فحص وقت التشغيل لهذه الحالة null، إذا تمكنا من العثور على مكان جيد لوضعه.

إعجابَين (2)

أنت على حق. لقد افترضت افتراضًا غير مبرر أن هذه الفحوصات ستُنفذ في وقت التشغيل. عند البحث في مستودع GitHub، يبدو أن هذه الفحوصات يتم استدعاؤها فقط ضمن مهمة rake:

لن يؤدي إضافة فحوصات هنا إلى تحديد المشكلة التي واجهتها بشكل استباقي. ربما يكون الحل الأكثر مباشرة هو تحذير المطورين من هذه الممارسة في الوثائق :innocent:

إعجابَين (2)

ماذا سنفعل بهذا الموضوع؟ هل يجب نقله إلى Dev بما أنه يبدو أنه إرشادات للمطورين؟