গুরুত্বপূর্ণ : আপনার অ্যাপটি আই 18n 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
সত্য হয় আমরা একটি আই 18n উত্থাপন করব :: উত্তীর্ণ লোকেল অনুপলব্ধ থাকলে অবৈধ লোকাল ব্যতিক্রম।
ডিফল্ট সেট করা আছে nil
যা একটি অবচয় ত্রুটি প্রদর্শন করবে।
যদি সেট করা থাকে তবে false
আমরা পুরোপুরি উপলব্ধ লোকেলগুলি প্রয়োগ করতে পারি (পুরানো আচরণ)।
এটি নিম্নলিখিত পদ্ধতিতে প্রয়োগ করা হয়েছে:
- I18n.config.default_locale =
- I18n.config.locale =
- I18n.translate
- I18n.localize
- I18n.transliterate
এই পরিবর্তনের পূর্বে, আপনি যদি কোনও অসমর্থিত লোকেল পাস করেন, লোকেল বৈধ হলে রেলগুলি নীরবে এটিতে স্যুইচ করবে (যেমন যদি /config/locales
ফোল্ডারে কোনও সম্পর্কিত লোকেল ফাইল থাকে ), অন্যথায় লোকেলটি config.i18n.default_locale
কনফিগারেশনে ডিফল্ট হবে (যা ডিফল্ট: en )।
I18n রত্নটির নতুন সংস্করণ, বিকাশকারীদের লোকাল পরিচালনার বিষয়ে একটু বেশি সচেতন হতে বাধ্য করে।
ভবিষ্যতে, আচরণটি পরিবর্তিত হবে এবং কোনও লোকেল অবৈধ থাকলে, রেল অ্যাপ্লিকেশন ত্রুটি বাড়িয়ে তুলবে।
এই ধরনের পরিবর্তনের প্রস্তুতির ক্ষেত্রে (এটি সম্ভবত বেশ কয়েকটি অ্যাপ্লিকেশনকে ভেঙে দিতে পারে যা আজ অবধি নীরব খেলাপের উপর নির্ভর করে), বর্তমান সতর্কতা আপনাকে বর্তমান রূপান্তরকালীন সময়ে কোন বৈধতাটি সম্পাদন করতে চায় তা স্পষ্টভাবে ঘোষণা করতে বাধ্য করছে।
পূর্ববর্তী আচরণটি পুনরুদ্ধার করতে, কেবল নিম্নলিখিত কনফিগারেশনটিতে সেট করুন set 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
সেটিং। অন্যথায়, অবমূল্যায়ন সতর্কতা পপ আপ করতে থাকবে। (ধন্যবাদ Fábio Batista )
আপনি যদি তৃতীয় পক্ষের রত্ন ব্যবহার করেন যা 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
অ্যাপ্লিকেশনগুলিতেও ঘটে ।