कोई फर्क नहीं पड़ता कि आप इसे कैसे लेते हैं, आपकी समस्या के लिए एक "रचनात्मक" समाधान की आवश्यकता है, बाद में देवों / अनुरक्षकों के लिए एक डेवलपर नोट के योग्य। सबसे पहले, कुछ पृष्ठभूमि, एक नोट द्वारा पीछा किया जाता है, उसके बाद एक आसान और मुझे लगता है कि एंड <--
टीएल; डॉ ।
जैसा कि ज़ायवा ने बताया , अनुवाद अनुवाद करने वाले मॉड्यूल के अधीन है। टेम्पलेट ब्लॉक इंस्टेंसेस में रेंडर करते हैं, और ब्लॉक इंस्टेंसेस में एक module_name
संपत्ति होती है जिसका उपयोग अनुवाद करते समय किया जाता है; रेफरी Mage_Core_Block_Abstract::__()
:
public function __()
{
$args = func_get_args();
$expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->getModuleName());
array_unshift($args, $expr);
return Mage::app()->getTranslator()->translate($args);
}
module_name
(। रेफरी संपत्ति (सामान्य रूप से) मांग पर प्राप्त होता है और वर्ग के नाम पर आधारित है ::getModuleName()
):
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;
}
इसलिए, यदि module_name
संपत्ति पहले से ही सेट है, तो वह मॉड्यूल अनुवाद लागू होता है। कोर लेआउट से अतिरिक्त ब्लॉक के लिए, यह संपत्ति लेआउट एक्सएमएल के माध्यम से सेट की जा सकती है; उदाहरण के लिए:
<default>
<action block="root" method="setModuleName">
<name>Your_Module</name>
</action>
</default>
देखा! आपका मॉड्यूल CSV उस उदाहरण के लिए अनुवाद का मालिक है। यह एक दृष्टिकोण हो सकता है। बेशक, ब्लॉक इंस्टेंसेस (पाठ्यक्रम की टेम्पलेट फ़ाइलों सहित) में मॉड्यूल-विशिष्ट हेल्पर के माध्यम से लागू किए जा रहे अन्य मॉड्यूल के अनुवाद की चिपचिपी स्थिति अभी भी है, और यह लेआउट XML अनुवादों के लिए हमेशा सही है। इसके अलावा, यह दृष्टिकोण डिसएबल मॉड्यूल आउटपुट व्यवहार को तोड़ देगा, जो module_name
परम का उपयोग करता है ।
समाधान
जैसा कि यह पता चला है, एक मॉड्यूल के लिए कई अनुवाद फ़ाइलों को निर्दिष्ट करना संभव है । यह कोर में नहीं किया गया है (प्रत्येक मॉड्यूल केवल एक .csv फ़ाइल की घोषणा करता है ), लेकिन कार्यक्षमता इसमें है Mage_Core_Model_Translate
:
public function getModulesConfig()
{
if (!Mage::getConfig()->getNode($this->getConfig(self::CONFIG_KEY_AREA).'/translate/modules')) {
return array();
}
$config = Mage::getConfig()->getNode($this->getConfig(self::CONFIG_KEY_AREA).'/translate/modules')->children();
if (!$config) {
return array();
}
return $config;
}
तथा
protected function _loadModuleTranslation($moduleName, $files, $forceReload=false)
{
foreach ($files as $file) {
$file = $this->_getModuleFilePath($moduleName, $file);
$this->_addData($this->_getFileData($file), $moduleName, $forceReload);
}
return $this;
}
क्योंकि फ़ाइलों की सामग्री विलय कर दी गई है (मैंने परीक्षण किया है), केवल उन तारों को निर्दिष्ट करना संभव है जिन्हें आप अपने कस्टम सीएसवी (ओं) में ओवरराइड करना चाहते हैं। उदाहरण के लिए, यदि आप उत्पाद पृष्ठ पर अतिरिक्त सूचना स्ट्रिंग का अनुवाद करना चाहते हैं ( Mage_Catalog
मॉड्यूल द्वारा अनुवादित ), तो निम्नलिखित काम करेगा:
एप्लिकेशन / स्थानीय / Custom.csv :
"Additional Information","More Info, Dude"
आपके मॉड्यूल कॉन्फिगरेशन में - जिस <depends />
पर Mage_Catalog
अपनी सामग्री को मर्ज करने के बाद सुनिश्चित करना चाहिए - निम्नलिखित के कारण Custom.csv अनुवाद जोड़े मूल के शीर्ष पर विलय हो जाएंगे :
<frontend>
<translate>
<modules>
<Mage_Catalog>
<files>
<additional>Custom.csv</additional>
</files>
</Mage_Catalog>
</modules>
</translate>
</frontend>
इस दृष्टिकोण के बारे में अच्छी बात यह है कि आप अपने ओवरराइडिंग कोर अनुवादों को एक फ़ाइल में एकत्र कर सकते हैं।