2012-05-22 40 views
7

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

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

当我将键更改为不同的值时,翻译按预期工作,所以Magento似乎可以看到并阅读CVS文件。

此刻,我注意到这种行为的关键“城市”和“存储”。

内容CSV文件的:

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

我使用下面的行翻译的字符串。

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

当我将密钥更改为“City1”时,每件事情都按预期工作。

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

这之后我搜索了德文译本的CSV文件(由德国Magento的社区提供)的翻译为重点“城市”,发现其中的“adminhtml模块”的。

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

所以这也按预期工作。

我不知道我在做什么错。正如我所说的那样,字符串“Store”也会发生同样的情况。

对此的任何想法?

+0

'mymodule'的configuration(config.xml)中是否有翻译部分?如果在配置的csv中找不到合适的翻译,Magento通常会退回到其他模块,这可能是问题所在。 – Florian

+1

是的,我在模块的配置文件中有这样的部分,否则翻译不应该与'City1'键一起使用。但'City1'不是这种翻译的作品。 – Flo

回答

8

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

该元件通常应该具有模块的名称,例如, <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> 
+0

Thankyou张贴 - 我错过了每个页面上导致一些foreach错误的'默认'标签。 – Theodores

+0

哪个核心文件是你添加调试的地方?我有同样的问题和相同的配置设置,但仍有一些单词来自另一个翻译文件。 – Guus

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 

我会尝试逐一改变翻译City这些.csv文件,找到在哪里翻译问题实际上是从哪里来的。

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

例如,如果你发现改变Mage_Shipping.csv翻译不生效,那么你编辑翻译文件(My_Module.csv)含有

"Mage_Shipping::City","Stadt" 
+0

当我激活内联翻译时,我可以看到示波器已正确设置到我的模块。我也做了一些调试,并按照代码进行,直到包含所有翻译的数组(我猜模块的范围)搜索键“City”,结果没有找到条目,因此使用原始字符串。我想知道为什么这个关键是根本没有。但我会尝试你的建议,看看会发生什么。 – Flo

+0

我跟着你的指示,但它只证实了我的想法。我将每个文件中的翻译更改为不同的值,但其中没有一个出现在UI中。所以这符合我的假设,即这个词根本没有翻译,因为没有翻译可以找到。 – Flo