Yii2語言國際化的配置教程
前言
最近想將博客做成支持多語言的,還好Yii2支持這個功能,于是查看了下官方的文檔,哎,看了半天不知道干嘛用的,于是各種百度,Google的搜索,最終才明白原來很簡單,只是官方寫的太復(fù)雜
下面介紹下具體的使用步驟,具體介紹我就不寫了,官方寫比我清楚,我就寫怎么使用
第一步 創(chuàng)建i18n配置文件
./yii message/config @app/config/i18.php // yii 在項(xiàng)目目錄下 Yii2創(chuàng)建的時候自動生成的
執(zhí)行完命令之后會在項(xiàng)目根目錄config下創(chuàng)建一個i18n.php文件
為什么要創(chuàng)建這個文件,因?yàn)槲覀優(yōu)榱硕嗾Z言處理,需要生成一個對應(yīng)的映射文件,只要生成就好了,稍后的配置程序會自動調(diào)用處理
第二步 修改配置規(guī)則
打開config/i18n.php,看下生成的配置文件的代碼,如下:
return [ 'color' => null, 'interactive' => true, 'help' => null, 'sourcePath' => '@yii', 'messagePath' => '@yii/messages', 'languages' => [], 'translator' => 'Yii::t', 'sort' => false, 'overwrite' => true, 'removeUnused' => false, 'markUnused' => true, 'except' => [ '.svn', '.git', '.gitignore', '.gitkeep', '.hgignore', '.hgkeep', '/messages', '/BaseYii.php', ], 'only' => [ '*.php', ], 'format' => 'php', 'db' => 'db', 'sourceMessageTable' => '{{%source_message}}', 'messageTable' => '{{%message}}', 'catalog' => 'messages', 'ignoreCategories' => [], 'phpFileHeader' => '', 'phpDocBlock' => null, ];
修改后的代碼,如下:
return [ 'color' => null, 'interactive' => true, 'help' => null, 'sourcePath' => '@app', 'messagePath' => '@app/messages', 'languages' => ['zh-CN', 'ru-RU'], 'translator' => 'Yii::t', 'sort' => false, 'overwrite' => true, 'removeUnused' => false, 'markUnused' => true, 'except' => [ '.svn', '.git', '.gitignore', '.gitkeep', '.hgignore', '.hgkeep', '/messages', '/BaseYii.php', 'vendor', ], 'only' => [ '*.php', ], 'format' => 'php', 'db' => 'db', 'sourceMessageTable' => '{{%source_message}}', 'messageTable' => '{{%message}}', 'catalog' => 'messages', 'ignoreCategories' => [], 'phpFileHeader' => '', 'phpDocBlock' => null, ];
我這里只改了兩個地方
'sourcePath' => '@app', // 將@yii改為@app 只處理我們自己應(yīng)用中的代碼 'messagePath' => '@app/messages', // 將@yii/messages改為@app/messages 將需要翻譯的字段提取出來要放的目錄 'languages' => ['zh-CN', 'ru-RU'], // 要翻譯成目標(biāo)的語言,我這里定義了一個"中文"和"俄語"
和
'except' => [ '.svn', '.git', '.gitignore', '.gitkeep', '.hgignore', '.hgkeep', '/messages', '/BaseYii.php', 'vendor', // 將vendor目錄下的過濾掉,不然可能太多了 ],
第三步 生成翻譯配置文件
執(zhí)行下面的命令
./yii message/extract @app/config/i18n.php
執(zhí)行完之后會在messages目錄下(如果沒有messages目錄的話需要手動創(chuàng)建下)得到如下的目錄結(jié)構(gòu)
├── ru-RU
│ └── app.php
└── zh-CN
└── app.php
提示下再做這個操作之前,需要在自己的項(xiàng)目中有類似Yii:t()的調(diào)用,比如我這里在components/HeaderWidget.php這個文件中
Yii::t('app', 'Home')
這里的app的作用是用來進(jìn)行文件分類的,我這里暫時沒有計(jì)劃生成的時候會將所有需要翻譯的字段放在app開頭命名的php文件app.php文件中
如果像下面這樣調(diào)用的話
Yii::t('appp', 'Home')
會生成一個appp.php的文件
第四步 翻譯配置文件
看下中文的翻譯文件messages/zh-CN/app.php,我的是下面這個
return [ 'Archive' => '', 'Autokid' => '', 'Blog' => '', 'Ctime' => '', 'IP地址' => '', 'UserAgent' => '', '主題' => '', '內(nèi)容' => '', '姓名' => '', '日期' => '', '郵箱地址' => '', '頁面路徑' => '', 'Home' => '首頁', // 右邊的鍵值對應(yīng) Yii::t('app', 'Home')中的Home,只需要在value中寫入需要的漢字就可以了。 ];
第五步 修改目標(biāo)國際化語言
修改配置文件
'language' => 'zh-CN', // 指定為要翻譯的語言
再打開網(wǎng)頁,就可以看到已經(jīng)翻譯成了對應(yīng)需要的語言,當(dāng)然這樣的配置很不靈活,如果是部署多態(tài)機(jī)器并通過域名或者其他方式來實(shí)現(xiàn)的話,也是可以的,這里的話我建議如下方式
創(chuàng)建自己的Controller,然后將語言配置放在Session中,通過獲取Session中的語言來更換全站的語言。具體見后面分享
提示,網(wǎng)站很多地方提到要加個配置,官方也是
'i18n' => [ 'translations' => [ 'app*' => [ 'class' => 'yii\i18n\PhpMessageSource', 'basePath' => '@app/messages', 'sourceLanguage' => 'en-US', 'fileMap' => [ 'app' => 'app.php', ], ], ], ],
我這邊在配置的時候沒有加,運(yùn)行也都是正常的,如有遇到問題,可以一起溝通交流下。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- YII2 實(shí)現(xiàn)多語言配置的方法分享
- Yii2簡單實(shí)現(xiàn)多語言配置的方法
- Yii2語言國際化自動配置詳解
- Yii配置文件用法詳解
- Yii學(xué)習(xí)總結(jié)之安裝配置
- yii2.0實(shí)現(xiàn)pathinfo的形式訪問的配置方法
- Yii2配置Nginx偽靜態(tài)的方法
- YII中Ueditor富文本編輯器文件和圖片上傳的配置圖文教程
- Nginx配置PHP的Yii與CakePHP框架的rewrite規(guī)則示例
- yii2 數(shù)據(jù)庫讀寫分離配置示例
- Yii框架多語言站點(diǎn)配置方法分析【中文/英文切換站點(diǎn)】
相關(guān)文章
PHP實(shí)現(xiàn)RTX發(fā)送消息提醒的實(shí)例代碼
本篇文章主要介紹了PHP實(shí)現(xiàn)RTX發(fā)送消息提醒的實(shí)例代碼,具有一定的參考價值,有興趣的可以了解一下。2017-01-01淺談PHP檢查數(shù)組中是否存在某個值 in_array 函數(shù)
下面小編就為大家?guī)硪黄獪\談PHP檢查數(shù)組中是否存在某個值 in_array 函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06Laravel框架實(shí)現(xiàn)調(diào)用百度翻譯API功能示例
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)調(diào)用百度翻譯API功能,結(jié)合實(shí)例形式分析了基于Laravel框架的百度翻譯API調(diào)用相關(guān)操作技巧,需要的朋友可以參考下2019-05-05php解析mht文件轉(zhuǎn)換成html的實(shí)例
下面小編就為大家?guī)硪黄猵hp解析mht文件轉(zhuǎn)換成html的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03Thinkphp5+PHPExcel實(shí)現(xiàn)批量上傳表格數(shù)據(jù)功能
這篇文章主要介紹了Thinkphp5+PHPExcel實(shí)現(xiàn)批量上傳表格數(shù)據(jù)功能,需要的朋友可以參考下2017-11-11淺談php數(shù)組array_change_key_case() 函數(shù)和array_chunk()函數(shù)
下面小編就為大家?guī)硪黄獪\談php數(shù)組array_change_key_case() 函數(shù)和array_chunk()函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10laravel admin實(shí)現(xiàn)分類樹/模型樹的示例代碼
這篇文章主要介紹了laravel admin實(shí)現(xiàn)分類樹/模型樹,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06windows系統(tǒng)php環(huán)境安裝swoole具體步驟
這篇文章主要介紹了windows系統(tǒng)php環(huán)境安裝swoole具體步驟,swoole目前是比較熱門的一個擴(kuò)展插件,有需要的同學(xué)可以學(xué)習(xí)下2021-03-03