تكتشف التنفيذ الجديد عندما يرث الـ Fiber إعدادات مملوكة لـ Fiber آخر:
if current.respond_to?(:owned_by?) && !current.owned_by?(Fiber.current)
current = current.dup
Fiber[:i18n_config] = current
end
المشكلة تكمن في I18n::Config#initialize_copy:
def initialize_copy(other)
@owner = Fiber.current
end
يغيّر مالك الإعدادات المنسوخة، لكنه لا يمسح @locale المنسوخة، أي أن الـ Fiber الفرعي يرث @locale الصريحة من الـ Fiber الأب.
لذلك، إذا كان الـ Fiber الأب يحتوي حاليًا على:
I18n.locale == :zh_CN
يمكن لـ Fiber فرعي أن يرث إعدادات منسوخة لا تزال تحتوي على:
@locale == :zh_CN
على الرغم من أن هذا الـ Fiber الفرعي يمثل الآن طلبًا مختلفًا يجب أن يُحل إلى الإنجليزية.
يسبب هذا مشكلة في discourse. عندما يكون المستخدم يستخدم لغة عرض مختلفة عن اللغة الافتراضية. على سبيل المثال، إذا كانت اللغة الافتراضية للموقع هي الصينية ولغة العرض هي الإنجليزية، فقد تُعرض الصفحات عن طريق الخطأ بالصينية، أو بمزيج من الإنجليزية والصينية.
تم رفع commit لتراجع عن تحديث الإصدار وإضافة بعض المواصفات (specs)، وربما يكون إيقاف التحديث مؤقتًا حتى يتم إصلاح المشكلة من قبل المطورين الأصليين فكرة رائعة.