7

我正在为我的 Magento 安装(版本 1.6.2.0)开发一个自定义模块。我在 config.xml 中为该模块注册了一个翻译文件,并开始添加德语翻译。该模块向 Magento 后端添加了一些新行为。

在进行翻译时,我注意到 Magento 的一个奇怪行为。尽管模块的 csv 文件中提供了翻译,但 Magento 不会翻译某些单词。

当我将密钥更改为不同的值时,翻译按预期工作,因此 Magento 似乎可以看到并读取 cvs 文件。

目前我注意到键“City”和“Store”的这种行为。

csv文件的内容:

"City","Stadt"
"City1","Stadt"

我使用以下行来翻译字符串。

Mage::helper('mymodule')->__('City') // returns "City"

当我将密钥更改为“City1”时,一切都按预期工作。

  Mage::helper('mymodule')->__('City1') // returns "Stadt"

在此之后,我搜索了德语翻译 csv 文件(由 German Magento 社区提供)以查找关键“City”的翻译,并在“adminhtml 模块”中找到了一个。

  Mage::helper('adminhtml')->__('City') // returns "Stadt"

所以这也可以按预期工作。

我不知道我做错了什么。正如我所说,字符串“Store”也会发生相同的行为。

对此有什么想法吗?

4

2 回答 2

8

最后我解决了翻译问题。原因是 config.xml 中的配置错误。我通过调试 Magento 在翻译文件中读取的代码找到了它。发生这种情况时,会从 config.xml 文件的 XML 元素之一读取一个名为 scope 的参数。

该元素通常应具有模块的名称,例如<MyCompany_MyModule>. 在我按照配置翻译的教程中,这个 XML 元素的命名<translations>是错误的。

我猜这对于早期版本的 Magento 来说可能是正确的。难以发现的是,错误只发生在其他模块的翻译文件中也定义的键上。仅在我的翻译文件中定义的键按预期工作。

正确的配置应该如下所示。

<frontend>
   ...
    <translate>
        <modules>
            <MyCompany_MyModule>
                <files>
                    <default>MyCompany_MyModule.csv</default>
                </files>
            </MyCompany_MyModule>
        </modules>
    </translate>
  ...
</frontend>
<adminhtml>
  ...
    <translate>
        <modules>
            <MyCompany_MyModule>
                <files>
                    <default>MyCompany_MyModule.csv</default>
                </files>
            </MyCompany_MyModule>
        </modules>
    </translate>
    ...
 </adminhtml>
于 2012-06-14T13:58:40.157 回答
4

如果手头没有您的代码,很难说,但我的猜测是您的模块的翻译范围会以某种方式丢失(无论出于何种原因)导致 Magento 回退。

Afaik,在 Magento 1.6.2.0 中,以下翻译文件定义了密钥City

/app/locale/<language>_<region>/Mage_Checkout.csv
/app/locale/<language>_<region>/Mage_Customer.csv
/app/locale/<language>_<region>/Mage_Persistent.csv
/app/locale/<language>_<region>/Mage_Sales.csv
/app/locale/<language>_<region>/Mage_Shipping.csv
/app/locale/<language>_<region>/Mage_XmlConnect.csv

我会尝试一一更改City这些.csv文件中的翻译,以找出相关翻译的实际来源。

一旦找到 Magento 回退到的文件,您知道需要覆盖哪个翻译范围,以强制City使用您的翻译。

例如,如果您发现更改翻译Mage_Shipping.csv确实生效,那么您编辑翻译文件 ( My_Module.csv) 以包含

"Mage_Shipping::City","Stadt"
于 2012-05-23T09:54:02.713 回答