你好。
在Yii1.1中,我可以在siteController中执行操作,然后使用:Yii::app()->controller->createUrl('actionname', array('language'=>'new language to toggle'));
我可以在索引文件中创建带有CHTML的hiperlinks,当点击时,这些hiperlinks将网站的整个翻译从葡萄牙语改为其他语言,并且一直到处都是。
现在我开始使用Yii2并且控制器不再具有createUrl()了。其他方法也不这样做。我试过run,runAction,尝试使用Url :: class,没什么。
另外,在Yii2制作中<?php echo Html::a('Portuguese', Yii::$app->language = "pt"); ?>
什么都不做!!!单击时,超链接不会更改站点的语言。
有没有人知道如何在Yii 2中创建一个hiperlink或其他方式来完全切换整个网站语言。我需要有两个版本的本网站 - &gt;英语和葡萄牙语。
我需要像这样执行 - &gt; 点击英文单词时会翻译成英文,点击葡萄牙语时会将网站更改为葡萄牙语。
任何想法?
非常感谢提前。
对编码的新编辑 我在siteController中编写了这段代码,现在这些网站切换了语言,但只有在第二次鼠标点击时才会切换切换,内容会刷新。谁知道为什么?
以下是我的行动
public function beforeAction($action) {
if (Yii::$app->session->has('lang')) {
Yii::$app->language = Yii::$app->session->get('lang');
} else {
Yii::$app->language = 'us';
}
return parent::beforeAction($action);
}
public function actionLangus(){
Yii::$app->session->set('lang', 'us'); //or $_GET['lang']
return $this->render('index');
}
public function actionLangpt(){
Yii::$app->session->set('lang', 'pt'); //or $_GET['lang']
return $this->render('index');
}
我选择了渲染('index'),因为重定向没有找到要显示的视图。
非常感谢您提供解决方案......
答案 0 :(得分:2)
您可以在Yii2
中执行以下操作:
\yii\helpers\Html::a('Change Language',\yii\helpers\Url::toRoute(['controller/action',['language'=>'NEW_LANGUAGE']]));
\yii\helpers\Html::a('Change Language',['controller/action',['language'=>'NEW_LANGUAGE']]);
或者:
use yii\helpers\Html;
use yii\helpers\Url;
Html::a('Change Language',Url::toRoute(['controller/action',['language'=>'NEW_LANGUAGE']]));
Html::a('Change Language',['controller/action',['language'=>'NEW_LANGUAGE']]);
然后,在你的行动中,你需要做:
//validation
Yii::$app->language= "NEW_LANGIAGE";
// store current language using state or cookie or database
<强>更新强>
行动代码:
//please put some validation on $_GET['lang']
Yii::$app->session->set('lang', 'us'); //or $_GET['lang']
$this->redirect('controller/action'); // redirecting user to somewhere
然后在你的控制器的beforeAction
:
public function beforeAction($action) {
if (Yii::$app->session->has('lang')) {
Yii::$app->language = Yii::$app->session->get('lang');
} else {
//or you may want to set lang session, this is just a sample
Yii::$app->language = 'us';
}
return parent::beforeAction($action);
}
通过上面的代码,在每个操作中,它会检查语言是否在会话中设置。如果是,它会改变语言。如果没有,它会将语言设置为us
作为默认值。在您的更改语言操作中,它只是将新语言设置为会话,该语言由$_GET
请求提供。然后它将用户重定向到另一个页面。
请注意,这只是一个建议,其他人可能会使用不同的方法,例如创建引导程序组件,使用控制器init()
方法,将lang
存储到cookie或数据库中等等。 /强>