在哪里放置 Yii::app()->language = $_SESSION['lang '] 来影响所有 Yii 翻译?



如果放置在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()。

相关内容

最新更新