Pergunta sobre magento, translate, csv – Como o Magento traduz funciona?

6

Eu quero traduzir uma loja Magento frontend usando apenas um arquivo csv. Então eu fiz isso:

Eu criei um módulo personalizado chamado Tradutor. No seu config.xml eu coloquei estas linhas:

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

</config>
</code>

Em seguida, criei o helper Data.php padrão na minha pasta Helper.

Então, em app / locale / de_DE eu criei o arquivo MyPackage_Translator.csv onde eu coloquei todas as minhas strings.

Agora, se em um arquivo phtml (independentemente do módulo), se eu fizer algo como:

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

funciona muito bem. Mas eu sou curioso porque o Magento olha no MyPackage_Translator.csv para a string?

Eu também notei que, se estou usando $ this -> __ ('some string'); no módulo Customer, o Magento irá procurar primeiro no arquivo app / locale / de_DE / Mage_Customer.csv para a string, e se ele não encontrar a string lá, então irá procurar no meu arquivo MyPackage_Translator.csv. Por que é que? Por que não aparece no arquivo Enterprise_Customer.csv, por exemplo?

Alguém pode me explicar o fluxo de trabalho que o Magento faz quando está procurando o arquivo de tradução?

Sua resposta

1   a resposta
11

Você pode começar olhandoMage_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>

Proximo éMage_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 é entregue 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 retorna o texto resultante. Este é um rápido passeio de como tudo seria tratado, você deve ver as próprias classes para obter uma compreensão mais aprofundada.

Talvez você possa traduzir diretamente no Mage_Core.csv Ricardo Martins
Eu não recomendaria essa ação, pois não é recomendável alterar nenhum dos arquivos principais fornecidos pelo Magento. Não seria uma prova de atualização. Ele estava se movendo na direção certa com sobrecarregar a classe principal para Traduzir Vern Burton
Quero dizer, use o Mage_Core.csv em seu idioma específico. Não substituindo o original. Ricardo Martins

Perguntas relacionadas