Magento:重写控制器时避免丢失翻译

时间:2012-08-09 11:39:11

标签: php magento translation

我重写了一个像这样的控制器:

<frontend>
    <routers>
       <checkout>
       <args>
     <modules>
       <My_Foo before="Mage_Checkout">My_Foo</My_Foo>
     </modules>
       </args>
       </checkout>
    </routers>

我只覆盖一个功能。控制器的另一个功能(左侧原始)在我在调试器中向下跟踪$this->__('A string');时调用Mage_Core_Controller_Front_Action::__()翻译表达式($expr

_text = 'A string',
_module = 'My_Foo'

并且未找到翻译 - 因为它仅在Mage_Checkout中可用。

我认为最好的解决方案是避免控制器重写和使用事件,但这在所有情况下都是不可能的。

除了使用事件之外,是否有任何干净的解决方案将原始翻译保留在覆盖的控制器中?

1 个答案:

答案 0 :(得分:8)

解决方案非常简单。只需指定应在控制器中用于翻译字符串的模块名称。

  • 指定类的$ _realModuleName属性的值。

示例:

class My_Foo_SomeController extends Mage_Checkout_SomeController 
{

    protected $_realModuleName = 'Mage_Checkout';

    // Some your code goes here
}

在这种情况下,Magento将使用此属性中的值来检索模块转换,而不是尝试从类名中检测模块名称。