yii2框架-多語言版本切換

首先我們要知道yii2框架是以英文作爲源語言的,其他的語言作爲目標語言的。所以在語言文件中是一對多的關係,源語言對應多種需要轉換的目標語言,也就是有多個不同的語言版本。

我們在@\backend/messages可以作爲我們存放不同語言文件的文件夾,在該文件夾下面建立對應的語言文件夾,比如zh-CN文件夾,代表中文,那麼我們現在在文件夾下面建立一個語言文件,叫app.php。那麼在@backend/messages/zh-CN/app.php:

<?php
return [
     'Language' => '語言',
     'Chinese' => '中文',
     'English' => '英文',
];


我們可以在視圖文件上利用use yii\bootstrap\NavBar;
use yii\bootstrap\Nav;來完成。

<?php

NavBar::begin([
    'brandLabel' => '',
    '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'), 'url' =>['/site/language', 'language' =>'zh-CN']],
                     ['label' => Yii::t('app','English'), 'url' =>['/site/language', 'language' => 'en-US']],
                     ['label' => Yii::t('app','German'), 'url' =>['/site/language', 'language' => 'de']],
               ],
         
        ],


   
     ]
    ]);
NavBar::end();

?>

那麼在SiteController.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();
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章