Yii2語(yǔ)言國(guó)際化自動(dòng)配置詳解
如何實(shí)現(xiàn)語(yǔ)言國(guó)際自動(dòng)化,大家可能覺(jué)得自動(dòng)化,是不是不需要配置就自動(dòng)切換,這個(gè)思路我之前也想過(guò),能不能根據(jù)IP來(lái)判斷地理位置然后確定其語(yǔ)言,網(wǎng)上找過(guò)一個(gè)"IpToCountry"相關(guān)的,有興趣的可以搜索出來(lái)看看,他會(huì)提供一個(gè)ip對(duì)照的表,每隔一段時(shí)間會(huì)更新一次,不過(guò)這個(gè)暫時(shí)沒(méi)做,后面考慮嘗試下
這里我們說(shuō)下Yii2如何實(shí)現(xiàn),因?yàn)槲覀兩厦娴囊黄恼路窒碜隽苏Z(yǔ)言國(guó)際化的配置,也將對(duì)應(yīng)的語(yǔ)言翻譯了出來(lái),下面就是需要根據(jù)條件來(lái)做切換
從配置文件我們知道只需要更改language這個(gè)配置值就可以了,但是要在哪里更改呢。這里我的操作步驟如下
我想整體對(duì)項(xiàng)目的所有內(nèi)容進(jìn)行語(yǔ)言國(guó)際化,唯一我能想到的是修改控制器,有的說(shuō)是修改 入口文件,我覺(jué)得修改入口文件有點(diǎn)破壞框架結(jié)構(gòu)了。
第一步 創(chuàng)建一個(gè)AppController
繼承yii/web/Controller,實(shí)現(xiàn)如下
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
class AppController extends Controller
{
public function init()
{
if (isset(Yii::$app->session['_lang'])) {
Yii::$app->language = Yii::$app->session['_lang'];
}
parent::init();
}
}
第二步 將所有自己的控制器都繼承AppController
做類(lèi)似如下操作,我這里只是舉了一個(gè)BlogController的例子
class BlogController extends AppController
第三步 實(shí)現(xiàn)設(shè)置多語(yǔ)言的處理
我這里在我的控制器SiteController加了如下Action
public function actionLanguage($language)
{
Yii::$app->session['_lang'] = $language;
$redirectUrl = Yii::$app->request->headers['Referer'];
if (!$redirectUrl) {
$redirectUrl = Yii::$app->homeUrl;
}
return $this->redirect($redirectUrl);
}
每次需要修改語(yǔ)言的話,只要將語(yǔ)言傳入actionLanguage,就會(huì)更改session中_lang的值,然后每個(gè)控制器在調(diào)用的時(shí)候都會(huì)先去更改項(xiàng)目的language
第四步 前端UI修改
通過(guò)在前端加個(gè)修改的邏輯,方便前端訪問(wèn)者進(jìn)行更改語(yǔ)言設(shè)置
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="j#" rel="external nofollow" data-target="#" class="dropdown-toggle" data-toggle="dropdown">
{{ Yii.t('app', 'Language') }}
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li
class="{% if app.session['_lang'] == 'zh-CN' %}active{% endif %}"
>
<a
href="{{ url(['site/language'], { 'language': 'zh-CN' })}}" rel="external nofollow"
>{{ Yii.t('app', 'Chinese') }}</a>
</li>
<li
class="{% if app.session['_lang'] == 'en-US' %}active{% endif %}"
>
<a
href="{{ url(['site/language'], { 'language': 'en-US' })}}" rel="external nofollow"
>{{ Yii.t('app', 'English') }}</a>
</li>
</ul>
</li>
</ul>
我這里使用的Twig模板。
到這里就都設(shè)置完了,可以正常切換語(yǔ)言了。后面如果又加了新的內(nèi)容進(jìn)去的話,可以直接執(zhí)行上文中提到的命令
./yii message/extract @app/config/i18n.php
如有不理解的地方可以加群詳細(xì)了解
ps:使用yii生成映射目錄
./yii message/extract @app/config/i18n.php
使用以上命令,實(shí)際上就是按照i18n.php中給定的參數(shù),執(zhí)行掃描操作,將所有形如Yii::t('app', 'xxx')這樣語(yǔ)句中的xxx取出,放入映射文件中。
這時(shí),在common/messages中會(huì)有zh-CN文件夾生成,里面的app.php即為映射文件。
app.php
return [
'OpenId' => 'OpenId',
'UserId' => '用戶(hù)id',
'UserName' => '用戶(hù)名',
'UserPortrait' => '用戶(hù)頭像',
'About' => '關(guān)于我們',
'Are you sure you want to delete this item?' => '確定要?jiǎng)h除?',
'Contact' => '聯(lián)系方式',
'Create' => '創(chuàng)建',
'Create Myuser' => '創(chuàng)建用戶(hù)',
'Delete' => '刪除',
'Home' => '首頁(yè)',
'Login' => '登錄',
'My Company' => '我的網(wǎng)站',
'Myusers' => '用戶(hù)',
'Reset' => '重置',
'Search' => '搜索',
'Update' => '更新',
'Update {modelClass}: ' => '更新用戶(hù)-',
];
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- YII2 實(shí)現(xiàn)多語(yǔ)言配置的方法分享
- Yii2簡(jiǎn)單實(shí)現(xiàn)多語(yǔ)言配置的方法
- Yii2語(yǔ)言國(guó)際化的配置教程
- Yii配置文件用法詳解
- Yii學(xué)習(xí)總結(jié)之安裝配置
- yii2.0實(shí)現(xiàn)pathinfo的形式訪問(wèn)的配置方法
- Yii2配置Nginx偽靜態(tài)的方法
- YII中Ueditor富文本編輯器文件和圖片上傳的配置圖文教程
- Nginx配置PHP的Yii與CakePHP框架的rewrite規(guī)則示例
- yii2 數(shù)據(jù)庫(kù)讀寫(xiě)分離配置示例
- Yii框架多語(yǔ)言站點(diǎn)配置方法分析【中文/英文切換站點(diǎn)】
相關(guān)文章
PHP實(shí)現(xiàn)權(quán)限管理功能示例
下面小編就為大家?guī)?lái)一篇PHP實(shí)現(xiàn)權(quán)限管理功能示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
ThinkPHP在新浪SAE平臺(tái)的部署實(shí)例
這篇文章主要介紹了ThinkPHP在新浪SAE平臺(tái)的部署的實(shí)現(xiàn)方法,以實(shí)例的形式詳細(xì)講述了WBlog的完整部署過(guò)程,需要的朋友可以參考下2014-10-10
PHP連接局域網(wǎng)MYSQL數(shù)據(jù)庫(kù)的簡(jiǎn)單實(shí)例
這篇文章介紹了PHP連接局域網(wǎng)MYSQL數(shù)據(jù)庫(kù)的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-08-08
淺析php如何實(shí)現(xiàn)App常用的秒發(fā)功能
很多社交軟件都是用了一種秒發(fā)機(jī)制,讓用戶(hù)的體檢感很好,今天我們也來(lái)談?wù)勥@些社交軟件中常用的小技巧。2016-08-08
php菜單/評(píng)論數(shù)據(jù)遞歸分級(jí)算法的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于php菜單/評(píng)論數(shù)據(jù)遞歸分級(jí)算法的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用php具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Yii2隱藏frontend/web和backend/web的方法
這篇文章主要介紹了Yii2隱藏frontend/web和backend/web的方法,需要的朋友可以參考下2015-12-12
php+memcache實(shí)現(xiàn)的網(wǎng)站在線人數(shù)統(tǒng)計(jì)代碼
這篇文章主要介紹了php+memcache實(shí)現(xiàn)的網(wǎng)站在線人數(shù)統(tǒng)計(jì)代碼,代碼例子簡(jiǎn)潔實(shí)用,需要的朋友可以參考下2014-07-07
Zend Framework動(dòng)作助手(Zend_Controller_Action_Helper)用法詳解
這篇文章主要介紹了Zend Framework動(dòng)作助手(Zend_Controller_Action_Helper)用法,詳細(xì)分析了動(dòng)作助手Zend_Controller_Action_Helper功能,定義,使用方法與相關(guān)實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-03-03

