Yii2語言國際化自動配置
轉載
Yii2語言國際化自動配置 - 博文 - Gowhich如何實現語言國際自動化,大家可能覺得自動化,是不是不需要配置就自動切換,這個思路我之前也想過,能不能根據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);}
第四步 前端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服務註冊與發現