本文介紹了Yii1.x版本的國(guó)際化方案及相關(guān)問(wèn)題解決辦法
一 、Yii 國(guó)際化配置
找到main.php
并按照如下修改配置
return [
'sourceLanguage'=>'zh_cn', // 源語(yǔ)言、即不需要翻譯的默認(rèn)語(yǔ)言
'language'=>'zh_cn', // 當(dāng)前默認(rèn)語(yǔ)言
'components' => [
// 組件配置
]
];
配置中
sourceLanguage
一般指定zh_cn
就好掐松,中文是不需要翻譯的吗冤;而language
默認(rèn)跟他一樣缓艳,需要注意的是:二者一樣時(shí)是不會(huì)翻譯文本而是原樣輸出槽奕。
二嘴纺、 代碼處理
這里主要指view
的代碼
// 1. 普通
Yii::t('app', '要翻譯的文字');
// 輸出:要翻譯的文字
// 2. 替換關(guān)鍵字
Yii::t('app', ' {0}败晴,你好!', ['0'=>'世界']);
// 輸出:世界,你好!
// 3. 選擇符
Yii::t('app', '1#有效|2#無(wú)效', 2); // 注意第三個(gè)參數(shù)必須是數(shù)字
// 輸出:無(wú)效
// 4. 高級(jí)范
Yii::t('app', '1#有效|0#無(wú)效|n>1#神秘?cái)?shù)字n', 5); // 此處n表示輸入的第三個(gè)變量
// 輸出:神秘?cái)?shù)字n
其中app
表示文件名栽渴,可以根據(jù)需要自行分類(lèi)尖坤。切換語(yǔ)言可以這樣:
$targetLang = 'en_us';
Yii:app()->setLanguage($targetLang); // 切換后相當(dāng)于配置中的language變?yōu)榇苏Z(yǔ)音
其實(shí)名字可以隨便起,只需要確保有相關(guān)配置即可
三闲擦、生成翻譯文件
大家都過(guò)yii的命令行吧慢味,其中有一個(gè) yiic message [option]
就可以用來(lái)自動(dòng)生成配置文件,步驟如下:
- 復(fù)制
/framework/messages/config.php
到項(xiàng)目路徑下/protected/messages/config.php
墅冷,其中config.php
也可以叫別的 - 輸入命令
yiic message config.php
纯路,等幾秒后便根據(jù)配置自動(dòng)生成了代碼中用Yii::t
方法輸出的翻譯文件,連文件名都區(qū)分了
接下來(lái)我們看下config.php
都有什么
<?php
<?php
return array(
'sourcePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..', // 源語(yǔ)言目錄
// 其他語(yǔ)言目錄寞忿,sourcePath同級(jí)
'messagePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'messages',
'languages'=>array('zh_cn','en_us','ko_kr'), // 待翻譯的語(yǔ)言
'fileTypes'=>array('php'), // 檢測(cè)的文件擴(kuò)展名
'overwrite'=>true, // 是否覆蓋源文件感昼,開(kāi)啟后生成快
'exclude'=>array( // 要排除的文件或目錄
'.svn',
'.gitignore',
'yiilite.php',
'yiit.php',
'/i18n/data',
'/messages',
'/vendors',
'/web/js',
),
);
FAQ
1. 語(yǔ)言不能正常切換
檢查下sourceLanguage
是否為英文en_us
,即當(dāng)language
和sourceLanguage
一樣時(shí)不會(huì)進(jìn)行翻譯
以后翻譯直接寫(xiě)好代碼罐脊,完事通過(guò)命令自動(dòng)刷新翻譯文件就行了。至于最終由誰(shuí)來(lái)將中文譯成其他文字那不在討論范圍了蜕琴。