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');
localisation
Brendan Falkowski
źródło
źródło
Odpowiedzi:
Teoretycznie, ale kiedy dzwonisz
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.
Ale możesz być pewien, że ten wiersz kodu użyje
Mage_Catalog
informacji o lokalizacji.źródło
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')->__()
źródło
Mage_Checkout::My Cart
składnię. Dlatego ważne jest, który moduł zostanie użyty do tłumaczeniaZasadniczo 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 nazwieNamespace_Module_Block_Breadcrumbs
?Gdyby
$this
był używany, to byłby to moduł używany do tłumaczeniaNamespace_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:
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.źródło
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ę.źródło