কম্পিউটার

রেল I18n:3 টি দ্রুত টিপস এবং 1 পাগল অপব্যবহার

Rails' i18n লাইব্রেরি যতটা দেখায় তার চেয়ে বেশি শক্তিশালী। আপনাকে শুধুমাত্র অনুবাদের জন্য এটি ব্যবহার করতে হবে না। i18n লাইব্রেরি যেখানেই আপনি যে টেক্সটটি প্রদর্শন করতে চান সেখান থেকে ডিক্যুপল করতে চান।

আমি যখন Avvo তে ছিলাম, আমরা কিছু সত্যিই দুর্দান্ত জিনিস করতে i18n ব্যবহার করেছি। আমি কিছু জিনিস শেয়ার করতে যাচ্ছি যা আমরা শিখেছি যেগুলি কাজে এসেছে, সেই সাথে লাইব্রেরির একটি পাগলাটে অপব্যবহার যা আমাদের জন্য অবিশ্বাস্যভাবে ভাল কাজ করেছে৷

স্বয়ংক্রিয় HTML এস্কেপিং

আপনার কি এমন লাইন আছে যা দেখতে:

<%= raw(t('form.required_field_header')) %>

আপনার দৃষ্টিতে? আপনার সেই raw দরকার নেই , কারণ যদি আপনার অনুবাদ কী _html দিয়ে শেষ হয় , আপনি বিনামূল্যে পালাতে পারবেন:

<%= t('form.required_field_header_html') %>

সহজ, এবং আপনার অন্যান্য t() এর সাথে আরও সামঞ্জস্যপূর্ণ কল।

আরো সুবিধাজনকভাবে লোকেল অ্যাক্সেস করা

আপনি যখন আপনার লোকেল ফাইলগুলি তৈরি করেন, তখন সম্ভবত আপনার কিছু কী একই অভিভাবকের অধীনে গোষ্ঠীবদ্ধ থাকবে:

en:
  bugs:
    index:
      new_label: "File a new bug"
      edit_label: "edit"
      delete_label: "delete"

এই সব একসাথে উল্লেখ করার জন্য, আপনি পারতে পারেন৷ তাদের সম্পূর্ণ কী দ্বারা তাদের উল্লেখ করুন:

<%= t('bugs.index.edit_label') %> | <%= t('bugs.index.delete_label') %>

এটি বেশ বিরক্তিকর এবং পুনরাবৃত্তিমূলক। কিন্তু t() সহায়কভাবে একটি সুযোগ নেয়, যাতে আপনি কীগুলি আরও সুবিধাজনকভাবে উল্লেখ করতে পারেন:

<% bugs_scope = 'bugs.index' -%>
<%= t('edit_label', scope: bugs_scope) %> | <%= t('delete_label', scope: bugs_scope) %>

আপনি যদি আপনার আংশিকগুলির নাম ভাল রাখেন, তাহলে আপনাকে সুযোগটি নির্দিষ্ট করারও প্রয়োজন নেই:

app/views/bugs/index.html.erb
<%= t('.edit_label') %> | <%= t('.delete_label') %>

অর্থাৎ, .edit_label রেফারেন্স bugs.index.edit_label , কারণ আপনি bugs/index.html.erb-এ আছেন .

ActiveRecord ব্যাকএন্ড

কখনও কখনও, একটি yaml ফাইলে স্ট্যাটিক অনুবাদগুলি আপনার প্রকল্পের জন্য কাজ করবে না। আপনি যদি এর পরিবর্তে ActiveRecord i18n ব্যাকএন্ড ব্যবহার করেন:

config/initializers/locale.rb
require 'i18n/backend/active_record'
I18n.backend = I18n::Backend::ActiveRecord.new

আপনি একটি translations অনুবাদগুলি দেখতে পারেন৷ আপনার ডাটাবেসে টেবিল। এইভাবে, আপনাকে আপনার সমস্ত অনুবাদকে আগে থেকে সংজ্ঞায়িত করতে হবে না। পরিবর্তে, আপনি ফ্লাইতে নতুন অনুবাদ যোগ করতে পারেন।

translations সেট আপ করা হচ্ছে টেবিল একটি নির্দিষ্ট স্থানান্তর প্রয়োজন. i18n-active_record রেপোতে README তে এটিকে কাজ করার জন্য আপনার প্রয়োজনীয় সমস্ত তথ্য রয়েছে৷

অবজেক্টের প্রকারের মধ্যে আংশিক ভাগ করা

Avvo-তে, আমাদের কাছে একটি আইনজীবী ডিরেক্টরি, অ্যাটর্নি পর্যালোচনা এবং আইনি পরামর্শ রয়েছে। কিন্তু কয়েক বছর আগে, আমাদের সাইটে শুধু আইনজীবী ছিল না। আমাদেরও ডাক্তার এবং ডেন্টিস্ট ছিল!

আমাদের অনেক UI এই পেশাগুলির মধ্যে একই ছিল। কিন্তু যথেষ্ট ভিন্ন ছিল (উদাহরণস্বরূপ, আইনজীবীরা যাকে "অনুশীলনের এলাকা" বলে, ডাক্তাররা "বিশেষজ্ঞ" বলে), যে কিছু সুন্দর কুশ্রী কোড ছাড়া একই মতামত বা আংশিক ভাগ করা কঠিন।

অবশেষে, আমরা এটির জন্য i18n সিস্টেমে ঝুঁকতে চেষ্টা করার কথা ভেবেছিলাম। সর্বশেষে, ইংরেজী আইনজীবী হল ধরনের ইংরেজির একটি উপভাষা, এবং ডক্টরিজ একই ভাবে . আমরা শেষ পর্যন্ত অন্য ভাষা ব্যবহার করা থেকে নিজেদের অবরুদ্ধ করতে চাইনি, তাই আমরা দুটি নতুন লোকেল তৈরি করার সিদ্ধান্ত নিয়েছি:en_jd এবং en_md .

এটি একটি কাস্টম i18n ব্যাকএন্ড হিসাবে সেট আপ করা সহজ বলে প্রমাণিত হয়েছে:

class AvvoI18nStore < I18n::Backend::Simple
  def translate(locale, key, options = {})
    begin
      default = options.delete(:default)
      super(locale, key, options)
    rescue I18n::MissingTranslationData => e
      # fall back to "en" if we can't find anything under "en_jd", etc.
      fallback_locale = locale.to_s.split("_").first
      super(fallback_locale, key, options.merge(:default => default))
    end
  end
end

I18n.backend = AvvoI18nStore.new

এবং অনুবাদ সংজ্ঞায়িত করা ঠিক ততটাই সহজ ছিল:

en_jd:
  practice_area: "practice area"

en_md:
  practice_area: "specialty"

এটি সম্পূর্ণ আংশিক অনুবাদ করার জন্যও দুর্দান্ত কাজ করেছে (ফাইলের নামটি নোট করুন):

app/views/questions/_answer_badge.en_jd.html.erb
<!-- Lawyer badge HTML -->
app/views/questions/_answer_badge.en_md.html.erb
<!-- Doctor badge HTML -->

এমনকি এটি আবার en-এ পড়ে লোকেল, শেয়ার করা অনুবাদের জন্য:

en:
  leaderboard:
    title: "Leaderboard"

আপনি যখন সাইটের "ডাক্তার" বিভাগে ছিলেন, আমরা ডিফল্ট লোকেল পরিবর্তন করে :en_md করেছি , এবং তদ্বিপরীত:

I18n.locale = :en_md

এবং সবকিছুই কাজ করেছে!

আমি নিশ্চিত নই যে আমি এটি সুপারিশ করব। এটি একটি সামান্য বাদাম, বিভিন্ন পেশার বিভিন্ন ভাষা নিয়ে চিন্তা করা। কিন্তু আমরা এটি করার সময় এটি আশ্চর্যজনকভাবে ভাল কাজ করেছে। এবং এটি প্রকাশ করে যে i18n-এর মতো সাধারণ সরঞ্জামগুলিতে কতটা শক্তি থাকতে পারে৷

আপনি এই জিনিসটি কোথা থেকে তুলেছেন?

গত সপ্তাহে, আমি একজন শিক্ষানবিস থেকে একজন বিশেষজ্ঞের কাছে যাওয়ার উপায় হিসেবে নির্দিষ্ট প্রযুক্তির গভীরে ডুব দেওয়ার কথা বলেছিলাম। এটি তার আরেকটি উদাহরণ:i18n সম্পর্কে আমরা যা শিখেছি তার বেশিরভাগই আমরা রেল গাইড এবং API ডক্স পড়ে শিখেছি।

সুতরাং, সেই অতিরিক্ত পদক্ষেপ নিন। আপনি ভালভাবে নির্ভরশীল টুল শিখুন. আপনি দেখতে পাবেন যে আপনি এমন সুবিধা এবং কৌশলগুলির মধ্যে চলে যাবেন যা আপনাকে কেবল আরও বেশি উত্পাদনশীল করে তুলবে না, তবে এমন নতুন বিভাগগুলি আনলক করতে পারে যা আপনি অন্যথায় কখনও ভাবেননি।


  1. সেরা টিপস:Windows 8 এবং 8.1 এ Outlook

  2. বাইবাগ, রেল এবং পা দিয়ে রিমোট ডিবাগিং

  3. Redis জন্য 10 দ্রুত টিপস

  4. উৎপাদনশীলতা বাড়াতে 10টি দ্রুত Gmail টিপস এবং কৌশল৷