第一步:我们在@app/messages可以作为我们存放不同语言文件的文件夹,在该文件夹下面建立对应的语言文件夹,比如zh-CN文件夹,代表中文,那么我们现在在文件夹下面建立一个语言文件,叫language.php。那么在@app/messages/zh-CN/language.php:
<?php
return [
'Language' => '语言',
'Chinese' => '中文',
'English' => '英文',
];
第二步:添加语言包配置/frontend/config/main.php
return [ 'language'=>'zh-CN', //这个配置别漏了,选择中文语言包 ... 'components' => [ ... 'i18n' => [ 'translations' => [ 'English' => [ 'class' => 'yii\i18n\PhpMessageSource', // 'basePath' => '/messages/English', 'fileMap' => [ 'English' => 'language.php', ], ], 'zh-CN' => [ 'class' => 'yii\i18n\PhpMessageSource', // 'basePath' => '/messages/zh-CN', 'fileMap' => [ 'zh-CN' => 'language.php', ], ], ], ], ] ]
第三部:
视图文件就有些地方需要改变一下,其他不变,变成如下:
[
'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']],
],
第四部:控制器方法
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();