Я переписываю контроллер следующим образом:
<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
.
Я считаю, что лучшим решением было бы избежать перезаписывания контроллера и использования событий, но это невозможно во всех случаях.
Есть ли какое-либо чистое решение – кроме использования событий – сохранить исходный перевод внутри перезаписанных контроллеров?
Решение очень простое. Просто укажите имя модуля, которое должно использоваться в контроллере для перевода строк.
Пример:
class My_Foo_SomeController extends Mage_Checkout_SomeController { protected $_realModuleName = 'Mage_Checkout'; // Some your code goes here }
В этом случае Magento будет использовать значение из этого свойства для извлечения модулей, вместо того, чтобы пытаться определить имя модуля из имени класса.