महत्वपूर्ण : सुनिश्चित करें कि आपका ऐप I18n 0.6.8 का उपयोग नहीं कर रहा है, इसमें एक बग है जो कॉन्फ़िगरेशन को सही तरीके से सेट करने से रोकता है ।
संक्षिप्त जवाब
चेतावनी को चुप करने के लिए application.rb फ़ाइल को संपादित करें और Rails::Application
शरीर के अंदर निम्न पंक्ति शामिल करें
config.i18n.enforce_available_locales = true
संभावित मूल्य हैं:
- असत्य : अगर तुम
- स्थान सत्यापन को छोड़ना चाहते हैं
- स्थानों की परवाह मत करो
- सच : अगर तुम
- यदि कोई अमान्य लोकेल पास हो (या)
- नए रेल व्यवहार (या) के लिए डिफ़ॉल्ट करना चाहते हैं
- स्थानीय सत्यापन के बारे में परवाह है
ध्यान दें:
- पुराने डिफ़ॉल्ट व्यवहार से मेल खाती है
false
, नहीं true
।
- यदि आप
config.i18n.default_locale
कॉन्फ़िगरेशन या अन्य i18n सेटिंग्स सेट कर रहे हैं, तो सेटिंग को config.i18n.enforce_available_locales
सेट करने के बाद इसे करना सुनिश्चित करें ।
- यदि आपका उपयोग थर्ड पार्टी रत्नों में शामिल है जिसमें I18n फीचर्स शामिल हैं, तो एप्लिकेशन
config
ऑब्जेक्ट के माध्यम से वैरिएबल सेट करना , प्रभाव नहीं हो सकता है। इस स्थिति में, इसे सीधे पर सेट करेंI18n
उपयोग करेंI18n.config.enforce_available_locales
।
चेतावनियां
उदाहरण
require File.expand_path('../boot', __FILE__)
# ...
module YouApplication
class Application < Rails::Application
# ...
config.i18n.enforce_available_locales = true
# or if one of your gem compete for pre-loading, use
I18n.config.enforce_available_locales = true
# ...
end
end
लंबा जवाब
अब पदावनति चेतावनी रेल 4 (> = 4.0.2) और रेल 3.2 (> = 3.2.14) दोनों में प्रदर्शित की जाती है। इसका कारण इस वचन में बताया गया है ।
उपलब्ध स्थानों को लागू करें
कब I18n.config.enforce_available_locales
सच है हम एक I18n उठाएंगे: अमान्य लॉकेल अपवाद यदि पारित लोकेल अनुपलब्ध है।
डिफ़ॉल्ट सेट किया गया है, nil
जिसमें एक अपचयन त्रुटि दिखाई देगी।
यदि false
हम उपलब्ध स्थानों को पूरी तरह से (पुराने व्यवहार) लागू करना छोड़ देंगे।
इसे निम्नलिखित विधियों में लागू किया गया है:
- I18n.config.default_locale =
- I18n.config.locale =
- I18n.translate
- I18n.localize
- I18n.transliterate
इस परिवर्तन से पहले, यदि आपने एक असमर्थित लोकल पास किया है, तो रेल चुपचाप उस पर स्विच कर देगा यदि लोकेल वैध है (यानी यदि /config/locales
फ़ोल्डर में एक संबंधित लोकेल फ़ाइल है ), अन्यथा लोकेल config.i18n.default_locale
कॉन्फ़िगरेशन के लिए डिफ़ॉल्ट होगा (जो कि चूक के लिए: en )।
I18n मणि का नया संस्करण, डेवलपर्स को स्थानीय प्रबंधन के प्रति थोड़ा अधिक जागरूक होने के लिए मजबूर करता है।
भविष्य में, व्यवहार बदल जाएगा और यदि कोई लोकेल अमान्य है, तो रेल एप्लिकेशन एक त्रुटि देगा।
ऐसे परिवर्तन की तैयारी में (जो संभावित रूप से कई अनुप्रयोगों को तोड़ सकता है जो आज तक मौन चूक पर निर्भर थे), चेतावनी आपको वर्तमान संक्रमण अवधि के दौरान स्पष्ट रूप से घोषित करने के लिए मजबूर कर रही है कि आप कौन सा सत्यापन करना चाहते हैं।
पिछले व्यवहार को पुनर्स्थापित करने के लिए, बस निम्नलिखित कॉन्फ़िगरेशन को इसके लिए सेट करें false
config.i18n.enforce_available_locales = false
अन्यथा, नई रेल चूक के मिलान के लिए इसे सही पर सेट करें या यदि आप डोमेन सत्यापन पर अधिक कठोर होना चाहते हैं और अमान्य लोकेल के मामले में डिफ़ॉल्ट पर स्विच करने से बचें।
config.i18n.enforce_available_locales = true
चेतावनी
आप सेट कर रहे हैं config.i18n.default_locale
विन्यास या जैसा कि पहले उल्लेख तरीकों (में से किसी का उपयोग कर default_locale=
, locale=
, translate
, आदि), सेट करने के बाद यह करने के लिए सुनिश्चित करें कि config.i18n.enforce_available_locales
सेटिंग। अन्यथा, पदावनति चेतावनी पॉप अप होती रहेगी। (धन्यवाद फैबियो बतिस्ता )।
यदि आप थर्ड पार्टी रत्नों का उपयोग करते हैं जिनमें I18n फीचर्स शामिल हैं, तो वेरिएबल को सेट करना प्रभाव नहीं डाल सकता है। वास्तव में, मुद्दा पिछले बिंदु में वर्णित के समान है, बस डिबग करने के लिए थोड़ा कठिन है।
यह मुद्दा पूर्वता का विषय है। जब आप अपने रेल एप्लिकेशन में कॉन्फ़िगरेशन सेट करते हैं, तो मान तुरंत I18n मणि को नहीं सौंपा जाता है। रेल प्रत्येक विन्यास को एक आंतरिक वस्तु में संग्रहीत करती है, निर्भरता (रेल और तीसरे पक्ष के रत्नों) को लोड करती है और फिर यह विन्यास को लक्ष्य कक्षाओं में ले जाती है। यदि आप एक रत्न (या रेल्स प्लगइन) का उपयोग करते हैं जो कि I18n को असाइन किए जाने से पहले I18n विधियों में से किसी को कॉल करता है, तो आपको चेतावनी मिल जाएगी।
इस स्थिति में, आपको रेल स्टैक को छोड़ना होगा और कॉल करके I18n मणि को तुरंत कॉन्फ़िगर करना होगा
I18n.config.enforce_available_locales = true
के बजाय
config.i18n.enforce_available_locales = true
मुद्दा साबित करना आसान है। एक नया खाली रेल एप्लिकेशन उत्पन्न करने के लिए प्रयास करें और आप उस सेटिंग देखेंगे config.i18n
में application.rb
काम करता है ठीक।
यदि आपके ऐप में ऐसा नहीं है, तो अपराधी को डीबग करने का एक आसान तरीका है। अपने सिस्टम में i18n रत्न का पता लगाएँ, i18n.rb
फ़ाइल खोलें और enforce_available_locales!
कथन को शामिल करने के लिए विधि को संपादित करें puts caller.inspect
।
यह जब भी बुलाया स्टैकट्रेस मुद्रित करने के लिए विधि का कारण होगा। आप यह निर्धारित करने में सक्षम होंगे कि कौन सा मणि इसे स्टैकट्रेस (मेरे मामले में यह प्रामाणिक था) का निरीक्षण करके बुला रहा है।
["/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/i18n-0.6.9/lib/i18n.rb:150:in `translate'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/i18n/translator.rb:8:in `translate'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/i18n.rb:79:in `translate'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:68:in `validates_format_of_email_field_options'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:102:in `block in included'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:99:in `class_eval'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:99:in `included'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `include'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `block in acts_as_authentic'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `each'",
"/Users/weppos/.rvm/gems/ruby-2.0.0-p247@application/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `acts_as_authentic'",
"/Users/weppos/Projects/application/app/models/user.rb:8:in `<class:User>'",
"/Users/weppos/Projects/application/app/models/user.rb:1:in `<top (required)>'",
Rails 4.0.1
अनुप्रयोगों के लिए भी होता है ।