У основних модулях та іноді шаблонах я бачу, що для перекладу використовуються допоміжні класи:
Mage::helper('someModule')->__('translate me');
Чому це бажано:
$this->__('translate me');
У основних модулях та іноді шаблонах я бачу, що для перекладу використовуються допоміжні класи:
Mage::helper('someModule')->__('translate me');
Чому це бажано:
$this->__('translate me');
Відповіді:
Просто теоретизую, але коли ти дзвониш
$this->__('Foo')
у шаблоні, який файл перекладу CSV модуля буде використовувати Magento для перекладу Foo?
Не завжди зрозуміло, який помічник з перекладу модуля Magento в кінцевому підсумку покличе перекласти рядок / ключ. Оскільки Magento дозволяє використовувати один і той же ключ у різних модулях для різних рядків, часто важливо знати, який саме переклад даних, який ви використовуєте, використовується. Насправді, якщо шаблон використовується в декількох модулях, використання $this->__()може бути "вважається шкідливим", оскільки воно поверне різні значення залежно від контексту блоку, в якому використовувалась система компонування шаблону.
Я думаю, що помічники щодо зручності були додані наперед, але розробники, що створюють шаблони, швидко починаючи інстанціювання, допомагають, щоб вони знали, який файл перекладу модуля переведе рядок, і ця модель поширилася на тест фреймворку. Цей рядок коду, сам по собі, неоднозначний.
$this->__('Foo');
Але ви можете бути впевнені, що цей рядок коду використовуватиме Mage_Catalogінформацію про локалізацію.
Mage::helper('catalog')->__('Foo')
Тому що ви хочете використовувати явний модуль.
Якщо ви використовуєте $this->__()в контексті блоку, модуль блоку використовується для перекладу. Тож якщо ви хочете використовувати спеціальний модуль, тоді вам доведеться користуватисяMage::helper('mymodule')->__()
Mage_Checkout::My Cartсинтаксис. І тому важливо, який модуль використовується для перекладу
В основному я говорю те саме, що й інші хлопці.
Якщо ви користуєтеся Mage::helper(...), переконайтеся, що певний помічник використовується для перекладу.
Наприклад, візьмемо Mage_Adminhtml_Block_Catalog_Product_Gridблок.
Для заголовків стовпців є це: 'header'=> Mage::helper('catalog')->__('Name'),. якби замість помічника каталогу $this->__був би використаний текст, текст був би перекладений за допомогою Mage_Adminhtmlмодуля.
Але це випадок, коли логіка використання названих помічників має сенс.
Я просто хотів показати випадок, коли використання $this->__('..')замість хелперського підходу може призвести до проблем. Я кажу з досвіду.
Візьмемо блок Mage_Catalog_Block_Breadcrumbs. Існує один рядок , яка виглядає наступним чином : Mage::helper('catalog')->__('Home').
Ви б могли подумати, що ви перебуваєте в catalogмодулі, щоб ви могли використовувати $thisзамість цього. Але що робити, якщо ви перекриєте блок, названий вашим блоком Namespace_Module_Block_Breadcrumbs?
Якщо $thisвін використовувався, то модуль, який використовується для перекладу, був би, Namespace_Moduleі ви, ймовірно, цього не хочете.
Є два варіанти цього уникнути. Або з використанням названого помічника, як це вже відбувається для більшості основних блоків.
Або ви як розробник можете додати це до класу блоків:
public function getModuleName() {
return 'Mage_Catalog';
}
Тоді ви впевнені, що всі тексти, що використовуються $this->__з вашого блоку (шаблони, які також відображають блок, будуть переведені), будуть переведені за допомогою модуля каталогу.