Модуль перевода не переводит - PullRequest
5 голосов
/ 03 августа 2011

У меня возникла небольшая проблема с переводом Magento в моем модуле, потому что он не работает.Это должно быть легко, как говорят все уроки.В каждой папке app / locale / [xx_XX] / - есть файл .csv, а также запись в config.xml.У меня есть помощник в моем модуле, который также зарегистрирован в config.xml, и я могу использовать его.В конце концов, я очистил все файлы кэша и попытался снова.

Что я сделал не так или что я забыл?

Звонок в коде:

$str = Mage::helper('mymodule')->__('mystring');

И в конфиге.xml (пробовал этот блок во внешнем интерфейсе, adminhtml и глобальных пространствах имен):

<translate>
    <modules>
        <Namespace_Module>
            <files>
                <default>Namespace_Module.csv</default>
            </files>
        </Namespace_Module>
    </modules>
</translate>

Ответы [ 4 ]

5 голосов
/ 06 октября 2011

Есть две возможные вещи, которые могут пойти не так. Во-первых, вы неправильно указали config.xml узлы, и Magento не знает, где искать ваш файл. Во-вторых, у вас правильные узлы, но Magento не может найти ваш файл, потому что он находится в неправильном месте.

Перейдите к следующему методу в следующем файле

#File: app/code/core/Mage/Core/Model/Translate.php
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;
}

Это код, который загружает файлы перевода. Добавьте временную отладку, используя var_dump или Mage::Log.

protected function _loadModuleTranslation($moduleName, $files, $forceReload=false)
{
    var_dump($moduleName);
    foreach ($files as $file) {
        var_dump('Start');
        var_dump($file);
        $file = $this->_getModuleFilePath($moduleName, $file);
        var_dump($file);
        $this->_addData($this->_getFileData($file), $moduleName, $forceReload);
        var_dump('End');
    }
    return $this;
}

Очистите кеш, перезагрузите страницу. Проверьте ваши отладочные операторы для вашего файла. Если вы видите его в списке, убедитесь, что он действительно существует в файловой системе и доступен для чтения.

Если он не отображается, это означает, что вы настроены неправильно. Убедитесь, что ваш config.xml выглядит примерно так

<config>
    <frontend>
        <translate>
            <modules>
                <Namespace_Module>
                    <files>
                        <default>Namespace_Module.csv</default>
                    </files>
                </Namespace_Module>
            </modules>
        </translate>
    </frontend>
</config>

Используйте что-то вроде Module List Module , чтобы убедиться, что ваш модуль действительно загружен в систему.

Удачи!

5 голосов
/ 06 октября 2011

Я помню проблемы с переводом, когда мой магазин работал в режиме разработки.За этим стояло логическое обоснование, позволяющее вам лучше отлаживать переводы или что-то в этом роде.

Я считаю, что конкретный случай заключался в том, что в режиме разработки был выбран первый встреченный перевод.В не-разработках ищется только конкретный модуль.

Так, скажем, у вас есть модули A и B, и у них обоих есть термин «Перевести это», в моей среде разработки я получил перевод из модуля Aв процессе производства я получил его из модуля B.

Не знаю, какие у вас термины, но это может относиться к вашей проблеме.

1 голос
/ 15 июля 2014

В вашем Namespace_Module.csv должны быть строки с двойными кавычками и двойные кавычки, содержащиеся в экранированном виде ...

"Translation String","Translated String"
"<a href=\"%s\">click here</a>","<a href=\"%s\">here clicked</a>"

Одинарные кавычки кажутся логичным подходом, означающим, что вам не нужно избегать двойных кавычек в строке и давать более естественное совпадение строк, но CSV, заключенный в одинарные кавычки, будет полностью проигнорирован - потерял на этом немного времени.

См. Mage_Core.csv для справки ...

1 голос
/ 13 октября 2011
    <translate>
        <modules>
            <Namespace_Module>
                <files>
                    <Namespace_Module>Namespace_Module.csv</Namespace_Module>
                </files>
            </Namespace_Module>
        </modules>
    </translate>

проверить это.Значение по умолчанию может быть перезаписано другим модулем.

...