模块翻译不是翻译

时间:2011-08-03 13:14:04

标签: php magento translation

我的模块中的Magento翻译有点问题,因为它不起作用。正如所有教程所说的那样应该很容易。每个app / locale / [xx_XX] / - 文件夹中都有一个.csv文件,在config.xml中也有一个条目。我的模块中有一个帮助器,它也在config.xml中注册,我可以使用它。毕竟,我清除了所有缓存文件并再次尝试。

我错了什么或忘记了什么?

代码中的电话:

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

在config.xml中(在前端,adminhtml和全局命名空间中尝试了这个块):

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

4 个答案:

答案 0 :(得分:5)

我记得在我的商店以开发模式运行时遇到翻译问题。它背后有一个基本原理,允许您更好地调试翻译或其他东西。

我认为具体案例是在开发模式下,遇到了第一个遇到的翻译。在非开发中,仅搜索特定模块。

所以说,你有模块A和B,他们都有术语“翻译这个”,在我的开发环境中,我从模块A得到了翻译,而在生产中,我是从模块B得到的。

不确定您拥有哪种条款,但它可能与您的问题有关。

答案 1 :(得分:5)

有两种可能出错的事情。首先是你的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_dumpMage::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的内容来确保您的模块实际已加载到系统中。

祝你好运!

答案 2 :(得分:1)

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

测试一下。默认可以从另一个模块覆盖。

答案 3 :(得分:1)

您的Namespace_Module.csv应该包含双引号字符串,并且在转义中包含双引号...

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

单引号似乎是逻辑方法,意味着您不需要转义字符串中的双引号并提供更自然的字符串匹配,但单引号csv将被完全忽略 - 在此处丢失了一点时间。

请参阅Mage_Core.csv以供参考......