В моем приложении ZF 1.11 я сохраняю свой переводчик в реестре следующим образом:
Zend_Registry::set('Zend_Translate', $translator); 
Поэтому, по моему мнению, скрипты я могу получить доступ к переводчику следующим образом:
 $this->translate('abc'); 
Есть ли какой-нибудь умный способ использовать этот вызов:
 $this->_('abc'); 
Использование $ this-> translate загромождает взгляды, и многие люди привыкли видеть _ () в любом случае.
  В то время как я в целом согласен с тем, что имена функций / методов должны быть значимыми, я также согласен с тем, что _() для переводов является широко используемым стандартом и поэтому приемлемым. 
  Вы можете сделать это, добавив обертки к вашим промежуточным слоям.  Например, следующее может сделать этот метод доступным для всех ваших контроллеров, полученных из MyProject_Controller_Action : 
 class MyProject_Controller_Action extends Zend_Controller_Action { protected $translator; public function init() { $this->translator = Zend_Registry::get('Zend_Translate'); } /** * Translator wrapper * * @param string $string The string to be translated * @return string $translated The translated string */ protected function _($string) { $translated = $this->translator->translate($string); return $translated; } } 
  Конечно же, это можно сделать и с Zend_View . 
  Отказ от ответственности: это не самая лучшая практика, чтобы загромождать ваш код прямыми вызовами в реестре.  На самом деле это анти-шаблон, который следует заменить DI.  Zend Framework 2 упростит нам работу с реестром.  Этот код можно было бы улучшить, фактически введя объект трансляции в класс через конструктор. 
  Нет, не то, что я знаю.  В любом случае есть несколько неявных вопросов, связанных с этим.  Во-первых, вы должны всегда давать функции (и переменные, если на то пошло) значимые имена .  Тем не менее, __() не является значимым именем вообще.  Наоборот, это не имеет никакого значения.  Во-вторых, считается лучшей практикой префикс только private и protected функций (и, опять же, переменных, если на то пошло) с подчеркиванием. 
  Наконец, благодаря тому, как работают помощники вида zend view, вам в значительной степени придется сортировать «трюк» системы, чтобы найти ваш помощник вида, если он был назван __ ().  Вы должны называть его чем-то вроде Zend_View_Helper___ и это не сработает.  Не говоря уже о том, что это повлечет за собой необходимость называть ваш файл __.php . 
  Полагаю, вы могли бы назвать своего помощника Zend_View_Helper_T , и в этом случае вы могли бы перевести материал, используя $this->t($string);  (Я тестировал это, и он работает), но снова вы всегда должны использовать значащие имена . 
редактировать
Не осознав, что вы хотели называть это изнутри контроллера до сих пор, я решил пересмотреть свой ответ и дать небольшую обратную связь о комментарии, который я получил от избирателя.
  Трудно рекомендовать создать класс-оболочку для Zend_Controller_Action в котором можно создать функцию _() по следующей причине: 
  Тем не менее, решение markus было отличным от имени функции (по причинам, указанным ранее).  Единственное, что я бы изменил, это вызов функции Zend_Registry::get() в функции _() .  Если вы планируете вызывать эту функцию столько, сколько вы намекали, то что-то вроде этого может работать лучше: 
 class MyProject_Controller_Action extends Zend_Controller_Action { /** * the translator object * @var Zend_Translate */ protected $_translator; public function init() { $this->_translator = Zend_Registry::get('Zend_Translate'); } /** * note my new method name, you don't have to use it but I still * recommend it. the name is just a suggestion, if you prefer something * like _translate() or _trnslte() then by all means (although I don't * recommend abbreviations unless they're super obvious I guess). */ protected function _trans($string) { return $this->_translator->translate((string) $string); } }