2012-04-06 4 views
5

Ich möchte einen Frontend-Magento-Store mit nur einer CSV-Datei übersetzen. Also habe ich das getan:Wie funktioniert Magento?

Ich habe ein benutzerdefiniertes Modul namens Translator erstellt. In seiner config.xml habe ich diese Zeilen setzen:

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

</config> 

Dann habe ich de Standard data.php Helfer in meinem Helper Ordner erstellt.

Dann in app/locale/de_DE Ich habe die MyPackage_Translator.csv Datei erstellt, wo ich alle meine Strings.

Wenn nun in einem phtml (unabhängig vom Modul-Datei), wenn ich etwas tun:

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

es funktioniert ziemlich gut. Aber ich bin Kurios warum sieht Magento in der MyPackage_Translator.csv für die Zeichenfolge?

Ich bemerkte auch, dass, wenn ich $ this verwende -> __ ('einige Zeichenfolge'); Im Kundenmodul sucht Magento zuerst in der Datei app/locale/de_DE/Mage_Customer.csv nach der Zeichenfolge. Wenn die Zeichenfolge dort nicht gefunden wird, wird sie in meiner Datei MyPackage_Translator.csv gesucht. Warum das? Warum sieht es beispielsweise nicht in der Datei Enterprise_Customer.csv aus?

Kann mir jemand den Workflow erklären, den Magento macht, wenn er nach der Übersetzungsdatei sucht?

Antwort

10

Wenn Sie $ this aufrufen -> __ ('irgendein Text');

Sie können durch einen Blick auf 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); 
} 

Weiter starten 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; 
} 

die zu 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; 
} 

handed ist, welche die resultierende Text zurückgibt. Dies ist ein kurzer Überblick darüber, wie alles gehandhabt wird. Sie sollten die Klassen selbst betrachten, um ein tiefergehendes Verständnis zu erhalten.

+0

Vielleicht können Sie direkt bei Mage_Core.csv übersetzen –

+0

Ich würde eine solche Aktion nicht empfehlen, da es nicht empfohlen wird, eine der Kerndateien, die Magento bietet, zu ändern. Es wäre kein Upgrade-Beweis. Er bewegte sich in die richtige Richtung mit dem Überladen der Kernklasse für Übersetzen. –

+0

Ich meine, benutze die Mage_Core.csv in deiner Sprache. Das ursprüngliche nicht überschreiben. –

Verwandte Themen