我重写了一个像这样的控制器:
<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
中可用。
我认为最好的解决方案是避免控制器重写和使用事件,但这在所有情况下都是不可能的。
除了使用事件之外,是否有任何干净的解决方案将原始翻译保留在覆盖的控制器中?
答案 0 :(得分:8)
解决方案非常简单。只需指定应在控制器中用于翻译字符串的模块名称。
示例:
class My_Foo_SomeController extends Mage_Checkout_SomeController
{
protected $_realModuleName = 'Mage_Checkout';
// Some your code goes here
}
在这种情况下,Magento将使用此属性中的值来检索模块转换,而不是尝试从类名中检测模块名称。