yii2框架-多语言版本切换(十三)
来源:互联网 发布:数控车床编程语言 编辑:程序博客网 时间:2024/05/22 02:01
上一节说到关于国际化i18n的方面的基础知识,下面我们就运用这些知识解决一下关于多语言版本之间的切换如何实现。有两种方法,下面主要是说一下利用cookie和session的方法实现的方式。下面就利用中文和英文之间的切换具体例子。
(1)利用cookie实现多语言版本。
首先我们要知道yii2框架是以英文作为源语言的,其他的语言作为目标语言的。所以在语言文件中是一对多的关系,源语言对应多种需要转换的目标语言,也就是有多个不同的语言版本。
我们在@app/messages可以作为我们存放不同语言文件的文件夹,在该文件夹下面建立对应的语言文件夹,比如zh-CN文件夹,代表中文,那么我们现在在文件夹下面建立一个语言文件,叫language.php。那么在@app/messages/zh-CN/language.php:
<?phpreturn [ 'Language' => '语言', 'Chinese' => '中文', 'English' => '英文',];
我们可以在视图文件上利用use yii\bootstrap\NavBar和yii\boostrap\Nav.php来完成
<?php
NavBar::begin([ 'brandLabel' => 'My Company', 'brandUrl' => Yii::$app->homeUrl, 'options' => [ 'class' => 'navbar-inverse navbar-fixed-top', ], ]); echo Nav::widget([ 'options' => ['class' => 'navbar-nav navbar-right'], 'items' => [ [ 'label' => Yii::t('app','Language'), 'dropDownOptions' => ['id' => 'drow-language','style' => 'min-width:90px;'], 'items' => [ ['label' => Yii::t('app','Chinese'), 'options' =>['data-language' =>'zh-CN','style'=>'cursor:pointer']], ['label' => Yii::t('app','English'), 'options' =>['data-language' =>'en-US','style'=>'cursor:pointer']], ], ] ]); NavBar::end();?>
视图文件完成后,'data-language' =>'zh-CN',就是每一个语言版本对应的值。接下来就是我们点击选择语言,然后获取语言版本的值,保存在cookie中,然后可以重新reload该url,在入口文件或者在配置文件中通过cookie重新获取语言版本值,最后就可以切换到不同的语言版本了。
要将语言版本值保存在cookie中,则需要引入一个jquery.cookie.js文件。那么我们在asset文件夹下的AppAsset.php中
class AppAsset extends AssetBundle{ public $basePath = '@webroot'; public $baseUrl = '@web'; public $css = [ 'css/site.css', ]; public $js = [ 'js/jquery.cookie.js', ]; public $depends = [ 'yii\web\YiiAsset', 'yii\bootstrap\BootstrapAsset', ];
<?php $this->endBody() ?><?php $this->beginBlock('language') ?> $(function(){ $('#drow-language li').on('click',function(){ var language = $(this).attr('data-language'); $.cookie('language',language,{'path':'/'); window.location.reload(); }); });<?php $this->endBlock() ?><?php $this->registerJs($this->blocks['language'], \yii\web\View::POS_END); ?><
这里利用数据块的形式来执行注册js的代码。至此点击选择语言版本已经可以实现将值保存在cookie中了,并且重新reload,那么可以在入口文件处获取该值,并且赋值给app应用的langage属性。特别注意的是path设置cookie在整个网站中可以使用,如果没有设置,只默认在当前的url中可以使用。
$application = new yii\web\Application($config);$application->language = isset($_COOKIE['language']) ? $_COOKIE['language'] : 'zh-CN';$application->run();如果不想在这里改动也可以在配置文件设置。
'language' => isset($_COOKIE['language']) ? $_COOKIE['language'] : 'zh-CN',ok,整个语言版本的切换利用cookie的实现方式就完成了,比如点击Chinese语言,则变成中文
(2)利用session实现
利用session实现的话,就不需要jquery.cookie.js文件了,不过引入也无所谓,可能有其他的用处。
视图文件就有些地方需要改变一下,其他不变,变成如下:
[ 'label' => Yii::t('language','Language'), 'dropDownOptions' => ['id' => 'drow-language','style' => 'min-width:90px;'], 'items' => [ ['label' => Yii::t('language','Chinese'), 'url' =>['/order/language', 'language' =>'zh-CN']], ['label' => Yii::t('language','English'), 'url' =>['/order/language', 'language' => 'en-US']], ],],
主要的改变就是添加‘url'的属性,把原来的options属性删除。
那么在OrderController.php中定义操作
public function actionLanguage($language) {$session = Yii::$app->session;$session->open();if(isset($language)){ Yii::$app->session['language'] = $language; } //切换完语言哪来的返回到哪里,即reload $this->goBack(Yii::$app->request->headers['Referer'])}
语言版本的值就保存在session中,那么在入口文件处也要做处理:
$application = new yii\web\Application($config);$application->language = isset(Yii::$app->session['language']) ? Yii::$app->session['language'] : 'zh-CN';$application->run();那么在session中处理语言版本的切换也就完成了。
0 0
- yii2框架-多语言版本切换(十三)
- Yii2.0 实现多语言切换
- yii2框架-restful的请求参数token验证(二十三)
- yii2 多语言实现
- yii2 多语言设置
- Yii2 多语言配置
- Yii2 使用十三 RBAC
- yii2 高级版 多版本支持
- gcc多版本切换
- gcc多版本切换
- python 多版本切换
- Python 多版本切换
- 多版本python切换
- 浅谈C#软件设计之语言版本切换
- Windows 7各版本切换语言
- SharePoint 2013网站语言版本切换
- c#软件实现语言版本切换
- java连接Oracle更改语言环境,语言版本切换
- 20. Valid Parentheses [easy] (Python)
- FreeMarker的认识及实例(一)
- 制作圆形头像
- mingw中安装 rtmpdump
- 安卓屏幕知识
- yii2框架-多语言版本切换(十三)
- TextView加文字阴影
- 并发和并行的区别
- 数学考试 1
- top命令详解
- 查找替换操作
- Leg Design for Energy Management in an Electromechanical Robot
- CDN介绍及其优势
- 数据结构之循环队列