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_Cataloginformacji 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 Cartskł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_Gridblok.
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_Adminhtmlmoduł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 catalogmodule, więc możesz użyć $thiszamiast tego. Ale co jeśli zastąpisz blok swoim blokiem o nazwie Namespace_Module_Block_Breadcrumbs?
Gdyby $thisbył używany, to byłby to moduł używany do tłumaczenia Namespace_Modulei 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 $thisgo użyjesz , będzie losowo wyszukiwał we wszystkich plikach tłumaczenia. Tak myślę.