Magento中使用自定义翻译文件的翻译对于某些单词失败。

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"

接下来我在德国Magento社区提供的德语翻译csv文件中搜索了“City”这个关键词的翻译,并在“adminhtml模块”中找到了一个。

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

所以这也如预期般运作。

我不知道我哪里做错了。就像我说的,字符串“Store”也会出现相同的行为。

对此有任何想法吗?


你的 mymodule 的配置文件(config.xml)中是否有翻译部分?如果在配置的 CSV 文件中找不到合适的翻译,Magento 通常会回退到其他模块,因此这可能是问题所在。 - Florian
1
是的,我在模块的配置文件中有这样一个部分,否则使用“City1”键时翻译就不会起作用。但是对于“City1”,翻译是有效的。 - Flo
2个回答

8
最终我解决了翻译问题。原因是config.xml中配置错误。通过调试Magento读取翻译文件的代码,我发现了这个问题。在这种情况下,会从config.xml文件的一个XML元素中读取名为scope的参数。
这个元素通常应该具有模块的名称,例如。在我遵循的教程中配置翻译时,此XML元素被命名为,这是错误的。
我猜这可能是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>

谢谢您发布这个问题 - 我错过了“default”标签,在每个页面上都导致了一些foreach错误。 - Theodores
你在哪个核心文件中添加了调试?我有同样的问题和配置设置,但某些单词仍然来自另一个翻译文件。 - A.W.

4

没有您的代码,很难说,但我猜测您的模块翻译范围可能会丢失(无论出于什么原因),导致Magento退回。

据我所知,在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

我会尝试逐个更改这些 .csv 文件中的City翻译,以确定有问题的翻译实际上来自哪里。

一旦找到 Magento 依赖的文件,您也就知道了需要覆盖的翻译范围,以强制使用您的 City 翻译。

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

"Mage_Shipping::City","Stadt"

当我激活内联翻译时,我可以看到范围被正确地设置为我的模块。我还进行了一些调试,并沿着代码走了一遍,直到搜索包含所有翻译的数组,我猜测是针对模块的范围,在查找键“City”时没有找到任何条目,因此使用原始字符串。我想知道为什么关键字完全丢失了。但我会尝试您的建议并查看会发生什么。 - Flo
我按照您的指示操作了,但只是确认了我的猜测。我在每个文件中更改了翻译为不同的值,但没有一个显示在用户界面中。因此,这符合我的假设,即该单词根本没有被翻译,因为找不到任何翻译。 - Flo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接