1

コントローラーを次のように書き直します。

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

1つの関数のみを上書きします。$this->__('A string');デバッガーでこれを追跡すると、コントローラーの別の関数 (元の左) が呼び出されMage_Core_Controller_Front_Action::__()、変換式 ( $expr) が呼び出されます。

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

でしか利用できないため、翻訳が見つかりませんMage_Checkout

コントローラーの書き換えを避けてイベントを使用するのが最善の解決策だと思いますが、これはすべての場合に可能というわけではありません。

イベントを使用する以外に、元の翻訳を上書きされたコントローラー内に保持するためのクリーンなソリューションはありますか?

4

1 に答える 1

8

解決策は非常に簡単です。文字列を変換するためにコントローラーで使用するモジュール名を指定するだけです。

  • クラスの $_realModuleName プロパティに値を指定します。

例:

class My_Foo_SomeController extends Mage_Checkout_SomeController 
{

    protected $_realModuleName = 'Mage_Checkout';

    // Some your code goes here
}

この場合、Magento はクラス名からモジュール名を検出しようとする代わりに、このプロパティの値を使用してモジュールの翻訳を取得します。

于 2012-08-09T13:17:48.940 に答える