【发布时间】:2014-12-01 16:58:39
【问题描述】:
你好。
在 Yii1.1 中,我可以在 siteController 中进行操作,然后使用:Yii::app()->controller->createUrl('actionname', array('language'=>'new language to toggle'));
我可以在索引文件中使用 CHTML 创建超链接,当单击这些超链接时,会将网站的整个翻译从葡萄牙语更改为其他语言,等等。
现在我从 Yii2 开始,控制器不再有 createUrl()。其他方法也不能那样工作。我尝试了 run、runAction,尝试了 Url:: 类,但什么也没有。
另外,在 Yii2 中制作<?php echo Html::a('Portuguese', Yii::$app->language = "pt"); ?>
什么都不做!!!单击超链接时不会更改网站的语言。
有谁知道如何在 Yii 2 中创建一个超链接或其他方式来完全切换整个网站的语言。我需要这个网站的两个版本 -> 英语和葡萄牙语。
我需要这样执行 -> 点击英文单词时会翻译成英文,点击葡萄牙语单词时会将网站更改为葡萄牙语。
有什么想法吗??
非常感谢。
问题的新编辑 我在我的 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');
}
我选择了 render('index'),因为重定向没有找到要显示的视图。
非常感谢您的解决方案...
【问题讨论】:
-
你需要重定向,只需创建一个动作来渲染页面并重定向到它。
-
那是因为它首先改变了会话值,其次它呈现了一个视图。但是我们在
beforeAction()中控制我们的语言。所以需要重定向才能看到第一次点击的结果。 -
我尝试了多种重定向方式,但它总是在浏览器中显示此消息:在此服务器上找不到请求的 URL /index.php。
-
你如何重定向?
-
这样效果很好-> return $this->redirect('index.php?r=site%2Findex');
标签: php internationalization translation yii2