রেলগুলি I18n বৈধতা অবমূল্যায়ন সতর্কতা


387

আমি মাত্র 4.0.2 রেলগুলিতে আপডেট করেছি এবং আমি এই সতর্কতাটি পেয়ে যাচ্ছি:

[অবচয়যুক্ত] I18n.enfor_av উপলভ্য_লোকালে ভবিষ্যতে ডিফল্ট হবে। আপনি যদি সত্যই নিজের লোকেলের বৈধতা এড়াতে চান তবে এই বার্তাটি এড়াতে আপনি I18n.enfor_av উপলভ্য_লোকলেস = মিথ্যা সেট করতে পারেন।

এটি মিথ্যাতে সেট করার কোনও সুরক্ষা সমস্যা আছে কি?


স্পষ্টতই এটি Rails 4.0.1অ্যাপ্লিকেশনগুলিতেও ঘটে ।
lucke84

2
R.২.১6 রেলগুলিতেও আমার একই রয়েছে। নীচে সিমোন কার্লেটির উত্তর অনুসারে, এটি রেল 4 (> = 4.0.2) এবং রেলগুলি 3.2 (> = 3.2.14) এ রয়েছে।
মার্ক বেরি

উত্তর:


615

গুরুত্বপূর্ণ : আপনার অ্যাপটি আই 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

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

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

  2. আপনি যদি তৃতীয় পক্ষের রত্ন ব্যবহার করেন যা 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)>'",
    

20
আপনি যদি config.i18n.default_localeকনফিগারেশনটি সেট করে থাকেন তবে নিশ্চিত হয়ে নিন যে আপনি নতুন সেটিংস সেট করার পরে এটি করেছেন config.i18n.enforce_available_locales। অন্যথায়, হ্রাসের সতর্কতাটি পপিং করতে থাকবে।
ফেবিও বাতিস্তা

3
আমার জন্য, যদি আমি সেট করি তবেই কাজ করে I18n.enforce_available_locales = trueconfig.i18n.enforce_available_locales = trueকাজ না
পিয়োজ

1
@ পাইওজ আপনার অ্যাপ্লিকেশন নির্ভর রত্ন দ্বারা এটি হতে পারে। আমি পোস্টটি আপডেট করেছিলাম কেন তা ব্যাখ্যা করার জন্য।
সিমোন কার্লেটি

@ সিমোন কার্লেটি সরাসরি কলটি হওয়া উচিত I18n.config.enforce_available_localesনয় I18n.config.i18n.enforce_available_locales, আমি আপনার উত্তর সম্পাদনা করেছি। সংশোধন করার জন্য ধন্যবাদ।
ফ্যাবিও

1
এটি উল্লেখ করা উচিত যে একটি I18n.config.available_locales = [:your_locale, :en]উদাহরণস্বরূপ সেট করতে হবে, অন্যথায় আপনি আপনার রেল সার্ভার শুরু করতে সক্ষম হবেন না।
টেমার শ্ল্যাশ

45

শুধু সম্পূর্ণতার জন্য, দয়া করে মনে রাখবেন আপনার কাছে সেটিং দ্বারা সতর্কবার্তা পরিত্রাণ পেতে পারেন I18n.enforce_available_localesকরতে true(বা false) এ config/application.rb:

require File.expand_path('../boot', __FILE__)
.
.
.
module SampleApp
  class Application < Rails::Application
    .
    .
    .
    I18n.enforce_available_locales = true
    .
    .
    .
  end
end

9
এটা কি আরও সুন্দর হবে না config.i18n.enforce_available_locales = true?
Mischa

2
আমি 3.2.16 তে আছি, আমি I18n.enforce_available_locales = মিথ্যাতে সেট, কিন্তু আমি এখনও বার্তা আছে ...
চাপড়া

3
@ মিশা আমার পক্ষে কাজ করে নি, উপরের উত্তরটি যদিও দেয়।
মাইক অ্যাটলাস

1
@ মিশা দুঃখজনকভাবে নয়, এর I18n.configপ্রভাব ফেলতে
পেরেছিলেন

3
config.i18n.enforce_available_locales = trueকনফিগারেশন / অ্যাপ্লিকেশন.আরবি R.০.২-তে আমার জন্য অবজ্ঞার সতর্কতাটি দূর করেছে, তবে কেবল যদি আমি এটি অন্য config.i18nলাইনের উপরে রাখি ।
ভালেক্স্যান্ড

15

I18n.config.enforce_available_locales = true আমার জন্য রেল ৩.২.১6 এ কাজ করেছে (আমি এটি কনফিগারেশন / অ্যাপ্লিকেশন.আরবিতে রেখেছি)


10

এইভাবে মনে হয় না - এটি আই 18 এন এর যেভাবে কাজ করে তার আগের আচরণ - নতুন আচরণ (সত্য) কোনও ত্রুটি বাড়িয়ে তুলবে যখন আপনি কোনও স্থানীয় প্রয়োগ না করা / উপলব্ধ না করার জন্য জিজ্ঞাসা করবেন।

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


0

আপনি যদি লোকালগুলি যত্ন নিতে চান তবে appilcation.rbফাইলে লিখুন ।

config.i18n.enforce_available_locales = true

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.