如何使用 Yii::$app->language

How to use Yii::$app->language

我很难知道使用 **\Yii::$app->language = 'pt';**

的理想位置是什么

我在 main.php 视图中尝试过,但只有菜单得到了翻译。在 tutorial-i18N 中说:

You may set the application language at runtime to the language that the user has chosen. This has to be done at a point before any output is generated so that it affects all the output correctly. Therefor just change the application property to the desired value

我的目的是将所需的语言存储在用户配置文件的 LANGUAGE 字段中(以及 FULL_NAME 等)。

在代码中,我需要知道正确的位置以及如何使用它。

编辑

@Timothée Planchais,这种方式有效:

class SiteController extends Controller
{
        public function init()
        {
        parent::init();

        if(!Yii::$app->user->isGuest) {
                Yii::$app->language = Yii::$app->user->identity->profile->language;
        }
        }

但只能在 SiteController 中工作

要设置应用程序语言,请编辑文件 config/web.php :

$config = [
    'id' => 'myapp',
    'name' => My App',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'language' => 'pt',//HERE
    ...
]

您可以在一个自定义控制器中完成所有操作 class,您的所有控制器都应该对其进行扩展。在 init() 函数中:

namespace app\components;

class Controller extends yii\web\Controller
{
  public function init()
  {
    parent::init();

    if(!Yii::$app->user->isGuest) {
      Yii::$app->user->getIdentity()->language = Yii::$app->language;
    }
  }

}

站点控制器例如:

class SiteController extends app\components\Controller
{
  ...
}