ruby on rails - রেল I18n বৈধতা অপসরণ সতর্কতা




ruby-on-rails ruby-on-rails-4 (4)

আপনি appilcation.rb সম্পর্কে যত্ন নিতে চান appilcation.rb ফাইল লিখুন।

config.i18n.enforce_available_locales = true

লোকেল যাচাইকরণের জন্য আপনি যদি মিথ্যা লিখতে পারেন এবং সে সম্পর্কে কোনও যত্ন না করেন।

আমি শুধু Rails 4.0.2 আপডেট এবং আমি এই সতর্কতা পেয়েছি:

[বর্জন করা] I18n.enforce_available_locales ভবিষ্যতে সত্য হিসাবে ডিফল্ট হবে। আপনি যদি সত্যিই আপনার লোকেলের বৈধতা এড়িয়ে যেতে চান তবে আপনি এই বার্তাটি এড়াতে I18n.enforce_available_locales = false সেট করতে পারেন।

মিথ্যা সেট করার জন্য কোন নিরাপত্তা সমস্যা আছে?


যে ভাবে মনে হচ্ছে না - i18n কাজ করার পূর্বের আচরণ হবে - নতুন আচরণ (সত্য) আপনি লোকেলে প্রয়োগ / উপলব্ধ না হলে জিজ্ঞাসা করার সময় একটি ত্রুটি বাড়াবে।

এই সতর্কতাটি যোগ করে এমন কমিটিটি দেখুন: https://github.com/svenfuchs/i18n/commit/3b6e56e06fd70f6e4507996b017238505e66608c


I18n.config.enforce_available_locales = true Rails 3.2.16 এ আমার জন্য কাজ করেছে (আমি কনফিগারেশন / application.rb এ রাখি)


গুরুত্বপূর্ণ : আপনার অ্যাপ্লিকেশন 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 সেটিংটি সেট করার পরে এটি করতে ভুলবেন না।
  • আইফোন বৈশিষ্ট্যগুলি সহ তৃতীয় পক্ষের রত্নগুলি ব্যবহার করলে, অ্যাপ্লিকেশন config বস্তুর মাধ্যমে পরিবর্তনশীল সেটিংটি কার্যকর হতে পারে না। এই ক্ষেত্রে, I18n.config.enforce_available_locales ব্যবহার করে সরাসরি 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 সেট করা হয় যা একটি বর্জন ত্রুটি প্রদর্শন করবে।

যদি মিথ্যাতে সেট করা হয় তবে আমরা উপলব্ধ লোকেলগুলিকে পুরোপুরি একত্রিত করব (পুরানো আচরণ)।

নিম্নলিখিত পদ্ধতিতে প্রয়োগ করা হয়েছে:

  • I18n.config.default_locale =
  • I18n.config.locale =
  • I18n.translate
  • I18n.localize
  • I18n.transliterate

এই পরিবর্তনটি আগে, যদি আপনি একটি অসমর্থিত লোকেল পাস করেন তবে লোকে যদি বৈধ হয় তবে রেলগুলি চুপ করে এটিতে স্যুইচ করবে (অর্থাৎ যদি /config/locales ফোল্ডারে সংশ্লিষ্ট স্থানীয় ফাইল থাকে), অন্যথায় লোকেল config.i18n.default_locale ডিফল্ট হবে config.i18n.default_locale কনফিগারেশন (যা ডিফল্ট: en)।

I18n মণির নতুন সংস্করণ, ডেভেলপারদেরকে লোকেলের ব্যবস্থাপনা সম্পর্কে একটু সচেতন হতে বাধ্য করে।

ভবিষ্যতে, আচরণ পরিবর্তন হবে এবং একটি লোকেল অবৈধ হলে, রেল অ্যাপ্লিকেশন একটি ত্রুটি বাড়াবে।

এই পরিবর্তনের প্রস্তুতির জন্য (যা সম্ভবত বেশ কয়েকটি অ্যাপ্লিকেশানকে ভাঙ্গতে পারে যা আজ পর্যন্ত নীরব ডিফল্টগুলিতে নির্ভর করে না), সতর্কতাটি আপনাকে বর্তমান রূপান্তর সময়ের সময় কোন বৈধতাটি সম্পাদন করতে চায় তা স্পষ্টভাবে ঘোষণা করার জন্য আপনাকে বাধ্য করছে।

পূর্ববর্তী আচরণ পুনঃস্থাপন করতে, নিচের কনফিগারেশনটি false সেট করুন

config.i18n.enforce_available_locales = false

অন্যথায়, নতুন Rails ডিফল্টগুলির সাথে মেলে বা আপনি যদি ডোমেন বৈধকরণের উপর আরো কঠোর হতে চান এবং অবৈধ লোকেলের ক্ষেত্রে ডিফল্টে স্যুইচ করতে না চান তবে সেটিকে সত্য হিসাবে সেট করুন।

config.i18n.enforce_available_locales = true

বিচারকার্য স্থগিত রাখার আদেশ

  1. আপনি যদি config.i18n.default_locale কনফিগারেশনটি সেট করে থাকেন বা পূর্বে উল্লেখিত কোনও পদ্ধতি ব্যবহার করেন ( default_locale= , locale= , translate , ইত্যাদি), config.i18n.enforce_available_locales সেটিংটি সেট করার পরে এটি করতে ভুলবেন না। অন্যথা, বর্জন সতর্কতা পপিং আপ রাখা হবে। (ধন্যবাদ Fábio Batista )।

  2. আপনি আইফোন বৈশিষ্ট্যগুলি সহ তৃতীয় পক্ষের রত্নগুলি ব্যবহার করেন, এর মাধ্যমে পরিবর্তনশীল সেটিংটি প্রভাব ফেলতে পারে না। প্রকৃতপক্ষে, সমস্যা পূর্ববর্তী বিন্দুতে বর্ণিত হিসাবে একই, ডিবাগ করতে একটু কঠিন।

    এই সমস্যা অগ্রাধিকার একটি ব্যাপার। যখন আপনি আপনার Rails অ্যাপ্লিকেশানে কনফিগার সেট করেন, মানটি অবিলম্বে I18n মণিতে বরাদ্দ করা হয় না। রেল একটি অভ্যন্তরীণ বস্তুর প্রতিটি কনফিগার সঞ্চয় করে, নির্ভরতা লোড করে (রেলটি এবং তৃতীয় পক্ষের রত্ন) এবং তারপরে এটি লক্ষ্য ক্লাসগুলিতে কনফিগারেশন পাস করে। কনফিগারেশন I18n এ সন্নিবেশ করার আগে আইফোন পদ্ধতির যে কোনও মণ (অথবা রেল প্লাগিন) ব্যবহার করে আপনি যদি এটি ব্যবহার করেন তবে আপনি সতর্কতা পাবেন।

    এই ক্ষেত্রে, আপনাকে রেল স্ট্যাকটি এড়িয়ে যেতে হবে এবং কনফিগার করে আইফোন মোমের সাথে কনফিগ সেট করতে হবে

    I18n.config.enforce_available_locales = true

    পরিবর্তে

    config.i18n.enforce_available_locales = true

    সমস্যা প্রমাণ করা সহজ। একটি নতুন খালি Rails অ্যাপ্লিকেশন জেনারেট করার চেষ্টা করুন এবং আপনি config.i18n এ সেটিং config.i18n দেখতে পাবেন জরিমানা কাজ করে।

    যদি আপনার অ্যাপে এটি না থাকে, তাহলে অপরাধীকে ডিবাগ করার একটি সহজ উপায় রয়েছে। আপনার সিস্টেমে i18n i18n.rb করুন, i18n.rb ফাইলটি খুলুন এবং i18n.rb পদ্ধতিটি সম্পাদনা করুন enforce_available_locales! বিবৃতি অন্তর্ভুক্ত করতে puts caller.inspect

    যখনই প্রবর্তিত হয় তখন এটি স্ট্যাকট্রাস মুদ্রণ করার পদ্ধতি তৈরি করবে। আপনি স্ট্যাকট্রাস পরিদর্শন করে কোন মণাকে এটি কল করে তা নির্ধারণ করতে সক্ষম হবেন (আমার ক্ষেত্রে এটি Authlogic ছিল)।

    ["/Users/weppos/.rvm/gems/[email protected]/gems/i18n-0.6.9/lib/i18n.rb:150:in `translate'",
     "/Users/weppos/.rvm/gems/[email protected]/gems/authlogic-3.1.0/lib/authlogic/i18n/translator.rb:8:in `translate'",
     "/Users/weppos/.rvm/gems/[email protected]/gems/authlogic-3.1.0/lib/authlogic/i18n.rb:79:in `translate'",
     "/Users/weppos/.rvm/gems/[email protected]/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:68:in `validates_format_of_email_field_options'",
     "/Users/weppos/.rvm/gems/[email protected]/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:102:in `block in included'",
     "/Users/weppos/.rvm/gems/[email protected]/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:99:in `class_eval'",
     "/Users/weppos/.rvm/gems/[email protected]/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/email.rb:99:in `included'",
     "/Users/weppos/.rvm/gems/[email protected]/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `include'",
     "/Users/weppos/.rvm/gems/[email protected]/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `block in acts_as_authentic'",
     "/Users/weppos/.rvm/gems/[email protected]/gems/authlogic-3.1.0/lib/authlogic/acts_as_authentic/base.rb:37:in `each'",
     "/Users/weppos/.rvm/gems/[email protected]/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-i18n