У основних модулях та іноді шаблонах я бачу, що для перекладу використовуються допоміжні класи:
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->__
з вашого блоку (шаблони, які також відображають блок, будуть переведені), будуть переведені за допомогою модуля каталогу.