मुख्य मॉड्यूल और कभी-कभी टेम्पलेट्स में, मैं देखता हूं कि अनुवाद के लिए सहायक कक्षाएं इस्तेमाल की जा रही हैं:
Mage::helper('someModule')->__('translate me');
क्यों यह बेहतर है:
$this->__('translate me');
मुख्य मॉड्यूल और कभी-कभी टेम्पलेट्स में, मैं देखता हूं कि अनुवाद के लिए सहायक कक्षाएं इस्तेमाल की जा रही हैं:
Mage::helper('someModule')->__('translate me');
क्यों यह बेहतर है:
$this->__('translate me');
जवाबों:
बस सिद्धांत, लेकिन जब आप कहते हैं
$this->__('Foo')
टेम्पलेट में, कौन सा मॉड्यूल CSV अनुवाद फ़ाइल Magento 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
करेंगे तो सभी अनुवाद फ़ाइलों में यादृच्छिक रूप से खोज करेंगे। यही मैं सोचता हूं।