【问题标题】:Translation with custom translation file fails for certain words in MagentoMagento中某些单词的自定义翻译文件翻译失败
【发布时间】:2012-05-29 02:03:36
【问题描述】:

我正在为我的 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 文件(由德国 Magento 社区提供)以查找键“City”的翻译,并在“adminhtml 模块”中找到了一个。

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

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

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

对此有什么想法吗?

【问题讨论】:

  • mymodule 的配置(config.xml)中有翻译部分吗?如果 Magento 在配置的 csv 中找不到合适的翻译,通常会退回到其他模块,这可能是问题所在。
  • 是的,我在模块的配置文件中有这样一个部分,否则翻译也不应该使用密钥City1。但City1 的翻译工作并非如此。

标签: magento translation


【解决方案1】:

终于解决了翻译问题。原因是 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>

【讨论】:

  • 感谢您发布该消息 - 我错过了导致每个页面上出现一些 foreach 错误的“默认”标签。
  • 您在哪个核心文件中添加了调试?我有同样的问题和相同的配置设置,但有些词仍然取自另一个翻译文件。
【解决方案2】:

如果手头没有你的代码很难说,但我猜你的模块的翻译范围会不知何故丢失(无论出于何种原因)导致 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

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

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

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

"Mage_Shipping::City","Stadt"

【讨论】:

  • 当我激活内联翻译时,我可以看到范围已正确设置为我的模块。我还进行了一些调试并跟踪代码,直到包含所有翻译的数组,我猜模块的范围是搜索键“City”,结果未找到条目,因此使用原始字符串.我想知道为什么钥匙根本不见了。但我会尝试你的建议,看看会发生什么。
  • 我听从了你的指示,但它只证实了我的假设。我将每个文件中的翻译更改为不同的值,但没有一个显示在 UI 中。所以这符合我的假设,即这个词根本没有翻译,因为找不到翻译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 2023-03-20
  • 2016-10-28
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
相关资源
最近更新 更多