小马哥 2014-12-26 09:39:43 39660次浏览 6条评论 14 1 1

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-12-29 11:11 举报

    语言信息 language 变量,放在 cookie 里面是不是会更好一些?

    3 条回复
    评论于 2014-12-29 13:16 回复

    方法很多,我感觉都差不多,根据适合自己的来,我这个只是新手借鉴

    评论于 2014-12-29 18:51 回复

    @小马哥: 我指的并不是技术上的实现,放在 cookie 里面,用户下次来访问的时候,就不需要再次切换到原先选择的语言了,当然对于用户来说,这并没有多少体验上的提升

    评论于 2015-01-03 11:37 回复

    @fly020212: 是的,你想的 很周到

  • 评论于 2015-01-02 18:13 举报

    值得学习,感谢你的无私奉献

    1 条回复
    评论于 2015-01-03 11:38 回复

    呵呵,小伙子,慢慢来

  • 评论于 2015-03-20 17:42 举报

    我的多语言设置后混乱了,中文的时候部分显示英语,韩语的时候部分显示中文,我只设置了中韩两种语言,请问一下可能是什么原因导致的吗?

  • 评论于 2015-05-24 17:24 举报

    不建议对入口文件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库。

  • 评论于 2015-12-16 22:45 举报

    弱弱的问一句,YII2的basic版本不能设置多语言吗?我看文档里面都是高级应用里面才有

    2 条回复
    评论于 2016-06-03 15:06 回复

    此一问, 我和我的小伙伴都惊呆了。

    评论于 2017-01-03 12:15 回复

    可以啊,设置方法一样,只是配置文件换成了web.php。高级版和基础版区别不大的。

    觉得很赞
  • 评论于 2017-08-25 14:43 举报

    看不懂啊。。。。

您需要登录后才可以评论。登录 | 立即注册