ক্লাসগুলি অনুবাদ করার জন্য কেন এটির পরিবর্তে সহায়ক ব্যবহার করে?


27

মূল মডিউল এবং কখনও কখনও টেমপ্লেটগুলিতে, আমি অনুবাদকের জন্য সহায়ক ক্লাসগুলি ব্যবহার করা দেখছি:

Mage::helper('someModule')->__('translate me');

এটি কেন পছন্দনীয়:

$this->__('translate me');

আরে ব্রেন্ডন, এই প্রশ্নটি ব্যতিক্রমীভাবে ভাল এবং আমি আপনার প্রচেষ্টার প্রশংসা করি। তার জন্য +1। তবে অ্যালানস্টর্ম আপনাকে আপনার প্রশ্নের একটি বৈধ উত্তর দেবে। সুতরাং উপলব্ধ উত্তরগুলি থেকে একটি উত্তর গ্রহণ করা ভাল লাগবে। ধন্যবাদ :-)
রাজীব কে তোমি

আপনাকে আরও শক্তি ভাই :-)
রাজীব কে টমি

উত্তর:


24

কেবল তাত্ত্বিক, তবে যখন আপনি কল করবেন

$this->__('Foo')

কোনও টেমপ্লেটে, কোন মডিউলের সিএসভি অনুবাদ ফাইলটি ম্যাগান্তো ফু অনুবাদ করতে ব্যবহার করবে?

এটি সর্বদা পরিষ্কার নয় যে মডিউলটির অনুবাদ সহায়ক ম্যাগেন্টো শেষ পর্যন্ত স্ট্রিং / কী অনুবাদ করতে কল করবে। যেহেতু ম্যাজেন্টো আপনাকে বিভিন্ন স্ট্রিংয়ের জন্য বিভিন্ন মডিউলে একই কী ব্যবহার করতে দেয় তাই আপনি কোন মডিউলটির অনুবাদ ডেটা ব্যবহার করছেন তা প্রায়শই জানা গুরুত্বপূর্ণ। প্রকৃতপক্ষে, যদি কোনও টেম্পলেট একাধিক মডিউল জুড়ে ব্যবহৃত হয়, তবে $this->__()এটি "ক্ষতিকারক হিসাবে বিবেচিত হবে" হিসাবে ব্যবহার করা হতে পারে, কারণ এটি লেআউট সিস্টেমটিতে টেমপ্লেটটি ব্যবহার করে তা ব্লক প্রসঙ্গে নির্ভর করে বিভিন্ন মান প্রদান করে।

আমার অনুমান যে সুবিধার্থে সহায়তাকারীদের সামনে যোগ করা হয়েছিল, তবে বিকাশকারীরা তাড়াতাড়ি তাড়াতাড়ি ইনস্টল করা শুরু করে যাতে তারা জানত যে কোন মডিউলের অনুবাদ ফাইলটি কোনও স্ট্রিং অনুবাদ করবে এবং সেই প্যাটার্নটি কাঠামোর পরীক্ষায় ছড়িয়ে পড়ে। কোডের এই লাইনটি নিজেই দ্ব্যর্থক।

$this->__('Foo');

তবে আপনি নিশ্চিত হতে পারেন যে এই লাইন কোডটি Mage_Catalogস্থানীয়করণ তথ্য ব্যবহার করবে ।

Mage::helper('catalog')->__('Foo')

হুম, আমি এই যুক্তি পেয়েছি। অনুশীলনে আমি কেবল সক্রিয় থিমের জন্য /locale/{xyz}/translate.csv (মডিউল প্রতি নয়) হিসাবে সীমাবদ্ধ প্যাকেজের মধ্যে তৈরি CSVs দেখেছি। আমার কাছে "স্ট্রিংটি বিভিন্ন মডিউলে উপস্থিত রয়েছে এবং বিভিন্ন অনুবাদগুলির প্রয়োজন রয়েছে" সমস্যা, তবে "এই স্ট্রিংটির এই মডিউলে একাধিক উদাহরণ রয়েছে এবং বিভিন্ন অনুবাদ দরকার" যা সাহায্যকারীরা সমাধান করেন না। সাধারণত, আমি সম্ভবত প্রতি থিমে এই এবং একটি সিএসভি দিয়ে আটকে থাকতে পারি।
ব্রেন্ডন ফ্যালকভস্কি

@ ব্রেন্ডনফ্যালকোভস্কি হ্যাঁ, এটি "মডিউল বিকাশকারী" বনাম "থিম বিকাশকারী" জিনিসটির মতো মনে হচ্ছে। আমি বলব যে আপনি বিল্ট ইন হেল্পার ব্যবহার করছেন find
অ্যালান ঝড়

@ অ্যালানস্টর্ম অবশ্যই আপনার জন্য একটি উত্সাহ।
এমটিএম

20

কারণ আপনি একটি সুস্পষ্ট মডিউল ব্যবহার করতে চান।

আপনি যদি $this->__()কোনও ব্লক প্রসঙ্গে ব্যবহার করেন তবে ব্লকের মডিউলটি অনুবাদের জন্য ব্যবহৃত হয়। সুতরাং আপনি যদি একটি বিশেষ মডিউল ব্যবহার করতে চান তবে আপনাকে ব্যবহার করতে হবেMage::helper('mymodule')->__()


1
সব ক্ষেত্রেই অনুবাদগুলি একটি নির্দিষ্ট মডিউলে আবদ্ধ থাকে। কেবল $ এটিকে কল করার সময় আপনি বর্তমান মডিউলটি উল্লেখ করছেন এবং লম্বা Mage :: সহায়ক ('মায়োমডিউল') -> __ () কল করার সময় আপনি সেই মডিউলটির সাহায্যে শব্দটি অনুবাদ করছেন ঠিক মডিউল থেকে কোনও সিএসভির পরিবর্তে CS ডিফল্ট সিএসভি।
মবলপর্দা

সঠিক। আপনি যদি কোনও সহায়ক ব্যবহার করেন তবে আপনি এটি স্পষ্ট করে তোলেন।
ফ্যাবিয়ান ব্লাচসমিডেট

1
যদিও সুস্পষ্ট হওয়ার সুবিধা কী? অনুবাদ সিএসভিগুলি মডিউলগুলির মধ্যে পার্থক্য করে না, বা সেগুলি করে? তাদের জন্য কোনও শ্রেণিবিন্যাস / উত্তরাধিকার ফ্যালব্যাকের কথা শুনেনি।
ব্রেন্ডন ফ্যালকভস্কি

না, সমস্ত সিএসভিগুলি একত্রিত হয়েছে তবে Mage_Checkout::My Cartসিনট্যাক্সের কারণে আপনার দুটি পৃথক অবস্থান থাকতে পারে । এবং তাই এটি গুরুত্বপূর্ণ যে
কোনও

1
আহা, সুতরাং সাহায্যকারীরা ফ্রন্টএন্ড প্যাকেজগুলির তুলনায় মডিউলগুলির জন্য আরও অনেক বেশি ধারণা তৈরি করে, যা কেবলমাত্র তাদের নিজস্ব সিএসভিই মূলত যে লড়াইয়ের সাথে লড়াই করার জন্য সেটি অতিক্রম করে।
ব্রেন্ডন ফ্যালকভস্কি

9

মূলত আমি অন্যান্য ছেলেদের মত একই কথা বলতে যাচ্ছি।
আপনি যদি ব্যবহার করেন তবে 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->__আপনার ব্লকটি ব্যবহার করে সমস্ত পাঠ্য (টেমপ্লেটগুলি যা ব্লকটি অন্তর্ভুক্ত করে) ক্যাটালগ মডিউলটি ব্যবহার করে অনুবাদ করা হবে।


খুশী হলাম। ব্রেডক্রাম্ব তত্ত্বটি দুর্দান্ত ছিল I +1 এর জন্য :-)
রাজীব কে তোমি

2

একটি কারণ (যা কেবলমাত্র আমার উপলব্ধি), আপনি যখন সাহায্যকারী ব্যবহার করেন আপনি অনুবাদ ফাইল সম্পর্কে আরও সুনির্দিষ্ট হন যেমন Mage::helper('catalog')ক্যাটালগ ফাইলে বাক্যটি খুঁজে পাবেন, যখন আপনি $thisএটি ব্যবহার করবেন তখন এলোমেলোভাবে সমস্ত অনুবাদ ফাইল অনুসন্ধান করবে search এটাই আমার মনে হয়।

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