Php 在何处放置Yii::app()->;语言=$会话[';lang';]是否影响所有Yii翻译?

Php 在何处放置Yii::app()->;语言=$会话[';lang';]是否影响所有Yii翻译?,php,module,translation,yii,Php,Module,Translation,Yii,如果放置在protected/views/layouts/main.php中 Yii::app()->language = $_SESSION['lang']; 不会影响模块(因为大部分内容都是在前面生成的)。 例如:Yii用户模块 放置Yii::app()->language=$lang在Yii包含流中,要影响所有模块及其语言设置?您可以设置一个“基本”控制器来扩展控制器(如果您还没有这样的设置),并将您的语言设置放在那里,如下所述: 但是,如果您在常规PHP会话中确实具有该值,并且

如果放置在protected/views/layouts/main.php中

 Yii::app()->language = $_SESSION['lang'];
不会影响模块(因为大部分内容都是在前面生成的)。 例如:Yii用户模块

放置
Yii::app()->language=$lang在Yii包含流中,要影响所有模块及其语言设置?

您可以设置一个“基本”控制器来扩展控制器(如果您还没有这样的设置),并将您的语言设置放在那里,如下所述:

但是,如果您在常规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中读取$\u SESSION时,我们必须记住,如果Yii处理会话,第二个SESSION\u start()将导致php
E\u通知

Yii可以处理会话: ,
默认情况下,它们应该是打开的,但是在将$\u会话代码添加到config.php时,我需要自己添加一个“手动”会话\u start()。

非常感谢!我所做的工作与您发布的第二个示例类似(它工作得非常好),但我认为向配置文件添加额外的代码和验证可能太多了;)。顺便说一句,从我看到的情况来看,模块控制器也扩展了控制器类,因此必须在每个模块中的所有控制器文件中进行更改(?)…并且控制器扩展了CController。所以我应该让控制器扩展MyController,对吗?