In Kernmodulen und manchmal Vorlagen werden Hilfsklassen für die Übersetzung verwendet:
Mage::helper('someModule')->__('translate me');
Warum ist dies vorzuziehen, um:
$this->__('translate me');
In Kernmodulen und manchmal Vorlagen werden Hilfsklassen für die Übersetzung verwendet:
Mage::helper('someModule')->__('translate me');
Warum ist dies vorzuziehen, um:
$this->__('translate me');
Antworten:
Nur theoretisieren, aber wenn Sie anrufen
$this->__('Foo')
Mit welcher CSV-Übersetzungsdatei übersetzt Magento Foo in einer Vorlage?
Es ist nicht immer klar, welcher Übersetzungshelfer des Moduls Magento letztendlich aufruft, um die Zeichenfolge / den Schlüssel zu übersetzen. Da Sie in Magento denselben Schlüssel in verschiedenen Modulen für verschiedene Zeichenfolgen verwenden können, ist es häufig wichtig zu wissen, welche Übersetzungsdaten des Moduls Sie verwenden. In der Tat, wenn eine Vorlage über mehrere Module hinweg verwendet wird, verwenden Sie$this->__()
als "schädlich" eingestuft werden, da je nach Blockkontext, in dem das Layout-System die Vorlage verwendet, unterschiedliche Werte zurückgegeben werden.
Ich vermute, dass die Convenience-Helfer im Vorfeld hinzugefügt wurden, aber die Entwickler, die die Vorlagen schnell erstellten und mit der Instantiierung begannen, wussten, welche Übersetzungsdatei des Moduls eine Zeichenfolge übersetzen würde, und dass sich dieses Muster auf den Test des Frameworks auswirkte. Diese Codezeile ist für sich genommen mehrdeutig.
$this->__('Foo');
Sie können jedoch sicher sein, dass diese Codezeile die Mage_Catalog
Lokalisierungsinformationen verwendet.
Mage::helper('catalog')->__('Foo')
Weil Sie ein explizites Modul verwenden möchten.
Wenn Sie $this->__()
in einem Blockkontext verwenden, wird das Modul des Blocks für die Übersetzung verwendet. Wenn Sie also ein spezielles Modul verwenden möchten, müssen Sie es verwendenMage::helper('mymodule')->__()
Mage_Checkout::My Cart
Syntax können Sie jedoch zwei verschiedene Speicherorte festlegen. Und so ist es wichtig, welches Modul für die Übersetzung verwendet wird
Grundsätzlich werde ich dasselbe sagen wie die anderen.
Wenn du benutztMage::helper(...)
, stellen Sie sicher, dass ein bestimmter Helfer für die Übersetzung verwendet wird.
Nehmen wir zum Beispiel die Mage_Adminhtml_Block_Catalog_Product_Grid
Block.
Für die Spaltenüberschriften gibt es diese: 'header'=> Mage::helper('catalog')->__('Name'),
. Wenn anstelle des Katalog-Helfers $this->__
das verwendet worden wäre, wäre der Text mit dem übersetzt wordenMage_Adminhtml
Modul übersetzt worden.
Dies ist jedoch ein Fall, in dem die Logik der Verwendung benannter Helfer sinnvoll ist.
Ich wollte nur einen Fall zeigen, wo mit $this->__('..')
anstelle des Hilfsansatzes zu Problemen führen kann. Ich spreche aus Erfahrung.
Nehmen wir den Block Mage_Catalog_Block_Breadcrumbs
. Es gibt eine Linie , dass das sieht aus wie: Mage::helper('catalog')->__('Home')
.
Sie würden denken, dass Sie im catalog
Modul sind, also könnten Sie $this
stattdessen verwenden. Aber was ist, wenn Sie den Block durch Ihren aufgerufenen Block überschreiben Namespace_Module_Block_Breadcrumbs
?
Wenn verwendet $this
wurde, dann wäre das Modul, das für die Übersetzung verwendet wird, Namespace_Module
und das möchten Sie wahrscheinlich nicht.
Um dies zu vermeiden, gibt es zwei Möglichkeiten. Verwenden Sie entweder einen benannten Helfer, wie er bereits für die meisten Kernblöcke verwendet wird.
Oder Sie als Entwickler können dies in der Blockklasse hinzufügen:
public function getModuleName() {
return 'Mage_Catalog';
}
Dann sind Sie sicher, dass alle Texte, die $this->__
aus Ihrem Block verwendet werden (Vorlagen, die den Block auch rendern), mit dem Katalogmodul übersetzt werden.
Ein Grund (das ist nur meine Wahrnehmung): Wenn Sie helper verwenden, sind Sie spezifischer in Bezug auf die Übersetzungsdatei, Mage::helper('catalog')
da der Satz in der Katalogdatei gefunden wird, und wenn Sie es verwenden $this
, werden alle Übersetzungsdateien nach dem Zufallsprinzip durchsucht. Das ist was ich denke.