Шаблон для передачи объекта перевода? Для PHP - PullRequest
1 голос
/ 07 октября 2009

Я обновляю веб-приложение php, которое становится многоязычным, на основе инфраструктуры Zend MVC, и я пытаюсь найти лучший подход к передаче объекта перевода в разные классы / слои.

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

Я мог бы просто создать свойство для библиотеки и установить переводчик, но мне интересно, есть ли лучший способ интеграции объекта переводчика в существующее приложение?

Ответы [ 5 ]

2 голосов
/ 10 октября 2009

Если вы используете Zend_Translate, лучше всего использовать регистр.

Zend_Registry::set('Zend_Translate', $translate);

Таким образом, все классы могут найти его автоматически (Zend_Form, Zend_Validate, ...)

2 голосов
/ 09 октября 2009

Удерживайте языковой язык пользователя в Memento и передайте его через логику программы, когда вам нужно выполнить этот перевод, используйте его для определения языка.

0 голосов
/ 21 декабря 2012

Возможно, вы захотите использовать контейнер инжектора зависимостей, где переводчик - это запись, которую вы передаете нужным объектам, не создавая объект вручную. Таким образом, вы можете легко тестировать и делать более качественный (и тестируемый) код

Смотрите другой вопрос здесь Как использовать внедрение зависимостей в Zend Framework?

или эта статья о подключении ZF 2 DI к ZF1 http://adam.lundrigan.ca/2011/06/using-zenddi-in-zf1/

0 голосов
/ 08 октября 2009

Если у вас не так много настроек контроллеров, можете ли вы расширить базовый контроллер и создать там экземпляр переводчика? Тогда он должен быть доступен для использования во всей системе.

Примерно так:

<?php
class BaseController extends Zend_Controller_Action
{
  public function init()
  {
    //setup translation object
  }
}
?>
0 голосов
/ 07 октября 2009

Вы всегда можете создать экземпляр переводчика в bootstrap.php, чтобы он был доступен для всех классов как глобальный. Вот как я это сделаю, так как вам, вероятно, нужно использовать это везде. Это не элегантно, но избавляет вас от необходимости добавлять код везде, где классу нужно вызвать исключение или вернуть сообщение об ошибке.

...