मैं सिर्फ सिफारिश रेल तरीका है अपने नियंत्रकरेल में लोकेल सेटिंग वैश्विक के रूप में क्यों कार्य करती है (जब पतली का उपयोग करते हैं)?
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
स्थान विश्व स्तर पर सेट में स्थान निर्धारित करने के लिए है कि एहसास हुआ। उपर्युक्त कोड काम करता है, लेकिन मुझे आश्चर्य है कि default_locale
वास्तव में डिफ़ॉल्ट है यदि आपको इसे स्पष्ट रूप से टाइप करना है?
def set_locale
locale = params[:locale] if params[:locale]
end
और होने I18n.default_locale
अन्यथा डिफ़ॉल्ट रूप से इस्तेमाल किया:
मैं क्या उम्मीद थी अनुरोध के अनुसार एक स्थान के लिए की तरह है और कुछ कर (जैसे हम अनुरोध के अनुसार सत्र है) है। यह आदर्श पथ में वैकल्पिक स्थान से मेल होगा:
# config/routes.rb
scope "(:locale)", :locale => /en|nl/ do
resources :books
end
यदि किसी कारण से मैं कुछ कार्रवाई में स्थानीय सेटिंग को छोड़ अभी के लिए यह स्थान पिछले अनुरोध जो किसी अन्य उपयोगकर्ता से हो सकता है में सेट का उपयोग करता है!
और क्या कोई संभावित दौड़ स्थिति नहीं है क्योंकि एक अनुरोध वैश्विक I18n.locale
बदल सकता है जबकि एक अन्य अनुरोध (पहले स्थान पर एक और लोकेल सेट कर रहा है) प्रतिपादन के बीच में है?
अद्यतन: कुछ विवरण मैं अब के लिए मिल गया है, I18n documentstion से:
वर्तमान स्थान सेट छद्म विश्व स्तर पर, Thread.current हैश में यानी डीईएफ़ स्थान में = (लोकेल)
अब मैं समझना चाहता हूं कि प्रत्येक अनुरोध एक अलग धागा है या नहीं।
अद्यतन 2: विवरण के लिए मेरा उत्तर देखें।
मुझे एक ही समस्या है, लेकिन मैं यूनिकॉर्न का उपयोग कर रहा हूं! कुछ पता है इसे कैसे हल करना है? धन्यवाद –
मुझे लगता है कि जब आप "I18n.set_locale" कहते हैं, तो आप वास्तव में "I18n.locale =" सही कहेंगे? http://www.rubydoc.info/github/svenfuchs/i18n/I18n/Config:locale= – lulalala
आप सही हैं, सुधार के लिए धन्यवाद। – khustochka