কখনও কখনও, সেরা ব্লগ পোস্ট আপনার নিজের চুলকানি স্ক্র্যাচ একটি প্রয়োজন থেকে আসে. এবং আজকের ব্লগ পোস্ট তার একটি উদাহরণ!
আপনি সম্ভবত ডিভাইস জানেন- রেল অ্যাপ্লিকেশনের জন্য একটি জনপ্রিয় প্রমাণীকরণ সমাধান। ডিভাইসের সাথে কাজ করার সময়, আমি দেখেছি যে অনুবাদ করা এবং চালানো আমার প্রত্যাশার চেয়ে বেশি জটিল ছিল। অতীতে আমার ইচ্ছা ছিল যে একটি চেকলিস্ট আছে যা আমাকে প্রক্রিয়াটির মাধ্যমে গাইড করতে সহায়তা করতে পারে।
তাই এখানে - ভবিষ্যতে আমার এবং আপনার জন্য - চূড়ান্ত ডিভাইস আন্তর্জাতিকীকরণ চেকলিস্ট!
কখন (না) devise-i18n Gem ব্যবহার করবেন?
Devise-এর নীতি হল Devise view-এর স্ট্রিংগুলিকে অনুবাদযোগ্য না করা৷ সমস্ত স্ট্রিং হার্ড কোডেড হয়. devise-i18n রত্ন-এর নির্মাতাদের ধন্যবাদ, যা সমস্ত Devise টেমপ্লেটকে অনুবাদযোগ্য করে তোলে এবং সম্প্রদায়-উৎসিত অনুবাদও প্রদান করে। আন্তর্জাতিক অ্যাপের জন্য, যেখানে আপনার বহু-ভাষা সমর্থন প্রয়োজন, সেখানে devise-i18n রত্ন হল সবচেয়ে সহজ সমাধান৷
যাইহোক, devise-i18n মণি স্পষ্টভাবে যতটা সম্ভব ঘনিষ্ঠভাবে Devise পাঠ্য অনুসরণ করতে পছন্দ করে। কিন্তু Device যে পাঠ্য প্রদান করে তা শুরু করার জন্য খুব সামঞ্জস্যপূর্ণ নয়। এবং যেহেতু আক্ষরিক অনুবাদ কখনই সাবলীল ভাষা তৈরি করবে না, আমি ক্রমাগত অনুবাদগুলিকে টুইক করছি (এবং প্রকল্পগুলির মধ্যে ফাইলগুলি অনুলিপি করছি)। এটি একটি চলমান সংগ্রাম কারণ একটি সময়ে একটি স্ট্রিং বা একটি ভিউ দেখার সময় সমস্ত অনুবাদ সামঞ্জস্যপূর্ণ করা কঠিন৷
ফলস্বরূপ, i18n-devise gem-এর অনুবাদের গুণমান আমার একভাষিক, ডাচ-শুধুমাত্র প্রকল্পগুলির জন্য প্রয়োজনীয় মানগুলিতে পৌঁছায় না৷
রত্ন ব্যবহার করার আরেকটি অসুবিধা কাস্টমাইজড দৃশ্যের সাথে দেখা দেয়। এমনকি যখন এটি শুধুমাত্র স্টাইলিং এর সাথে সম্পর্কিত, devise-i18n রত্নটির প্রতিটি আপডেট যা Devise দৃষ্টিভঙ্গিতে করা যে কোনও পরিবর্তনকে স্পর্শ করে, তার অর্থ আপনাকে জিনিসগুলি ঠিক করতে হবে৷ আপনাকে হয় ভিউগুলি পুনরুত্পাদন করতে হবে এবং কাস্টমাইজেশনগুলি প্রয়োগ করতে হবে বা আপনাকে আপনার দৃশ্যগুলিতে পরিবর্তনগুলি অনুলিপি/পেস্ট করতে হবে৷ যাইহোক, নীচের চেকলিস্টের পদ্ধতির মাধ্যমে এই সমস্যাটি সমাধান করা হয় না, তবে এটি devise-i18n রত্ন ছাড়া সমাধান করা আরও কঠিন নয়। 🤷♀
🇳🇱 একটি ডাচ ট্রিট
আমি ডিভাইসের জন্য একটি চমৎকার ডাচ অনুবাদ ফাইল তৈরি করার সিদ্ধান্ত নিয়েছি, এবং এটি নিয়ে আর কখনও চিন্তা করতে হবে না। একটি ট্রিট মত শোনাচ্ছে? আপনি GitHub এ নতুন এবং উন্নত অনুবাদ ফাইল খুঁজে পেতে পারেন। চেকলিস্টে ধাপ 3 দেখুন। প্রতিটি অনুবাদের সিদ্ধান্তের যৌক্তিকতা ফাইলটিতে ব্যাখ্যা করা হয়েছে।
আল্টিমেট চেকলিস্ট
এখন যেহেতু আমরা :nl অনুবাদের সাথে একা উড়ছি, আসুন সমস্ত বিবরণ দিয়ে শুরু করি এবং বাক্সগুলি চেক করা শুরু করি৷
নোট করুন যে এটি ধরে নেয় যে আপনার কাছে একটি অ্যাপ প্রস্তুত রয়েছে, যার সাথে একটি ব্যবহারকারী মডেলের সাথে Devise যোগ করা এবং ইনস্টল করা হয়েছে এবং Devise ভিউ জেনারেট হয়েছে। আপনি যদি বরাবর কোডিং করছেন:এটি হল শুরুর পয়েন্ট। এবং মনে রাখবেন যে nl
*.nl.yml
-এ আপনার পছন্দের ভাষা দ্বারা প্রতিস্থাপিত করা যেতে পারে, এবং সেই User এবং :user কে আপনি ডিভাইসে ব্যবহার করা মডেল নামের দ্বারা প্রতিস্থাপিত হতে পারে।
প্রথম ধাপ:লোকেল সেট করুন
:nl
যোগ করুন উপলভ্য লোকেলগুলিতে (যদি আপনার এই বিষয়ে দৃঢ় মতামত না থাকে, তাহলে এটি application.rb
এ রেখে শুরু করুন আপাতত)। এখন আপনি এটিকে ডিফল্ট হিসাবে সেট করতে পারেন৷
# application.rb
config.i18n.available_locales = [:nl, :en]
config.i18n.default_locale = :nl
application.rb
এ যোগ করার চেয়ে লোকেল সেট করার জন্য আরও ভাল, সম্ভবত ক্লিনার বিকল্প রয়েছে . আপনার জন্য সবচেয়ে উপযুক্ত বিকল্পটি বেছে নিতে এই পোস্টটি পড়ার পর Rails i18n গাইডটি দেখুন৷
ধাপ দুই:রেল অনুবাদ যোগ করুন
ইন্টারফেসের স্ট্রিংগুলির যত্ন নিতে Rails :nl অনুবাদ ফাইলটি যুক্ত করুন যা ডিভাইস নির্দিষ্ট নয় (বিশেষ করে রেলের বৈধতা ত্রুটি বার্তাগুলি)।
ধাপ তিন:ডিভাইস কী
ডিভাইস কীগুলিকে :nl
-এ অনুবাদ করুন :নতুন এবং উন্নত ডাচ অনুবাদ যোগ করুন! (উপরের লিঙ্ক 🇳🇱)
চতুর্থ ধাপ:ভিউ তৈরি করুন।*.yml ফাইল
ডাচ এবং ইংরেজি .yml
যোগ করুন দৃশ্যের জন্য ফাইল, views.*.yml
. রেপোতে একটি সমাপ্ত views.nl.yml ফাইলের উদাহরণ রয়েছে, ধাপ 4, 6 এবং 7 প্রতিফলিত করে৷
#example views.nl.yml
nl:
devise:
# to be filled in later with Devise scopes:
# registrations:
# new:
# forget_password: Wachtwoord vergeten?
পঞ্চম ধাপ:সক্রিয় রেকর্ড বৈশিষ্ট্যগুলি
এখন, ইমেল এবং পাসওয়ার্ডের মতো অ্যাক্টিভ রেকর্ড অ্যাট্রিবিউটের লেবেলের জন্য অনুবাদ যোগ করুন। আপনার প্রয়োগ করা প্রতিটি মডিউলের জন্য ব্যবহারকারী এবং প্রশাসক ব্যবহারকারীরা যেগুলি দেখেন সেগুলিই অনুবাদ করুন৷ টোকেন নাম এবং যেমন অনুবাদ করার প্রয়োজন নেই (যেমন i18n রত্ন করে)। এখানে আমি কি দরকারী 'অনুবাদযোগ্য' বিবেচনা করি:
# In: active_record.nl.yml
# translating the labels that map to User attributes
nl:
activerecord:
attributes:
user:
current_password: Huidig wachtwoord
email: e-mailadres
password: wachtwoord
password_confirmation: Wachtwoord bevestigen
remember_me: Ingelogd blijven?
models:
user: Gebruiker
মনে রাখবেন যে :email
এবং :password
মান হ্রাস করা হয়। এটি ধাপ 7-এ রেল ত্রুটি বার্তাগুলিতে পরিবর্তনের কারণে।
আপাতত, কীগুলি active_record.*.yml
-এ রাখুন .
ছয় ধাপ:প্রতিটি ডিভাইস ভিউ পরীক্ষা করুন
এর পরে, সমস্ত ডিভাইস-নির্দিষ্ট টেমপ্লেট এবং স্ট্রিংগুলিকে সংশ্লিষ্ট অনুবাদের সাথে i18n-ed হতে হবে। এটি নিজে করা একটি বিরক্তিকর কাজ। আপনি এটিতে ডুব দেওয়ার আগে, দেখুন এই শর্টকাটগুলির মধ্যে একটি আপনার জন্য কাজ করে কিনা:
-
আপনি দর্শনের জন্য 118n-ডিভাইস রত্ন ব্যবহার করতে পারেন, তবে আপনাকে এখনও রত্নটির
.yml
থেকে কীগুলি অনুলিপি করতে হবে আপনার প্রকল্পের.yml
-এ ফাইলগুলি নথি পত্র. রত্নটি তাদেরdevise.*.yml
-এ বিভক্ত করে , কিন্তু আমরা আমাদের সুন্দর নতুন ডাচ অনুবাদ ওভাররাইট করতে চাই না। এবং আপনি যদি ডিভাইস ভিউ স্টাইল করে থাকেন তবে আপনাকে স্টাইলিংটিও কপি করতে হবে। ইয়াহ। -
আপনার যদি ইতিমধ্যেই i18n-ed প্রকল্প থাকে, তাহলে আপনি ভিউ ফাইল কপি করতে পারেন। (পূর্ববর্তী বিকল্পের মতো এর সাথে একই অসুবিধা।)
-
আমার সাম্প্রতিক প্রজেক্টে আমি যে কয়েকটি ভিউ ব্যবহার করেছি তার উদাহরণের জন্য রেপো ব্যবহার করুন।
অথবা এটি একবার এবং সব জন্য সমাধান করুন:মাথা নিচু করুন, ফাইলগুলির একটি সেট তৈরি করুন যা আপনি এখন থেকে ব্যবহার করতে পারেন, ঠিক যেভাবে আপনি সেগুলি হতে চান৷ পূর্ববর্তী ধাপের উদাহরণগুলি আমার নিজের প্রথম সংস্করণ; তারা আপনাকে আপনার নিজের শুরু করতে সাহায্য করতে পারে। সমস্ত প্রয়োজনীয়তার জন্য নীচের মিনি-চেকলিস্টটি দেখুন।
ডিভাইস ফর্মের জন্য মিনি চেকলিস্ট
- যে স্ট্রিংগুলি অ্যাক্টিভ রেকর্ড স্ট্রিং নয় তাদের 118n-ed হতে হবে এবং (সঠিকভাবে স্কোপড) কী এবং অনুবাদ থাকতে হবে (যেমন, একটি
views.*.yml
ফাইল—উদাহরণ দেখুন)। - খেয়াল রাখবেন যে ডাচ অনুবাদগুলি, আপনার নিজস্ব যোগ করার সময়, নতুন
devise.nl.yml
এর সাথে সামঞ্জস্যপূর্ণ। . - ডাউনকেস করা লেবেল উপেক্ষা করুন; সেগুলিকে 7 ধাপে সঠিকভাবে বড় করা হবে৷
- যদি আপনার কাছে ইতিমধ্যেই i18n-ed মেইলার থাকে, তাহলে ঠিক আছে। যদি না হয়, আপনি ধাপ 8 পর্যন্ত তাদের উপেক্ষা করতে পারেন।
- নিম্নলিখিত ডিভাইস ভিউগুলিকে রেল ট্রান্সলেট (
t
) দিয়ে অনুবাদযোগ্য করে তুলতে হবে ) সহায়ক:-
devise/views/shared/_links
আংশিক:সমস্ত লিঙ্কের নাম; -
devise/views/shared/_errors
আংশিক (ডিভাইস 4.6 থেকে) - আপনার ব্যবহার করা প্রতিটি মডিউলের জন্য ডিভাইস ফর্মগুলিতে:সমস্ত স্ট্রিং যা সক্রিয় রেকর্ড বৈশিষ্ট্যগুলির জন্য লেবেল নয়৷
-
পদক্ষেপ সাত:সক্রিয় রেকর্ড ত্রুটি বার্তা
এর পরে, আমাদের সক্রিয় রেকর্ড ত্রুটি বার্তাগুলিকে টুইক করতে হবে যা ডিভাইস কার্যকারিতার সাথে সম্পর্কিত। যেমন "পাসওয়ার্ড খালি হতে পারে না", এবং অন্যান্য বৈধতা।
ব্যাপারটি হল, এখন আমরা ডিভাইস অনুবাদগুলি আপগ্রেড করেছি, সক্রিয় রেকর্ড বার্তাগুলিকেও টুইক করা দরকার কারণ শৈলীতে অসামঞ্জস্যতা সত্যিই দেখা যাচ্ছে। তাই আমি সেগুলিকেও টুইক করেছি, একই নিয়ম অনুসরণ করে যা ডিভাইস অনুবাদের জন্য, এবং নিশ্চিত করে যে সেগুলি সামঞ্জস্যপূর্ণ।
আপনি দেখতে পাবেন যে বার্তাগুলির বিন্যাস পরিবর্তিত হয়েছে:"%{attribute} %{message}" থেকে "%{message}"। এখন আমরা স্ট্রিংয়ের শুরুতে এটিকে জোরপূর্বক করার পরিবর্তে অনুবাদিত স্ট্রিংয়ের মধ্যে বৈশিষ্ট্যটি উল্লেখ করছি, এটি ডাচ বার্তাগুলিকে সুন্দর করা এত সহজ করে তোলে। কখনও কখনও অদ্ভুত বার্তাগুলি সহ্য করার চেয়ে আমার কাছে নকল রয়েছে৷
নতুন মেসেজ ফরম্যাটের কারণে, ধাপ 5-এ, ইমেল এবং পাসওয়ার্ডের বৈশিষ্ট্যগুলিকে ডাউনকেস করতে হবে:ত্রুটি বার্তাগুলিতে, সেগুলি একটি বাক্যের মধ্যে যে কোনও জায়গায় উপস্থিত হতে পারে৷
আমি :taken
ও প্রতিস্থাপন করেছি বার্তা ডিভাইস নীতি হল একটি ইমেল ঠিকানা 'পাওয়া যায়নি' বা 'অবৈধ' হলে তা প্রকাশ না করা। আমি সেই নীতিকে রেলের taken
পর্যন্ত প্রসারিত করেছি বার্তা৷
আপনি যদি নতুন বার্তা শৈলী অনুসরণ করতে চান তাহলে এই ফাইলটি দেখুন। তারপর রেলের সংশ্লিষ্ট অংশটি প্রতিস্থাপন করুন error: messages:
মূল nl.yml
-এ কী ফাইল একটি সতর্কতা:আপনি যখন ডিভাইস-সম্পর্কিত ইনপুটের জন্য বৈধতা যোগ করছেন, তখন ত্রুটি বার্তাগুলি এখনও অর্থপূর্ণ কিনা তা অনুগ্রহ করে দুবার পরীক্ষা করুন। (আমাকে আরও তদন্ত করতে হবে; আমি শুধুমাত্র ডিভাইসের সাথে সম্পর্কিত যেগুলি পরীক্ষা করেছি৷)
ধাপ আট:আমরা এইমাত্র যে লেবেলগুলি ভেঙেছি তা ঠিক করুন
ধাপ 5-এ, আমরা নতুন ত্রুটি বার্তাগুলিতে ব্যবহারের জন্য ইমেল এবং পাসওয়ার্ড অনুবাদগুলি কমিয়ে দিয়েছি। এখন আমাদের লেবেল-এ তাদের চেহারা ঠিক করতে হবে . বেশ কয়েকটি বিকল্প আছে, কিন্তু আমি যেটি সবচেয়ে পছন্দ করি তা হল পৃথক 'লেবেল' কী যোগ করা৷
৷এটি ব্যবহারকারী কীগুলির জন্য কিছু সদৃশতা যোগ করে, তবে এটি ফর্মগুলিতে লেবেলগুলিকে পরিষ্কার রাখে৷
# in active_record.nl.yml add the label helper keys:
nl:
activerecord:
attributes:
user:
current_password: Huidig wachtwoord
email: e-mailadres
password: wachtwoord
password_confirmation: Herhaal het wachtwoord
remember_me: Wil je ingelogd blijven?
models:
user: Gebruiker
helpers:
label:
user:
email: Emailadres
password: Wachtwoord
মনে রাখবেন যে ইতিমধ্যেই একটি :helpers
আছে মূল nl.yml
-এ সুযোগ . সাধারণভাবে, সহজে খোঁজার জন্য (মানুষের দ্বারা) একটি সুযোগের চাবিগুলো একসাথে রাখা ভালো ধারণা।
অন্যান্য পরিবর্তন আমাদের করতে হবে সোজা। এখান থেকে কোন বড় চমক আসবে না। 🎉।
নয় ধাপ:নেভিগেশন লিঙ্ক আপডেট করুন
সমস্ত লিঙ্কগুলি সন্ধান করুন যা ডিভাইসকে নির্দেশ করে (নেভিগেশন ভাবুন) এবং রেল t
দিয়ে i18n সাহায্যকারী।
আমি সেগুলিকে .yml-এর ডিভাইজ স্কোপের মধ্যে রাখতে পছন্দ করি। উদাহরণস্বরূপ, আমি t(".devise.sign_out")
যোগ করব :sign_out
থাকতে :sign_up
এর মতো একই সুযোগে এবং :sign_in
(উদাহরণ ফাইল দেখুন)।
দশ ধাপ:মেইলারদের অনুবাদ করুন।
মেইলার ভিউ অনুবাদ করুন। কয়েকটি বিকল্প আছে:
-
আপনি প্রতিটি স্ট্রিং এবং লিঙ্কের নাম 'i18n' করতে পারেন, যেমনটি আমরা ধাপ 6-এ অন্যান্য ভিউয়ের সাথে করেছি। আপনি একটি আলাদা
mailer.*.yml
যোগ করতে চাইতে পারেন . -
অথবা আপনি প্রতিটি লোকেলের জন্য আলাদা মেইলার ভিউ যোগ করতে পারেন:
devise/mailer/reset_password.nl.html.erb
এবংdevise/mailer/reset_password.en.html.erb
. তাদের নিজস্ব টেক্সট সঙ্গে প্রতিটি. রেল সেট করা লোকেলের সাথে মেলে এমন একটি বেছে নেবে।
ঠিক আছে! এখন সমস্ত ডিভাইস স্ট্রিং সঠিকভাবে অনুবাদ করা হয়েছে। হ্যাঁ!
আফটার কেয়ার:ডিক্লাটার
আমার দৃষ্টিভঙ্গির উদাহরণে, আমি শেয়ার করা কীগুলি বের করেছি (যেমন :forgot_password
) এবং সেগুলিকে সাধারণ পরিকল্পনার সুযোগে সংগ্রহ করে। এটি তাদের পরিবর্তন করা সহজ করে তোলে, কিন্তু রেলগুলি স্বয়ংক্রিয়ভাবে সেগুলি খুঁজে পায় না, তাই আমাদের ভার্বোজ সিনট্যাক্স প্রয়োজন (t("devise.forgot_password")
), কারণ ডট সিনট্যাক্স (t(".new_confirmation_mail")
) কাজ করবে না।
আপনি যদি active_record.*.yml
দিয়ে যান , এটি সেই ফাইলে সক্রিয় রেকর্ড স্কোপ সহ সমস্ত কী সংগ্রহ করা বোধগম্য। রেল *.yml
থেকে সক্রিয় রেকর্ড কীগুলি সরান৷ সংশ্লিষ্ট active_record.*.yml
-এ ফাইলগুলি .
আমাদের কাছে দুটি জোড়া *.yml
আছে যে ফাইলগুলি devise:
নকল করে সুযোগ devise.*.yml
-এ ডিভাইস ভিউ থেকে কীগুলি মিশ্রিত করার কথা বিবেচনা করুন ভিউ Devise-i18n মণি এটিই করে এবং আমি এটি পছন্দ করি। আপনি এটি এভাবে করবেন:
# mixing the view scopes into devise.nl.yml
nl:
devise:
confirmations:
...
registrations:
...
edit:
...
new:
...
কিছু পরিবর্তন এবং টিপস
- আমি ত্রুটি বার্তার শিরোনামটির ভক্ত নই ('x ত্রুটিগুলি এই ব্যবহারকারীকে সংরক্ষিত হতে নিষেধ করেছে'), তাই আমি এটিকে
errors
থেকে সরিয়ে দিয়েছি আংশিক। - যদি আপনি
default_locale
সেট করেন:nl
-এ , রেলগুলি কীগুলিকে 'মানবীয়করণ' করবে যদি এটি একটি অনুবাদ খুঁজে না পায়। সুতরাং,t(:some_untranslated_key)
Some Untranslated Key
হিসাবে দেখাবে দৃশ্যে। - I18n-টাস্ক রত্ন দিয়ে আপনি অব্যবহৃত কীগুলি পরিষ্কার করতে পারেন এবং অনুপস্থিত কীগুলি যোগ করতে পারেন৷ এটি একটি মহান হাতিয়ার! যাইহোক, আমার IDE-তে দারুণ i18n সমর্থন রয়েছে এবং আমার জন্য এটি রত্নটির চেয়ে দ্রুত কর্মপ্রবাহ হিসাবে পরিণত হয়েছে।
বিচ্ছেদ খুব মিষ্টি দুঃখ
আমরা অংশ আগে একটি দ্রুত চূড়ান্ত শব্দ. আমি যখন এই যাত্রা শুরু করি তখন আমি আশা করিনি যে এটি এতটা কাজ হবে যতটা পরিণত হয়েছে। আমি খুব খুশি যে আমি এখন জানি জটিলতা কোথা থেকে আসে। এবং ভবিষ্যতে আমি এবং আপনার কাছে এখন প্রয়োজনীয় সমস্ত পরিবর্তনের একটি তালিকা রয়েছে। উহু!
কিন্তু এই চেকলিস্ট হাতে থাকা সত্ত্বেও, আপনি কাজ করার আগে চিন্তা করুন:হয়ত কিছু সময়ের জন্য কম সর্বোত্তম অনুবাদের সাথে বেঁচে থাকা মূল্যবান…