項(xiàng)目需要開發(fā)英文版,于是需要搭建多語(yǔ)言項(xiàng)目.
項(xiàng)目使用Thinkphp框架,隱約記得Thinkphp有多語(yǔ)言設(shè)置,翻看了幫助手冊(cè),果然有,這就邊實(shí)驗(yàn)邊開始:
Thinkphp采用app_begain來(lái)檢測(cè)和切換語(yǔ)言包,語(yǔ)言包和項(xiàng)目相關(guān),構(gòu)架等都比較簡(jiǎn)單,具體的這里:
http://www.thinkphp.cn/info/188.html
搭建好了,就可以使用URL."?l=en-us"來(lái)動(dòng)態(tài)切換和調(diào)試,很不錯(cuò)的.
這邊發(fā)現(xiàn)js內(nèi)的多語(yǔ)言不好處理,總不能全部assign過(guò)去,反正多語(yǔ)言也不會(huì)總是配置,干脆自動(dòng)生成對(duì)應(yīng)的多語(yǔ)言js文件,然后頁(yè)面根據(jù)LANG_SET來(lái)動(dòng)態(tài)請(qǐng)求對(duì)應(yīng)的多語(yǔ)言文件,在基礎(chǔ)Action類的_initialize()方法內(nèi)調(diào)用下面的生成函數(shù):
- public function _generateJsLanguageFile(){
- if(C("LANG_SWITCH_ON")){
- $jsLangFilePath = "./Public/v2/js/lang";
- $langList = L();
- $jsLangFileName = $jsLangFilePath."/".LANG_SET.".js";
- //@unlink($jsLangFileName);//測(cè)試,不永久緩存語(yǔ)言包
- //已存在語(yǔ)言包
- if(is_file($jsLangFileName)){
- return;
- }
- $str = "var /$LANG={";
- $total = count($langList);
- $k = 1;
- foreach ($langList as $key => $value) {
- $str .=$key.":'".$value."'";
- if($k < $total){
- $str .=",";
- }
- // $str .="/r/n";
- $k++;
- }
- if(!emptyempty($str)){
- $str .= "}";
- $file_handel = fopen($jsLangFileName, "w+");//打開文件,重寫模式
- fwrite($file_handel, $str);
- fclose($file_handel);
- }
- }
- }
這樣,每次訪問(wèn)前都會(huì)生成當(dāng)前的語(yǔ)言包,然后在Tpl內(nèi)調(diào)用.
這樣,每次都會(huì)自動(dòng)載入,這個(gè)js是永久緩存的,如果有語(yǔ)言包的更改,只需要修改Thinkphp的語(yǔ)言包,然后刪除舊的js語(yǔ)言包,讓他自動(dòng)重新生成.
js內(nèi)就可以這么使用:top10_title = $LANG._NEW_LANGUAGE;這樣整個(gè)項(xiàng)目就等于是雙語(yǔ)的,并且是一處配置即可.
新聞熱點(diǎn)
疑難解答
圖片精選