Çekirdek modüllerde ve bazen şablonlarda çeviri için kullanılan yardımcı sınıfları görüyorum:
Mage::helper('someModule')->__('translate me');
Bu neden tercih edilir:
$this->__('translate me');
Çekirdek modüllerde ve bazen şablonlarda çeviri için kullanılan yardımcı sınıfları görüyorum:
Mage::helper('someModule')->__('translate me');
Bu neden tercih edilir:
$this->__('translate me');
Yanıtlar:
Sadece teori yapıyorum, ama aradığında
$this->__('Foo')
Bir şablonda, Magento hangi modülün CSV çeviri dosyasını Foo'yu çevirmek için kullanır?
Hangi modülün çeviri yardımcısı Magento'nun sonunda dize / anahtarın çevirisini arayacağı her zaman belli değildir. Magento, farklı anahtarlar için aynı anahtarı farklı modüllerde kullanmanıza izin verdiğinden, hangi modülün çeviri verilerini kullandığınızı bilmek genellikle önemlidir. Aslında, bir şablon birden fazla modülde kullanılıyorsa $this->__()
, blok içeriğine bağlı olarak şablonun içinde kullanıldığı yerleşim sisteminin farklı değerlere döneceği için, "zararlı" kabul edilebilir.
Tahminime göre, kolaylık yardımcıları önceden eklendi, ancak geliştiriciler hızlı bir şekilde başlatmaya başlayan şablonları geliştirdiler, böylece hangi modülün çeviri dosyasının bir dize çevireceğini ve bu modelin çerçevenin testine yayıldığını biliyorlardı. Bu kod satırı, kendi başına belirsizdir.
$this->__('Foo');
Ancak bu kod satırının Mage_Catalog
yerelleştirme bilgilerini kullanacağından emin olabilirsiniz .
Mage::helper('catalog')->__('Foo')
Çünkü açık bir modül kullanmak istiyorsun.
$this->__()
Bir blok bağlamında kullanırsanız , bloğun modülü çeviri için kullanılır. Özel bir modül kullanmak istiyorsanız, o zaman kullanmanız gerekir.Mage::helper('mymodule')->__()
Mage_Checkout::My Cart
sözdizimi nedeniyle iki farklı konumunuz olabilir . Bu yüzden hangi modülün çeviri için kullanıldığı önemlidir
Temelde diğerlerinin dediği gibi aynı şeyi söyleyeceğim.
Eğer kullanırsanız Mage::helper(...)
emin belirli bir yardımcı çeviri için kullanıldığını olun.
Mesela Mage_Adminhtml_Block_Catalog_Product_Grid
bloğu alalım .
Sütun başlıkları için bu vardır: 'header'=> Mage::helper('catalog')->__('Name'),
. katalog yardımcısı yerine $this->__
kullanılmış olsaydı, metin Mage_Adminhtml
modül kullanılarak çevrilmiş olurdu .
Ancak bu, adlandırılmış yardımcıları kullanmanın ardındaki mantığın mantıklı olduğu bir durumdur.
Sadece $this->__('..')
yardımcı yaklaşım yerine kullanmanın sorunlara yol açabileceği bir durumu göstermek istedim . Tecrübeden konuşuyorum.
Hadi bloğu alalım Mage_Catalog_Block_Breadcrumbs
. Bakışlar böyle bu bir çizgi vardır: Mage::helper('catalog')->__('Home')
.
Modülde olduğunuzu düşünerek onun yerine catalog
kullanabilirsiniz $this
. Peki ya bloğunuz tarafından çağrılan bloğu geçersiz kılarsanız Namespace_Module_Block_Breadcrumbs
?
Eğer $this
kullanıldıysa, çeviri için kullanılan modül olacaktır Namespace_Module
ve muhtemelen bunu istemezsiniz.
Bundan kaçınmak için iki seçenek var. Çekirdek blokların çoğu için zaten olduğu gibi adlandırılmış bir yardımcı kullanmak.
Veya geliştirici olarak bunu blok sınıfına ekleyebilirsiniz:
public function getModuleName() {
return 'Mage_Catalog';
}
Ardından $this->__
, bloğunuzdan kullanan tüm metinlerin (bloğu da dahil eden şablonlar) katalog modülünü kullanarak çevrileceğinden emin olabilirsiniz.