Pregunta sobre magento, csv, translate – ¿Cómo funciona Magento traducir?

6

Quiero traducir una tienda Magento de frontend usando solo un archivo csv. Así que he hecho esto:

He creado un módulo personalizado llamado Traductor. En su config.xml he puesto estas lineas:

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

</config>
</code>

Luego, he creado el ayudante predeterminado de Data.php en mi carpeta de ayuda.

Luego, en app / locale / de_DE, he creado el archivo MyPackage_Translator.csv donde coloco todas mis cadenas.

Ahora, si está en un archivo phtml (independientemente del módulo), si hago algo como:

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

funciona bastante bien Pero me interesa saber por qué Magento busca la cadena en MyPackage_Translator.csv.

También me di cuenta de que, si estoy usando $ this -> __ ('alguna cadena'); en el módulo del Cliente, Magento buscará primero en la aplicación / locale / de_DE / Mage_Customer.csv para la cadena, y si no encuentra la cadena allí, buscará en mi archivo MyPackage_Translator.csv. ¿Porqué es eso? ¿Por qué no se ve en el archivo Enterprise_Customer.csv, por ejemplo?

¿Puede alguien explicarme el flujo de trabajo que hace Magento cuando está buscando el archivo de traducción?

Tu respuesta

1   la respuesta
11

Cuando llamas $ this -> __ ('algo de texto');

Puedes empezar mirandoMage_Core_Helper_Abstract

<code>/**
 * 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);
}
</code>

El siguiente esMage_Core_Model_App

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

Que se entrega aMage_Core_Model_Translate

<code>/**
 * 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;
}
</code>

que devuelve el texto resultante. Este es un recorrido rápido de cómo se manejaría todo, debe ver las clases en sí mismas para obtener una comprensión más profunda.

Quiero decir, usa el Mage_Core.csv en tu idioma específico. No anulando el original. Ricardo Martins
Tal vez usted puede traducir directamente en Mage_Core.csv Ricardo Martins
No recomendaría tal acción, ya que no se recomienda cambiar ninguno de los archivos principales que proporciona Magento. No sería una prueba de actualización. Se estaba moviendo en la dirección correcta con la sobrecarga de la clase principal para Traducir Vern Burton

Preguntas relacionadas