W podstawowych modułach i czasami szablonach widzę klasy pomocnicze używane do tłumaczenia:
Mage::helper('someModule')->__('translate me');
Dlaczego jest to preferowane:
$this->__('translate me');
W podstawowych modułach i czasami szablonach widzę klasy pomocnicze używane do tłumaczenia:
Mage::helper('someModule')->__('translate me');
Dlaczego jest to preferowane:
$this->__('translate me');
Odpowiedzi:
Teoretycznie, ale kiedy dzwonisz
$this->__('Foo')
w szablonie, który plik tłumaczenia CSV modułu użyje Magento do przetłumaczenia Foo?
Nie zawsze jest jasne, który moduł tłumaczący Magento ostatecznie zadzwoni, aby przetłumaczyć ciąg / klucz. Ponieważ Magento pozwala używać tego samego klucza w różnych modułach dla różnych ciągów, często ważne jest, aby wiedzieć, z których danych tłumaczeniowych korzystasz. W rzeczywistości, jeśli szablon jest używany w wielu modułach, użycie $this->__()
może być „uważane za szkodliwe”, ponieważ zwróci różne wartości w zależności od kontekstu bloku, w którym układ używał szablonu.
Domyślam się, że pomocnicy zostali dodani z góry, ale programiści budujący szablony, szybko rozpoczynający tworzenie instancji, pomagają wiedzieć, który plik tłumaczenia modułu przetłumaczy ciąg, a ten wzorzec rozprzestrzenił się na test frameworka. Ten wiersz kodu sam w sobie jest niejednoznaczny.
$this->__('Foo');
Ale możesz być pewien, że ten wiersz kodu użyje Mage_Catalog
informacji o lokalizacji.
Mage::helper('catalog')->__('Foo')
Ponieważ chcesz użyć jawnego modułu.
Jeśli używasz $this->__()
w kontekście bloku, moduł bloku służy do tłumaczenia. Więc jeśli chcesz użyć specjalnego modułu, musisz użyćMage::helper('mymodule')->__()
Mage_Checkout::My Cart
składnię. Dlatego ważne jest, który moduł zostanie użyty do tłumaczenia
Zasadniczo zamierzam powiedzieć to samo, co powiedzieli inni faceci.
Jeśli używasz Mage::helper(...)
, upewnij się, że do tłumaczenia używany jest konkretny pomocnik.
Na przykład weźmy Mage_Adminhtml_Block_Catalog_Product_Grid
blok.
Dla nagłówków kolumn jest to: 'header'=> Mage::helper('catalog')->__('Name'),
. gdyby zamiast pomocnika katalogu $this->__
zostałby użyty, tekst zostałby przetłumaczony za pomocą Mage_Adminhtml
modułu.
Ale jest to przypadek, w którym logika wykorzystywania nazwanych pomocników ma sens.
Chciałem tylko pokazać przypadek, w którym użycie $this->__('..')
zamiast podejścia pomocnika może prowadzić do problemów. Mówię z doświadczenia.
Weźmy blok Mage_Catalog_Block_Breadcrumbs
. Jest jedna linia, która wygląda następująco: Mage::helper('catalog')->__('Home')
.
Można by pomyśleć, że jesteś w catalog
module, więc możesz użyć $this
zamiast tego. Ale co jeśli zastąpisz blok swoim blokiem o nazwie Namespace_Module_Block_Breadcrumbs
?
Gdyby $this
był używany, to byłby to moduł używany do tłumaczenia Namespace_Module
i prawdopodobnie tego nie chcesz.
Istnieją dwie opcje, aby tego uniknąć. Albo użycie nazwanego pomocnika, jak to już się dzieje w przypadku większości bloków podstawowych.
Lub jako programista możesz dodać to w klasie bloków:
public function getModuleName() {
return 'Mage_Catalog';
}
Następnie masz pewność, że wszystkie teksty $this->__
z Twojego bloku (szablony, które renderują blok również w zestawie) zostaną przetłumaczone za pomocą modułu katalogu.
Jednym z powodów (co jest po prostu moim zdaniem), kiedy używasz pomocnika, jesteś bardziej szczegółowy na temat pliku tłumaczenia, tak jak Mage::helper('catalog')
znajdzie zdanie w pliku katalogu, a kiedy $this
go użyjesz , będzie losowo wyszukiwał we wszystkich plikach tłumaczenia. Tak myślę.