如何使用 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
{
...
}
我很难知道使用 **\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
{
...
}