如果放置在protected/views/layouts/main.php中,
Yii::app()->language = $_SESSION['lang'];
不会影响模块(因为大部分内容都是之前生成的)。例如:Yii-user module.
将Yii::app()->language = $lang;
放置在Yii包含流中以影响所有模块及其语言设置的最佳文件是什么?
你可以设置一个"base"控制器来扩展你的控制器(如果你还没有这样的设置),并把你的语言设置在那里,如下所述: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...
我已经修改了protected/components/Controller.php
,添加了
function init()
{
parent::init();
Yii::app()->language = $_SESSION['lang']; //or some more code;
}
效果很好。我也试过在同一目录下制作MyController.php并扩展Controller.php
,它也可以工作,但它减慢了整个应用程序(最有可能的是加载器努力尝试,直到它加载类,或者因为每次调用类时都执行操作;))。
在config/main.php中读取$_SESSION时,我们必须记住,如果Yii处理会话,第二个session_start()将导致PHP E_Notice
。
Yii可以处理会话:链接,它应该在默认情况下打开它们,但是当添加$_SESSION代码到config.php时,我需要自己添加一个'manual' session_start()。