মূল মডিউল এবং কখনও কখনও টেমপ্লেটগুলিতে, আমি অনুবাদকের জন্য সহায়ক ক্লাসগুলি ব্যবহার করা দেখছি:
Mage::helper('someModule')->__('translate me');
এটি কেন পছন্দনীয়:
$this->__('translate me');
মূল মডিউল এবং কখনও কখনও টেমপ্লেটগুলিতে, আমি অনুবাদকের জন্য সহায়ক ক্লাসগুলি ব্যবহার করা দেখছি:
Mage::helper('someModule')->__('translate me');
এটি কেন পছন্দনীয়:
$this->__('translate me');
উত্তর:
কেবল তাত্ত্বিক, তবে যখন আপনি কল করবেন
$this->__('Foo')
কোনও টেমপ্লেটে, কোন মডিউলের সিএসভি অনুবাদ ফাইলটি ম্যাগান্তো ফু অনুবাদ করতে ব্যবহার করবে?
এটি সর্বদা পরিষ্কার নয় যে মডিউলটির অনুবাদ সহায়ক ম্যাগেন্টো শেষ পর্যন্ত স্ট্রিং / কী অনুবাদ করতে কল করবে। যেহেতু ম্যাজেন্টো আপনাকে বিভিন্ন স্ট্রিংয়ের জন্য বিভিন্ন মডিউলে একই কী ব্যবহার করতে দেয় তাই আপনি কোন মডিউলটির অনুবাদ ডেটা ব্যবহার করছেন তা প্রায়শই জানা গুরুত্বপূর্ণ। প্রকৃতপক্ষে, যদি কোনও টেম্পলেট একাধিক মডিউল জুড়ে ব্যবহৃত হয়, তবে $this->__()এটি "ক্ষতিকারক হিসাবে বিবেচিত হবে" হিসাবে ব্যবহার করা হতে পারে, কারণ এটি লেআউট সিস্টেমটিতে টেমপ্লেটটি ব্যবহার করে তা ব্লক প্রসঙ্গে নির্ভর করে বিভিন্ন মান প্রদান করে।
আমার অনুমান যে সুবিধার্থে সহায়তাকারীদের সামনে যোগ করা হয়েছিল, তবে বিকাশকারীরা তাড়াতাড়ি তাড়াতাড়ি ইনস্টল করা শুরু করে যাতে তারা জানত যে কোন মডিউলের অনুবাদ ফাইলটি কোনও স্ট্রিং অনুবাদ করবে এবং সেই প্যাটার্নটি কাঠামোর পরীক্ষায় ছড়িয়ে পড়ে। কোডের এই লাইনটি নিজেই দ্ব্যর্থক।
$this->__('Foo');
তবে আপনি নিশ্চিত হতে পারেন যে এই লাইন কোডটি Mage_Catalogস্থানীয়করণ তথ্য ব্যবহার করবে ।
Mage::helper('catalog')->__('Foo')
কারণ আপনি একটি সুস্পষ্ট মডিউল ব্যবহার করতে চান।
আপনি যদি $this->__()কোনও ব্লক প্রসঙ্গে ব্যবহার করেন তবে ব্লকের মডিউলটি অনুবাদের জন্য ব্যবহৃত হয়। সুতরাং আপনি যদি একটি বিশেষ মডিউল ব্যবহার করতে চান তবে আপনাকে ব্যবহার করতে হবেMage::helper('mymodule')->__()
Mage_Checkout::My Cartসিনট্যাক্সের কারণে আপনার দুটি পৃথক অবস্থান থাকতে পারে । এবং তাই এটি গুরুত্বপূর্ণ যে
মূলত আমি অন্যান্য ছেলেদের মত একই কথা বলতে যাচ্ছি।
আপনি যদি ব্যবহার করেন তবে Mage::helper(...)আপনি নিশ্চিত হন যে কোনও নির্দিষ্ট সহায়ক অনুবাদের জন্য ব্যবহৃত হয়েছে।
উদাহরণস্বরূপ Mage_Adminhtml_Block_Catalog_Product_Gridব্লক নেওয়া যাক ।
কলামের শিরোনামগুলি জন্যে রয়েছে, তা হল: 'header'=> Mage::helper('catalog')->__('Name'),। যদি ক্যাটালগ হেল্পারের পরিবর্তে $this->__ব্যবহৃত হত তবে পাঠ্যটি Mage_Adminhtmlমডিউলটি ব্যবহার করে অনুবাদ করা হত ।
তবে এটি এমন একটি ক্ষেত্রে যেখানে নামী সহায়িকাদের ব্যবহারের পিছনে যুক্তিটি বোধগম্য হয়।
আমি কেবল একটি কেস দেখাতে চেয়েছিলাম যেখানে $this->__('..')সহায়তার পদ্ধতির পরিবর্তে ব্যবহার করা সমস্যার কারণ হতে পারে। আমি অভিজ্ঞতা থেকে কথা বলি।
এর ব্লক নেওয়া যাক Mage_Catalog_Block_Breadcrumbs। : এক লাইন সৌন্দর্য এটি পছন্দ যে নেই Mage::helper('catalog')->__('Home')।
আপনি ভাববেন যে আপনি catalogমডিউলটিতে আছেন যাতে আপনি $thisপরিবর্তে ব্যবহার করতে পারেন । কিন্তু আপনি যদি নিজের ব্লকটি ব্লকটিকে ওভাররাইড করেন তবে কী হবে Namespace_Module_Block_Breadcrumbs?
যদি $thisব্যবহার করা হয় তবে অনুবাদ করার জন্য ব্যবহৃত মডিউলটি হতে পারে Namespace_Moduleএবং আপনি সম্ভবত এটি চান না।
এটি এড়াতে দুটি বিকল্প রয়েছে। হয় কোনও নামকৃত সহায়ককে ব্যবহার করা যেমন এটি ইতিমধ্যে বেশিরভাগ মূল ব্লকের ক্ষেত্রে ঘটে।
অথবা আপনি বিকাশকারী হিসাবে এটি ব্লক শ্রেণিতে যোগ করতে পারেন:
public function getModuleName() {
return 'Mage_Catalog';
}
তারপরে আপনি নিশ্চিত হন যে $this->__আপনার ব্লকটি ব্যবহার করে সমস্ত পাঠ্য (টেমপ্লেটগুলি যা ব্লকটি অন্তর্ভুক্ত করে) ক্যাটালগ মডিউলটি ব্যবহার করে অনুবাদ করা হবে।
একটি কারণ (যা কেবলমাত্র আমার উপলব্ধি), আপনি যখন সাহায্যকারী ব্যবহার করেন আপনি অনুবাদ ফাইল সম্পর্কে আরও সুনির্দিষ্ট হন যেমন Mage::helper('catalog')ক্যাটালগ ফাইলে বাক্যটি খুঁজে পাবেন, যখন আপনি $thisএটি ব্যবহার করবেন তখন এলোমেলোভাবে সমস্ত অনুবাদ ফাইল অনুসন্ধান করবে search এটাই আমার মনে হয়।