टी एल; डॉ
यदि आप विवरण में रुचि नहीं रखते हैं कि अनुवाद कैसे काम करता है, तो सामग्री को
व्हाट्स अप करने के लिए छोड़ दें कि क्या आपका अनुवाद नीचे काम नहीं कर रहा है , विशेष रूप से
मॉड्यूल स्कोप ट्रांसलेशन टकराव के लिए समाधान ।
Magento अनुवाद अवलोकन
Magento अनुवाद स्रोतों को प्राथमिकता देता है (उच्चतम से निम्नतम तक):
- DB (
core_translateतालिका)
- विषय
translate.csvफ़ाइल
app/locale/*/*.csvफ़ाइलें
अनुवाद सरणी कैसे बनाई जाती है?
मॉड्यूल अनुवाद
app/locale/*/*.csvसक्रिय मॉड्यूल etc/config.xmlफ़ाइलों से संदर्भित पहले सभी फ़ाइलों को पार्स किया जाता है। इस प्रक्रिया का एक पूर्वाभ्यास है:
मान लें कि Magento निम्नलिखित config.xmlअनुभाग पाता है :
<!-- excerpt from Mage/Catalog/etc/config.xml -->
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<default>Mage_Catalog.csv</default>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
और उस फ़ाइल में, वर्तमान स्टोर दृश्य के लिए कॉन्फ़िगर किए गए स्थान के लिए निम्न अनुवाद निर्दिष्ट किया गया है:
"AAA","BBB"
इन परिस्थितियों में, Magento अनुवाद सरणी में निम्नलिखित रिकॉर्ड बनाता है:
array(
"AAA" => "BBB",
"Mage_Catalog::AAA" => "BBB"
)
दूसरा मान मॉड्यूल स्कोप अनुवाद है । उपसर्ग मॉड्यूल का नाम कॉन्फ़िगर XML नोड से लिया गया है जिसमें अनुवाद फ़ाइल घोषणा है।
एक ही अनुवाद एक करके फिर से निर्दिष्ट है, तो दूसरे मॉड्यूल फ़ाइल , जैसे में Some_Module.csvअनुवाद है "AAA","CCC", यह होगा अधिलेखित नहीं"AAA" सेटिंग। इसके बजाय, यह केवल दूसरे मॉड्यूल नाम के साथ एक नया रिकॉर्ड जोड़ देगा"Some_Module::AAA" => "CCC" ।
यदि डेवलपर मोड सक्षम किया गया है, तो यह भी परेशान करेगा"AAA" रिकॉर्ड अगर यह एक और मॉड्यूल अनुवाद में एक ही कुंजी के साथ एक दूसरे रिकॉर्ड पाता है। इससे विकास के दौरान मॉड्यूल ट्रांसलेशन टकराव को आसान बनाया जा सकता है।
थीम अनुवाद
दूसरा, translate.csvवर्तमान स्थान के लिए थीम फ़ॉलबैक में पहली फ़ाइल से लोड किए गए अनुवाद केवल अनुवाद सरणी में मौजूदा रिकॉर्ड को प्रतिस्थापित करते हैं।
इसलिए पिछले उदाहरण को जारी रखते हुए, एक translate.csvरिकॉर्ड "AAA","DDD"निम्नलिखित अनुवाद डेटा तक ले जाएगा:
array(
"AAA" => "DDD", // This is overwritten by the translate.csv file
"Mage_Catalog::AAA" => "BBB",
"Some_Module::AAA" => "CCC"
)
बेशक रिकॉर्ड में translate.csv नई अनुवाद कुंजी साथ केवल सरणी में जोड़े जाते हैं।
डेटाबेस अनुवाद
core_translateतालिका से अनुवाद मूल रूप से थीम अनुवाद की तरह अनुवाद सरणी में विलय कर दिए जाते हैं।
मॉड्यूल या थीम अनुवादों से मौजूदा चाबियाँ डेटाबेस रिकॉर्ड द्वारा अधिलेखित की जाती हैं, नए जोड़े जाते हैं।
अनुवाद लुकअप
जब __()विधि को बुलाया जाता है, तो Magento पहली बार वर्तमान मॉड्यूल से मेल खाने वाले सरणी में अनुवाद की तलाश करता है।
वर्तमान मॉड्यूल उस वर्ग के नाम से निर्धारित होता है जिस पर __()कक्षा को बुलाया जाता है। उदाहरण के लिए, ब्लॉक में जिम्मेदार विधि इस तरह दिखती है:
// Excerpt from Mage/Core/Block/Abstract.php
public function getModuleName()
{
$module = $this->getData('module_name');
if (is_null($module)) {
$class = get_class($this);
$module = substr($class, 0, strpos($class, '_Block'));
$this->setData('module_name', $module);
}
return $module;
}
हेल्पर्स और कंट्रोलर्स के तरीके समान रूप से काम करते हैं।
उदाहरण लुकअप परिदृश्य
उदाहरण के लिए, मान लें कि $this->__('AAA')इसे टेम्पलेट फ़ाइल में कहा जाता है। यदि संबंधित ब्लॉक में प्रकार है Mage_Core_Block_Template, तो Magento पहले Mage_Core::AAAरिकॉर्ड की जांच करेगा । यदि यह नहीं मिलता है, तो यह कुंजी के लिए अनुवाद पर वापस आ जाएगा AAA।
उदाहरण के परिदृश्य में इसका परिणाम अनुवाद में DDD(से) होगाtranslate.csv फ़ाइल से) होगा।
एक अलग परिदृश्य में संबंधित ब्लॉक हो सकता है Mage_Catalog_Block_Product_View। इस मामले में Magento पहले एक अनुवाद रिकॉर्ड की जाँच Mage_Catalog::AAAकरेगा, और अनुवाद खोजेगा AAA।
तो वास्तव में, मॉड्यूल गुंजाइश अनुवाद एक उच्च प्राथमिकता तो किसी भी सामान्य अनुवाद है। किस अनुवाद का उपयोग किया जाता है यह इस बात पर निर्भर करता है कि __()विधि को कॉल करने के लिए कौन सा मॉड्यूल है ।
अगर आपका अनुवाद काम नहीं कर रहा है, तो क्या जाँचें
यदि किसी translate.csvफ़ाइल से आपके अनुवाद का उपयोग नहीं किया जा रहा है, तो इस चेकलिस्ट का पालन करें:
- क्या अनुवाद कैश बंद / ताज़ा है? (समाधान: कैश साफ़ करें)
- क्या
translate.csvवास्तव में थीम स्टोर में फ़ाइल वर्तमान स्टोर के लिए है? (समाधान: विषय विन्यास को ठीक करें)
- क्या
core_translateतालिका में अनुवाद के लिए एक परस्पर विरोधी रिकॉर्ड है ? (समाधान: परस्पर विरोधी रिकॉर्ड को हटा दें core_translate)
- यदि पिछले सभी बिंदु कारण नहीं हैं, तो एक अलग मॉड्यूल से एक परस्पर विरोधी अनुवाद होना चाहिए। (समाधान: नीचे देखें)
मॉड्यूल स्कोप अनुवाद संघर्ष के लिए समाधान
यदि आपको लगता है कि अंतिम मामला सही है, तो अनुवाद को मॉड्यूल के कार्यक्षेत्र गुंजाइश के translate.csv साथ अनुवाद में दूसरी बार जोड़ें ।
उदाहरण में, यदि आप हमेशा थीम अनुवाद के माध्यम से AAAअनुवादित होना चाहते हैं, तो आप DDDअपने में ऐसा कर सकते हैं translate.csv:
"AAA","DDD"
"Mage_Catalog::AAA","DDD"
"Some_Module::AAA","DDD"
व्यवहार में, मैं केवल अनुवाद में मॉड्यूल गुंजाइश जोड़ता हूं यदि कोई विरोध है, तो यदि अनुवाद काम नहीं कर रहा है।
अतिरिक्त नोट्स
इनलाइन अनुवाद
मैगेंटो की इनलाइन अनुवाद सुविधा भी core_translateमॉड्यूल गुंजाइश उपसर्ग का उपयोग करके तालिका में कस्टम अनुवाद जोड़ता है ।
अनिच्छुक अनुकूलता
थीम अनुवादों की प्राथमिकता तब अधिक हुआ करती थी जब डेटाबेस मैगेंटो संस्करण 1.3 या इसके बाद तक अनुवाद करता था।
XML अनुवाद
Magento कभी कभी का मूल्यांकन translate=""में तर्क config.xml, system.xmlऔर लेआउट एक्सएमएल चाइल्ड नोड मूल्यों का अनुवाद करने में। अनुवाद के दायरे के लिए मॉड्यूल निर्दिष्ट करने के
लिए module=""तर्क का उपयोग करके उन मामलों में एक सहायक वर्ग निर्दिष्ट किया जा सकता है ।
यदि moduleXML में कोई तर्क निर्दिष्ट नहीं किया गया है, तो core/dataसहायक का उपयोग बाल नोड मानों को अनुवाद करने के लिए किया जाता है।
अग्रिम जानकारी
मैं स्वीकार करता हूं कि मैं इस पोस्ट में मैगेंटो अनुवाद प्रक्रिया के कुछ विवरणों से जुड़ा हुआ हूं, लेकिन केवल इसलिए कि मैं बहुत अधिक जानकारी नहीं चाहता हूं।
- अनुवाद सरणी का निर्माण करते समय कुछ तकनीकी विवरण
- मॉड्यूल के लिए अतिरिक्त अनुवाद फ़ाइलों का उपयोग करने की संभावना
core_translateरिकॉर्ड के लिए स्टोर व्यू स्कोप
- अनुवाद के विभिन्न तरीकों का उपयोग करके पेशेवरों और विपक्षों
यदि अधिक जानकारी की आवश्यकता हो तो कृपया एक अलग प्रश्न पूछें।