Sınıflar neden $ $ yerine çeviri için bir yardımcı kullanıyor?


27

Ç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');

Hey Brendan, bu soru son derece iyi ve gayretini takdir ediyorum. Bunun için +1. Ancak Alanstorm size sorunuz için geçerli bir cevap verir. Bu yüzden mevcut cevaplardan bir cevap kabul etmek iyi olur. Thanks :-)
Rajeev K Tomy

Size daha fazla güç kardeşim :-)
Rajeev K Tomy

Yanıtlar:


24

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_Catalogyerelleştirme bilgilerini kullanacağından emin olabilirsiniz .

Mage::helper('catalog')->__('Foo')

Hmm, o mantığı anlıyorum. Uygulamada sadece aktif tema için ön paket içinde yaratılan CSV'leri /locale/{xyz / / translate.csv (modül başına değil) olarak gördüm. "Dizge farklı modüllerde var ve farklı çevirilere ihtiyaç duyuyor" sorunu yaşadım, fakat aynı zamanda "bu dizge bu modülde birden fazla örneğe sahip ve yardımcıların çözemediği farklı çevirilere ihtiyaç duyuyor". Genellikle, muhtemelen bu $ ve tema başına bir CSV ile sopa olabilir.
Brendan Falkowski,

@BrendanFalkowski Evet, bir "modül geliştirici" vs. "tema geliştirici" olayı gibi görünüyor. Yerleşik yardımcıları kullanarak bulduğunuzu söyleyebilirim.
Alan Storm

@AlanStorm kesinlikle sizin için bir artı.
MTM

20

Çü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')->__()


1
Her durumda, çeviriler belirli bir modüle bağlanır. Sadece $ $ çağırdığınızda, şu anki modüle atıfta bulunuyorsunuz ve uzun Mage :: helper ('mymodule') -> __ () 'u çağırırken kelimeyi o modülle çeviriyorsunuz, tıpkı bir modülden bir CSV gibi varsayılan CSV.
mbalparda

Doğru. Bir yardımcı kullanırsanız, açık yaparsınız.
Fabian Blechschmidt,

1
Yine de açık olmanın avantajı nedir? Çeviri CSV'leri modüller arasında ayrım yapmıyor mu, değil mi? Onlar için herhangi bir hiyerarşi / miras geri dönüşü duymadım.
Brendan Falkowski

Hayır, tüm CSV'ler birleştirilmiştir, ancak Mage_Checkout::My Cartsözdizimi nedeniyle iki farklı konumunuz olabilir . Bu yüzden hangi modülün çeviri için kullanıldığı önemlidir
Fabian Blechschmidt

1
Aha, böylece yardımcılar modüller için ön paketlerde yaptıklarından çok daha mantıklı davranıyorlar ki bu sadece kendi CSV'lerinin üstesinden gelmek için çekirdeği geçersiz kılıyor.
Brendan Falkowski

9

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_Gridbloğ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_Adminhtmlmodü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 catalogkullanabilirsiniz $this. Peki ya bloğunuz tarafından çağrılan bloğu geçersiz kılarsanız Namespace_Module_Block_Breadcrumbs?

Eğer $thiskullanıldıysa, çeviri için kullanılan modül olacaktır Namespace_Moduleve 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.


Güzel. Breadcrumb teorisi harikaydı. Bayıldım. Bunun için +1 :-)
Rajeev K Tomy

2

Bunun bir nedeni (sadece benim algım), yardımcı kullandığınızda çeviri dosyası hakkında daha açık olursunuz Mage::helper('catalog'), cümle katalog dosyasında bulunurken, kullandığınızda $thistüm çeviri dosyalarında rastgele arama yapar. Bu benim düşündüğüm şey.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.