前言
最近想將博客做成支持多語(yǔ)言的,還好Yii2支持這個(gè)功能,于是查看了下官方的文檔,哎,看了半天不知道干嘛用的,于是各種百度,Google的搜索,最終才明白原來(lái)很簡(jiǎn)單,只是官方寫的太復(fù)雜
下面介紹下具體的使用步驟,具體介紹我就不寫了,官方寫比我清楚,我就寫怎么使用
第一步 創(chuàng)建i18n配置文件
./yii message/config @app/config/i18.php // yii 在項(xiàng)目目錄下 Yii2創(chuàng)建的時(shí)候自動(dòng)生成的
執(zhí)行完命令之后會(huì)在項(xiàng)目根目錄config下創(chuàng)建一個(gè)i18n.php文件
為什么要?jiǎng)?chuàng)建這個(gè)文件,因?yàn)槲覀優(yōu)榱硕嗾Z(yǔ)言處理,需要生成一個(gè)對(duì)應(yīng)的映射文件,只要生成就好了,稍后的配置程序會(huì)自動(dò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,
];
我這里只改了兩個(gè)地方
'sourcePath' => '@app', // 將@yii改為@app 只處理我們自己應(yīng)用中的代碼
'messagePath' => '@app/messages', // 將@yii/messages改為@app/messages 將需要翻譯的字段提取出來(lái)要放的目錄
'languages' => ['zh-CN', 'ru-RU'], // 要翻譯成目標(biāo)的語(yǔ)言,我這里定義了一個(gè)"中文"和"俄語(yǔ)"
和
'except' => [
'.svn',
'.git',
'.gitignore',
'.gitkeep',
'.hgignore',
'.hgkeep',
'/messages',
'/BaseYii.php',
'vendor', // 將vendor目錄下的過(guò)濾掉,不然可能太多了
],
第三步 生成翻譯配置文件
執(zhí)行下面的命令
./yii message/extract @app/config/i18n.php
執(zhí)行完之后會(huì)在messages目錄下(如果沒(méi)有messages目錄的話需要手動(dòng)創(chuàng)建下)得到如下的目錄結(jié)構(gòu)
├── ru-RU
│ └── app.php
└── zh-CN
└── app.php
提示下再做這個(gè)操作之前,需要在自己的項(xiàng)目中有類似Yii:t()的調(diào)用,比如我這里在components/HeaderWidget.php這個(gè)文件中
這里的app的作用是用來(lái)進(jìn)行文件分類的,我這里暫時(shí)沒(méi)有計(jì)劃生成的時(shí)候會(huì)將所有需要翻譯的字段放在app開頭命名的php文件app.php文件中
如果像下面這樣調(diào)用的話
會(huì)生成一個(gè)appp.php的文件
第四步 翻譯配置文件
看下中文的翻譯文件messages/zh-CN/app.php,我的是下面這個(gè)
return [
'Archive' => '',
'Autokid' => '',
'Blog' => '',
'Ctime' => '',
'IP地址' => '',
'UserAgent' => '',
'主題' => '',
'內(nèi)容' => '',
'姓名' => '',
'日期' => '',
'郵箱地址' => '',
'頁(yè)面路徑' => '',
'Home' => '首頁(yè)', // 右邊的鍵值對(duì)應(yīng) Yii::t('app', 'Home')中的Home,只需要在value中寫入需要的漢字就可以了。
];
第五步 修改目標(biāo)國(guó)際化語(yǔ)言
修改配置文件
'language' => 'zh-CN', // 指定為要翻譯的語(yǔ)言
再打開網(wǎng)頁(yè),就可以看到已經(jīng)翻譯成了對(duì)應(yīng)需要的語(yǔ)言,當(dāng)然這樣的配置很不靈活,如果是部署多態(tài)機(jī)器并通過(guò)域名或者其他方式來(lái)實(shí)現(xiàn)的話,也是可以的,這里的話我建議如下方式
創(chuàng)建自己的Controller,然后將語(yǔ)言配置放在Session中,通過(guò)獲取Session中的語(yǔ)言來(lái)更換全站的語(yǔ)言。具體見(jiàn)后面分享
提示,網(wǎng)站很多地方提到要加個(gè)配置,官方也是
'i18n' => [
'translations' => [
'app*' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@app/messages',
'sourceLanguage' => 'en-US',
'fileMap' => [
'app' => 'app.php',
],
],
],
],
我這邊在配置的時(shí)候沒(méi)有加,運(yùn)行也都是正常的,如有遇到問(wèn)題,可以一起溝通交流下。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
您可能感興趣的文章:- YII2 實(shí)現(xiàn)多語(yǔ)言配置的方法分享
- Yii2簡(jiǎn)單實(shí)現(xiàn)多語(yǔ)言配置的方法
- Yii2語(yǔ)言國(guó)際化自動(dòng)配置詳解
- 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ù)讀寫分離配置示例
- Yii框架多語(yǔ)言站點(diǎn)配置方法分析【中文/英文切換站點(diǎn)】