В основных модулях и иногда в шаблонах я вижу вспомогательные классы, используемые для перевода:
Mage::helper('someModule')->__('translate me');
Почему это предпочтительнее:
$this->__('translate me');
localisation
Брендан Фальковски
источник
источник
Ответы:
Просто теоретизирую, но когда вы звоните
в шаблоне, какой файл перевода CSV модуля будет использовать Magento для перевода Foo?
Не всегда ясно, какой помощник по переводу модуля Magento в конечном итоге вызовет для перевода строки / ключа. Поскольку Magento позволяет использовать один и тот же ключ в разных модулях для разных строк, часто важно знать, какие данные перевода модуля вы используете. Фактически, если шаблон используется в нескольких модулях, использование
$this->__()
может считаться «вредным», поскольку он будет возвращать различные значения в зависимости от контекста блока, в котором система макета использовала шаблон.Я предполагаю, что вспомогательные средства были добавлены заранее, но разработчики, быстро создающие шаблоны, помогают создавать экземпляры, чтобы они знали, какой файл перевода модуля переведет строку, и этот шаблон распространился на тест платформы. Эта строка кода сама по себе неоднозначна.
Но вы можете быть уверены, что эта строка кода будет использовать
Mage_Catalog
информацию о локализации.источник
Потому что вы хотите использовать явный модуль.
Если вы используете
$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
и вы, вероятно, не хотите этого.Есть два варианта, чтобы избежать этого. Либо использовать именованного помощника, как это уже происходит для большинства основных блоков.
Или вы, как разработчик, можете добавить это в класс блока:
Тогда вы уверены, что все тексты, используемые
$this->__
из вашего блока (шаблоны, которые отображают блок, также включены) будут переведены с использованием модуля каталога.источник
Одна из причин (которая является только моим восприятием), когда вы используете помощник, вы более конкретно относитесь к файлу перевода, например,
Mage::helper('catalog')
он найдет предложение в файле каталога, а при использовании$this
он будет случайным образом искать во всех файлах перевода. Это то, что я думаю.источник