في إضافة ، كيف يمكنني إجبار العملاء على إعادة تحميل ملف extra-locales؟

لقد أنشأنا طريقة JS مخصصة لبعض العمل الخاص باللغة المخصصة التي تقوم بتحميل كائن I18n من جانب المتصفح بسمة مخصصة.

أريد تشغيل إعادة تقييم لطريقة JsLocaleHelper هذه على كل من العملاء التابعين.

أحاول إيجاد طريقة لتشغيل هذا من جانب الخادم.

لقد نجح هذا من قبل ولكنه يبدو أنه قد تغير مؤخرًا.

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

الأشياء التي جربتها تشمل:

Discourse.request_refresh!

أو الأكثر استهدافًا:

Discourse.request_refresh!(user_ids: user_ids)

والذي يبدو أنه يجبر على التحديث عند التنقل. ومع ذلك، أشك في أن البرنامج النصي يتم تخزينه مؤقتًا لذا فهذا ليس حلاً.

أي مساعدة ستكون موضع تقدير!

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

لاحظ أن هذه الوظيفة تتصرف بشكل مختلف جدًا عندما يكون المعامل user_ids موجودًا وعندما لا يكون كذلك.

هل جربت MessageBus.publish "/file-change", ["refresh"]؟

3 إعجابات

فكرة ممتازة، لقد نجحت! شكراً لك

ولكن هل هذا قابل للتوسع؟

إعجابَين (2)

لا، لا أعتقد ذلك :frowning:

إعجابَين (2)

هذا يساعد كثيرًا على الرغم من أنني سأستمر في البحث.

إذا تمكنت من العثور على نكهة تنتشر بمرور الوقت، فقد نكون جاهزين للانطلاق.

على الرغم من أنه سيكون من الأفضل استهداف الملف بالضبط.

إعجابَين (2)

حسنًا، أنا عالق بين المطرقة والسندان هنا.

إليك ما تعلمته:

  1. يتم إضافة حزم extra-locales كعلامات نصية.
  2. تحتوي على معلمة إصدار تعتمد على اسم الحزمة.
  3. أعتقد أن رقم الإصدار يتم تقييمه فقط عند بدء التشغيل، لذا سيظل مخزنًا مؤقتًا حتى:
  • تجبر العملاء على التحديث الكامل، والذي يبدو أنه لا يمكن أن يحدث إلا بشكل جماعي؟
  • تقوم بإعادة تشغيل الخادم
  • أو يقوم العميل بمسح ذاكرة التخزين المؤقت للمتصفح الخاص به

هذا مؤسف، على أقل تقدير، لعدم وجود تحكم أكثر دقة.

  • هل يمكننا تقديم “تحديث كامل” في رسالة التنقل؟
إعجابَين (2)

لقد اختبرت للتو Discourse.request_refresh! ويبدو أنها تعيد تحميل جميع أصول جافاسكريبت عند التنقل التالي. قد لا تؤدي إلى تشغيل تحديث JsLocaleHelper، فأنا لست مطلعًا بما فيه الكفاية على كيفية عمل ذلك.

هناك شيء خفي يحدث.

“200” هو في الواقع “200 (مخزن مؤقت)” وهو من جانب المتصفح.

مشاركة جيدة في Stack Overflow حول هذا الموضوع.

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

آه …:صراخ: … لم أتحقق من ذلك.

إعجابَين (2)

هل حاولت استدعاء ExtraLocalesController.clear_cache! بعد إجراء تغييرات على extra-locales؟ يجب أن يعيد حساب الإصدار أثناء الطلب التالي.

إعجابَين (2)

شكرا. نعم، لقد فعلت. أعتقد أن هذا جانبي الخادم فقط ولا يغير رقم الإصدار في مجموعة ملفات JS المقدمة التي تم إعدادها أثناء التمهيد. لا توجد مشكلة في جانب الخادم.

أفكر في نقل هذه البيانات إلى كائن الموقع والمُسلسل لمعرفة ما إذا كان بإمكاني الحصول على مزيد من التحكم.

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

إعجابَين (2)

نعم، هذا بالضبط.

إذا قمت بتشغيل هذا الأمر من وحدة تحكم rails، فكيف يبطل البرامج النصية على العميل؟

(للعلم، العلامات هي حالة خاصة حيث يتم استخدامها في الأسماء المستعارة، لذلك يجب علي إضافة كائن خاص لتضمين الترجمات، لا يمكنني تسلسل ترجمة علامة في كل مكان لأن المسارات لن تعمل).

في المرة القادمة التي يقوم فيها العميل بإعادة تحميل الصفحة، سيرى تجزئة مختلفة في HTML ويقوم بتحميل البرنامج النصي الجديد. هذه هي طريقة عمل ميزة “تخصيص النص” (تستخدم حزمة “overrides”).


<link rel="preload" href="/extra-locales/overrides?v=ecb7809c205de318b2c16d1b51d4b6f6" as="script">
3 إعجابات

أنا قادر على تكرار ذلك.

لذلك، أنا لا أستخدم التجاوزات لهذا لأننا لا نتحدث عن ترجمة JavaScript من جانب العميل الأصلية.

لسبب ما، فإن الاستخدام الحالي لملفنا المخصص JsLocaleHelper لا يتصل بنظام تحديث رقم الإصدار هذا.

ولكن هذا مفيد للغاية، شكرًا جيرهارد، حيث سأتمكن من دراسة كيف يتسبب الخادم في تحديث رقم الإصدار هذا.

ألاحظ أيضًا أن ملف التجاوزات اختياري، مثير للاهتمام!

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

@gerhard كان ذلك مفيدًا للغاية، شكرًا لك.

تم حل المشكلة. كان عليّ فقط التأكد من أن رقم الإصدار يعتمد على محتوى ملف js المخصص. لدي الآن يعمل في وضع التطوير :rocket:

4 إعجابات

النتائج الكاملة لهذه المحادثة ضمنية في طلب السحب هذا: FIX: Tag caching fixes by merefield · Pull Request #52 · paviliondev/discourse-multilingual · GitHub

4 إعجابات