где разместить Yii :: app () -> language = $ _SESSION ['lang'], чтобы повлиять на ВСЕ переводы Yii? - PullRequest
3 голосов
/ 20 сентября 2011

Если помещено в защищенный / views / layouts / main.php,

 Yii::app()->language = $_SESSION['lang'];

не повлияет на модули (так как большая часть содержимого генерируется ранее). Например: Yii-пользовательский модуль.

Какой файл лучше всего поместить Yii::app()->language = $lang; в поток включений Yii, чтобы повлиять на все модули и их языковые настройки?

Ответы [ 3 ]

4 голосов
/ 20 сентября 2011

Вы можете настроить «базовый» контроллер для расширения ваших контроллеров (если у вас еще нет такой настройки) и поместить там настройки языка, как описано здесь: http://www.yiiframework.com/wiki/26/setting-and-maintaining-the-language-in-application-i18n/

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

return array(
    'language' => $_SESSION['lang'],
    'name' => 'My Web Application',
    ... rest of your config settings...
1 голос
/ 20 сентября 2011

Я изменил protected/components/Controller.php, добавив

         function init()
{
    parent::init();

    Yii::app()->language = $_SESSION['lang']; //or some more code;
}

Это работает очень хорошо.Я также попытался сделать MyController.php в том же каталоге и расширить Controller.php, и это также работает, но это замедляет все приложение (наиболее вероятно, что загрузчик старается изо всех сил, пока не загрузит класс, или потому что операция былавыполняется каждый раз, когда класс был назван;)).

0 голосов
/ 21 сентября 2011

При чтении $ _SESSION в config / main.php мы должны помнить, что если Yii обрабатывает сессии, то вторая session_start () приведет к PHP E_Notice.

Yii может обрабатывать сессии: ссылка , и предполагается, что они включены по умолчанию, но при добавлении кода $ _SESSION в config.php мне нужно было добавить сессионную методику session_start () вручную.

...