コアモジュールと場合によってはテンプレートで、翻訳に使用されているヘルパークラスを確認します。
Mage::helper('someModule')->__('translate me');
なぜこれが望ましいのですか:
$this->__('translate me');
コアモジュールと場合によってはテンプレートで、翻訳に使用されているヘルパークラスを確認します。
Mage::helper('someModule')->__('translate me');
なぜこれが望ましいのですか:
$this->__('translate me');
回答:
理論化するだけで
$this->__('Foo')
テンプレートでは、MagentoはFooの翻訳にどのモジュールのCSV翻訳ファイルを使用しますか?
どのモジュールの翻訳ヘルパーMagentoが最終的に文字列/キーを翻訳するために呼び出すかは、必ずしも明確ではありません。Magentoでは、異なる文字列に対して異なるモジュールで同じキーを使用できるため、使用しているモジュールの翻訳データを知ることが重要になることがよくあります。実際、テンプレートが複数のモジュールにわたって使用される$this->__()
場合、レイアウトシステムがテンプレートを使用したブロックコンテキストに応じて異なる値を返すため、using は「有害と見なされる」可能性があります。
便利なヘルパーが事前に追加されたと思いますが、テンプレートを作成してすぐにインスタンス化を開始するテンプレートを作成する開発者は、どのモジュールの翻訳ファイルが文字列を翻訳するかを知っており、そのパターンはフレームワークのテストに広がっています。このコード行自体はあいまいです。
$this->__('Foo');
ただし、このコード行ではMage_Catalog
ローカライズ情報を使用することを確認できます。
Mage::helper('catalog')->__('Foo')
明示的なモジュールを使用したいからです。
$this->__()
ブロックコンテキストで使用する場合、ブロックのモジュールが変換に使用されます。したがって、特別なモジュールを使用する場合は、使用する必要がありますMage::helper('mymodule')->__()
Mage_Checkout::My Cart
構文のために2つの異なる場所を持つことができます。そして翻訳のために使用されたモジュールが重要である
基本的に、他の人が言ったのと同じことを言います。
使用Mage::helper(...)
する場合は、特定のヘルパーが翻訳に使用されていることを確認してください。
たとえば、Mage_Adminhtml_Block_Catalog_Product_Grid
ブロックを見てみましょう。
列ヘッダーの場合、次のとおり 'header'=> Mage::helper('catalog')->__('Name'),
です。カタログヘルパーの代わりに$this->__
使用される場合、テキストはMage_Adminhtml
モジュールを使用して翻訳されます。
しかし、これは名前付きヘルパーを使用する背後にあるロジックが理にかなっている場合です。
$this->__('..')
ヘルパーアプローチの代わりに使用すると問題が発生するケースを示したかっただけです。私は経験から話しています。
ブロックを取りましょうMage_Catalog_Block_Breadcrumbs
。次のような行が1つあります Mage::helper('catalog')->__('Home')
。
あなたはcatalog
モジュールにいると思うので、$this
代わりに使用できます。しかし、あなたのブロックによってブロックをオーバーライドするとNamespace_Module_Block_Breadcrumbs
どうなりますか?
$this
が使用された場合、翻訳に使用されるモジュールはでNamespace_Module
あり、おそらくそれは望ましくありません。
これを回避するには、2つのオプションがあります。ほとんどのコアブロックで既に行われている名前付きヘルパーを使用します。
または、開発者としてこれをブロッククラスに追加できます。
public function getModuleName() {
return 'Mage_Catalog';
}
次に$this->__
、ブロックから使用するすべてのテキスト(ブロックをレンダリングするテンプレートも含まれます)がカタログモジュールを使用して翻訳されることを確認します。