yii2 多语言设置 [ 2.0 版本 ]
yii2的多语言个yii1几乎类似
1.设置默认语言:在mail.php配置文件加上:'language'=>'zh-CN'
2.多语言切换
html代码 :
<a href="<?php echo Yii::$app->urlManager->createUrl(['/ebay/user/language','lang'=>'zh-CN']);?>">中文</a>
<a href="<?php echo Yii::$app->urlManager->createUrl(['/ebay/user/language','lang'=>'en']);?>">英文</a>
controller代码 :
//语言切换
public function actionLanguage(){
$language= \Yii::$app->request->get('lang');
if(isset($language)){
\Yii::$app->session['language']=$language;
}
//切换完语言哪来的返回到哪里
$this->goBack(\Yii::$app->request->headers['Referer']);
}
多语言文件messages路径
入口文件web/index.php 加上一句
一定要加在中间哦
这样就可以实现语言切换了
2.第二种方法
我们也可以进行初始化,不过这个麻烦,需要每个controller都写上init函数,主要就是给
Yii::$app->language
赋值就可以了
想接触的朋友可以自己看呢
http://happymc.iteye.com/blog/2149498
希望对你们有帮助!
小马哥
注册时间:2014-07-01
最后登录:2016-09-25
在线时长:40小时54分
最后登录:2016-09-25
在线时长:40小时54分
- 粉丝66
- 金钱615
- 威望60
- 积分1615
共 6 条评论
语言信息 language 变量,放在 cookie 里面是不是会更好一些?
方法很多,我感觉都差不多,根据适合自己的来,我这个只是新手借鉴
@小马哥: 我指的并不是技术上的实现,放在 cookie 里面,用户下次来访问的时候,就不需要再次切换到原先选择的语言了,当然对于用户来说,这并没有多少体验上的提升
@fly020212: 是的,你想的 很周到
值得学习,感谢你的无私奉献
呵呵,小伙子,慢慢来
我的多语言设置后混乱了,中文的时候部分显示英语,韩语的时候部分显示中文,我只设置了中韩两种语言,请问一下可能是什么原因导致的吗?
不建议对入口文件index.php的修改,推荐的方法是在配置文件中(比如frontend/config/main.php)用behavior配置:
return [ 'id' => 'app-frontend', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'controllerNamespace' => 'frontend\controllers', // behavior 'on beforeRequest' => function ($event) { $l_saved = null; if (true){ # use cookie to store language $l_saved = Yii::$app->request->cookies->get('locale'); }else{ # use session to store language $l_saved = Yii::$app->session['locale']; } $l = ($l_saved)?$l_saved:'en-US'; Yii::$app->sourceLanguage = 'en'; Yii::$app->language = $l; return; }, // 组件 'components' => [ 'user' => [ ......
处理多语言设置的action处
/** * 设定语言: 1) 设置cookie,2) 跳转回原来的页面 * 访问网址 - http://.../site/language?locale=zh-CN * @return [type] [description] */ public function actionLanguage() { $locale = Yii::$app->request->get('locale'); if ($locale){ #use cookie to store language $l_cookie = new yii\web\Cookie(['name' => 'locale', 'value' => $locale, 'expire' => 3600*24*30,]); $l_cookie->expire = time() + 3600*24*30; Yii::$app->response->cookies->add($l_cookie); } $this->goBack(Yii::$app->request->headers['Referer']); }
入口文件在高级版本是init之后产生的,默认不会被放到git库。
弱弱的问一句,YII2的basic版本不能设置多语言吗?我看文档里面都是高级应用里面才有
此一问, 我和我的小伙伴都惊呆了。
可以啊,设置方法一样,只是配置文件换成了web.php。高级版和基础版区别不大的。
看不懂啊。。。。