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

Ale*_*lex 1 php translation magento

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

<frontend>
    <routers>
       <checkout>
       <args>
     <modules>
       <My_Foo before="Mage_Checkout">My_Foo</My_Foo>
     </modules>
       </args>
       </checkout>
    </routers>
Run Code Online (Sandbox Code Playgroud)

我只覆盖一个功能.$this->__('A string');当我在调试器中跟踪它时,控制器的另一个函数(左原始)调用到Mage_Core_Controller_Front_Action::__()转换表达式($expr)是

_text = 'A string',
_module = 'My_Foo'
Run Code Online (Sandbox Code Playgroud)

并且找不到翻译 - 因为它仅在Mage_Checkout.

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

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

Iva*_*nyi 8

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

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

例:

class My_Foo_SomeController extends Mage_Checkout_SomeController 
{

    protected $_realModuleName = 'Mage_Checkout';

    // Some your code goes here
}
Run Code Online (Sandbox Code Playgroud)

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