Как сократить длинный код, но при этом придерживаться философии Zend Framework - PullRequest
0 голосов
/ 29 февраля 2012

Мне давно интересно. Возьмите этот пример:

<?= Zend_Registry::get('translate')->_('translate me!');

Мои взгляды загромождены таким кодом. Мои коллеги также часто жалуются на то, что набирать текст достаточно, чтобы получить перевод, и поскольку он повторяется повсюду, он становится утомительным.

Некоторым из них понравилась бы какая-нибудь глобальная функция, заключающая в себе все короткие имена, например:

function t($text){
    return Zend_Registry::get('translate')->_($text);
}

Но для меня это нехороший дизайн, и он побеждает идею помещения моего объекта перевода в реестр.

Поэтому мне было интересно, что делают другие, чтобы избежать необходимости писать весь этот ненужный код.

Одним из решений было бы сделать в моем контроллере:

$this->view->t = Zend_Registry::get('translate);

а потом, на мой взгляд, просто:

<?= $this->t('translate me!'); ?>

Другой вариант - создать помощника вида, который выполняет эту работу:

<?= this->translate('translate me!');?>

Но это больше работы и снова добавляет слой логики поверх и без того довольно надежного и строгого Zend_Registry + ZendTranslate.

1 Ответ

3 голосов
/ 01 марта 2012

Если вы используете метод настройки по умолчанию для перевода, вы можете использовать следующий код внутри скриптов вида:

<?= $this->translate('TEXT_SETUP_HELP_SERVERNAME'); ?>

или даже короче:

<?= $this->_('TEXT_SETUP_HELP_SERVERNAME'); ?>

Пример из application.ini:

; Setup Zend_Translate
resources.translate.registry_key = "Zend_Translate"
resources.translate.adapter = "array"
resources.translate.options.logUntranslated = false
resources.translate.options.scan = "filename"
resources.translate.options.disableNotices = 0
resources.translate.data = APPLICATION_PATH "/languages"
resources.translate.locale = "en_EN"
...