標籤:

Yii2語言國際化自動配置

Yii2語言國際化自動配置

轉載

Yii2語言國際化自動配置 - 博文 - Gowhich?

www.gowhich.com圖標

如何實現語言國際自動化,大家可能覺得自動化,是不是不需要配置就自動切換,這個思路我之前也想過,能不能根據IP來判斷地理位置然後確定其語言,網上找過一個"IpToCountry"相關的,有興趣的可以搜索出來看看,他會提供一個ip對照的表,每隔一段時間會更新一次,不過這個暫時沒做,後面考慮嘗試下

這裡我們說下Yii2如何實現,因為我們上面的一篇文章分享做了語言國際化的配置,也將對應的語言翻譯了出來,下面就是需要根據條件來做切換

從配置文件我們知道只需要更改language這個配置值就可以了,但是要在哪裡更改呢。這裡我的操作步驟如下

我想整體對項目的所有內容進行語言國際化,唯一我能想到的是修改控制器,有的說是修改 入口文件,我覺得修改入口文件有點破壞框架結構了。

第一步 創建一個AppController

繼承yii/web/Controller,實現如下

<?phpnamespace appcontrollers;use Yii;use yiiwebController;class AppController extends Controller{ public function init() { if (isset(Yii::$app->session[_lang])) { Yii::$app->language = Yii::$app->session[_lang]; } parent::init(); }}

第二步 將所有自己的控制器都繼承AppController

做類似如下操作,我這裡只是舉了一個BlogController的例子

class BlogController extends AppController

第三步 實現設置多語言的處理

我這裡在我的控制器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);}

每次需要修改語言的話,只要將語言傳入actionLanguage,就會更改session中_lang的值,然後每個控制器在調用的時候都會先去更改項目的language

第四步 前端UI修改

通過在前端加個修改的邏輯,方便前端訪問者進行更改語言設置

<ul class="nav navbar-nav navbar-right"> <li class="dropdown"> <a href="j#" 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 })}}" >{{ Yii.t(app, Chinese) }}</a> </li> <li class="{% if app.session[_lang] == en-US %}active{% endif %}" > <a href="{{ url([site/language], { language: en-US })}}" >{{ Yii.t(app, English) }}</a> </li> </ul> </li></ul>

我這裡使用的Twig模板。

到這裡就都設置完了,可以正常切換語言了。後面如果又加了新的內容進去的話,可以直接執行上文中提到的命令

./yii message/extract @app/config/i18n.php

如有不理解的地方可以加群詳細了解

推薦閱讀:

百步之內,必有芳草 | 酷聽科技
世界第一高橋上有哪些黑科技? 「智能」混凝土
【第五期】AI Talk:AI 計算,從單機到集群(下)
減輕寶媽負擔 樂享清潔白科技
Spring Cloud 入門教程 - Eureka服務註冊與發現

TAG:國際化 | 科技 |