2012-04-06 12 views
5

मैं केवल एक सीएसवी फ़ाइल का उपयोग कर एक फ्रंटेंड Magento स्टोर का अनुवाद करना चाहता हूं। तो मैंने यह किया है:Magento कैसे काम करता है?

मैंने अनुवादक नामक एक कस्टम मॉड्यूल बनाया है।

<config> 
.... 
<translate> 
<modules> 
<MyPackage_Translator> 
<files> 
<default>MyPackage_Translator.csv</default> 
</files> 
</MyPackage_Translator> 
</modules> 
</translate> 

</config> 

तब मैं अपने सहायक फ़ोल्डर में डी डिफ़ॉल्ट Data.php सहायक बना लिया है: अपने config.xml में मैं इन पंक्तियों के रख दिया है।

फिर ऐप/लोकेल/de_DE में मैंने MyPackage_Translator.csv फ़ाइल बनाई है जहां मैंने अपने सभी तार डाले हैं।

अब, एक phtml (चाहे मॉड्यूल) फ़ाइल में अगर, अगर मैं कुछ ऐसा कार्य करें:

echo $this->__('My string'); 

यह बहुत अच्छी तरह से काम करता है। लेकिन मैं curios हूँ Magento स्ट्रिंग के लिए MyPackage_Translator.csv क्यों दिखता है?

मैंने यह भी देखा कि, यदि मैं $ -> __ ('कुछ स्ट्रिंग') का उपयोग कर रहा हूं; ग्राहक मॉड्यूल में, Magento स्ट्रिंग के लिए ऐप/लोकेल/de_DE/Mage_Customer.csv फ़ाइल में पहले दिखाई देगा, और यदि उसे वहां स्ट्रिंग नहीं मिलती है, तो यह मेरी MyPackage_Translator.csv फ़ाइल में दिखेगा। ऐसा क्यों है? उदाहरण के लिए Enterprise_Customer.csv फ़ाइल में क्यों नहीं दिखता है?

क्या कोई मुझे वर्कफ़्लो Magento बता सकता है जब यह अनुवाद फ़ाइल की तलाश में है?

उत्तर

10

जब आप इसे $ -> __ ('कुछ पाठ') कहते हैं;

आप Mage_Core_Helper_Abstract

/** 
* Translate 
* 
* @return string 
*/ 
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); 
} 

अगला को देखकर शुरू कर सकते हैं Mage_Core_Model_App

/** 
* Retrieve translate object 
* 
* @return Mage_Core_Model_Translate 
*/ 
public function getTranslator() 
{ 
    if (!$this->_translator) { 
     $this->_translator = Mage::getSingleton('core/translate'); 
    } 
    return $this->_translator; 
} 

कौन सा Mage_Core_Model_Translate

/** 
* Translate 
* 
* @param array $args 
* @return string 
*/ 
public function translate($args) 
{ 
    $text = array_shift($args); 

    if (is_string($text) && ''==$text 
     || is_null($text) 
     || is_bool($text) && false===$text 
     || is_object($text) && ''==$text->getText()) { 
     return ''; 
    } 
    if ($text instanceof Mage_Core_Model_Translate_Expr) { 
     $code = $text->getCode(self::SCOPE_SEPARATOR); 
     $module = $text->getModule(); 
     $text = $text->getText(); 
     $translated = $this->_getTranslatedString($text, $code); 
    } 
    else { 
     if (!empty($_REQUEST['theme'])) { 
      $module = 'frontend/default/'.$_REQUEST['theme']; 
     } else { 
      $module = 'frontend/default/default'; 
     } 
     $code = $module.self::SCOPE_SEPARATOR.$text; 
     $translated = $this->_getTranslatedString($text, $code); 
    } 

    //array_unshift($args, $translated); 
    //$result = @call_user_func_array('sprintf', $args); 

    $result = @vsprintf($translated, $args); 
    if ($result === false) { 
     $result = $translated; 
    } 

    if ($this->_translateInline && $this->getTranslateInline()) { 
     if (strpos($result, '{{{')===false || strpos($result, '}}}')===false || strpos($result, '}}{{')===false) { 
      $result = '{{{'.$result.'}}{{'.$translated.'}}{{'.$text.'}}{{'.$module.'}}}'; 
     } 
    } 

    return $result; 
} 

जो परिणामी पाठ रिटर्न को सौंप दिया है। यह सब कुछ कैसे संभाला जाएगा, इस बारे में एक त्वरित चलना है, आपको कक्षाओं को गहराई से समझने के लिए स्वयं को देखना चाहिए।

+0

हो सकता है कि आप सीधे Mage_Core.csv –

+0

पर अनुवाद कर सकें, मैं ऐसी कार्रवाई की अनुशंसा नहीं करता क्योंकि यह Magento प्रदान की जाने वाली किसी भी मूल फ़ाइल को बदलने की अनुशंसा नहीं करता है। यह सबूत अपग्रेड नहीं होगा। वह –

+0

अनुवाद के लिए कोर क्लास को ओवरलोड करने के साथ सही दिशा में आगे बढ़ रहा था, मेरा मतलब है, अपनी विशिष्ट भाषा में Mage_Core.csv का उपयोग करें। मूल एक ओवरराइड नहीं। –