多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > ThinkPHP > ThinkPHP3.1快速入門(17)多語言

ThinkPHP3.1快速入門(17)多語言

來源:程序員人生   發布時間:2013-11-18 14:46:51 閱讀次數:3514次
ThinkPHP支持多語言,采用的是語言文件的方式。如果你的應用涉及到多個語言版本和國際化的支持,那么可以定義相關的語言包文件。任何字符串形式的輸出,都可以定義語言常量。

啟用多語言

要啟用多語言功能,首先要下載多語言行為擴展(http://www.thinkphp.cn/extend/186.html),或者下載官方的完整擴展包(http://www.thinkphp.cn/down/253.html)里面也已經包含多語言行為擴展了,把下載后解壓到的CheckLangBehavior.class.php 文件放入ThinkPHP/Extend/Behavior(如果沒有請手動創建)目錄下面。然后在項目的行為配置文件(Conf/tags.php)中啟用多語言行為,添加如下配置項:
return array(
    // 添加下面一行定義即可
    'app_begin' => array('CheckLang')
);
表示在app_begin標簽位置執行多語言檢測行為。
由于多語言默認是關閉的,我們還要在項目配置文件(Conf/config.php)中開啟語言包功能:
'LANG_SWITCH_ON' => true,   // 開啟語言包功能
其他的多語言相關配置參數包括:
'LANG_AUTO_DETECT' => true, // 自動偵測語言 開啟多語言功能后有效
'DEFAULT_LANG' => 'zh-cn', // 默認語言
'LANG_LIST'        => 'zh-cn,en-us', // 允許切換的語言列表 用逗號分隔
'VAR_LANGUAGE'     => 'l', // 默認語言切換變量
如果開啟了LANG_AUTO_DETECT,表示會自動偵測當前語言,否則就采用DEFAULT_LANG的語言設置。
語言包的使用由系統自動判斷當前用戶的瀏覽器支持語言來定位,如果瀏覽器支持多種語言,那么取第一種支持語言。
也可以在URL地址中使用參數來切換多語言,例如:
http://localhost/Lang/index.php/?l=en-us
多語言切換采用了Cookie機制,因此會記住當前的語言選擇。
多語言的切換受LANG_LIST參數控制,如果瀏覽器自動偵測的語言或者用戶切換的語言在LANG_LIST之外則無效,系統會采用默認語言。
例如,上面的設置參數情況下,訪問:
http://localhost/Lang/index.php/?l=zh-tw
由于zh-tw語言未在多語言列表中,所以將會采用簡體中文zh-cn語言包。

定義語言包

可以為項目定義不同的語言文件,語言文件包括系統語言包和項目語言包。框架的系統語言包目錄在系統框架的Lang目錄下面,每個語言都對應一個語言包文件,系統默認有簡體中文語言包文件zh-cn.php和英文語言包en-us.php ,如果要增加繁體中文zh-tw或者其他語言包,只要對照系統已有的語言包增加相應的文件。

語言文件主要提供對模板的多語言支持,數據的多語言轉換(翻譯)不在這個范疇之內。ThinkPHP具備語言包定義、自動識別、動態定義語言參數的功能。并且可以自動識別用戶瀏覽器的語言,從而選擇相應的語言包(如果有定義)。
項目語言包文件位于項目的Lang目錄下面,并且按照語言類別分子目錄存放,在執行的時候系統會自動加載,無需手動加載。
語言子目錄采用瀏覽器的語言命名(全部小寫)定義,例如English (United States) 可以使用en-us作為目錄名。一般情況下,如果項目不大,那定義common.php文件即可:
Lang/zh-cn/common.php
如果你的項目比較大,則可以按照模塊或者分組來單獨定義。具體的語言包文件命名規范如下:
項目公共語言包 語言目錄/common.php
項目分組語言包 語言目錄/分組名.php
項目模塊語言包 不存在分組情況:語言目錄/模塊名(小寫).php
存在分組的情況:語言目錄/分組名/模塊名(小寫).php
語言包文件可以按照模塊來定義,每個模塊單獨定義語言包文件,文件名和模塊名稱相同,例如:
Lang/zh-cn/user.php 表示給User模塊定義簡體中文語言包文件
Lang/zh-tw/user.php 表示給User模塊定義繁體中文語言包文件
分組的模塊語言包定義受TMPL_FILE_DEPR參數配置影響,如果你修改了TMPL_FILE_DEPR參數,例如:
'TMPL_FILE_DEPR'=>'_',
那么,分組的模塊語言包定義方式應該改為:
語言目錄/分組名_模塊名(小寫).php
如果你采用了新版的獨立分組模式的話,那么可以直接在分組的Lang目錄下定義分組語言文件,
Lang/分組名.php
ThinkPHP語言文件定義采用返回數組方式:
return array(
    'lan_define'=>'歡迎使用ThinkPHP',
);

使用語言定義

定義了語言文件后,我們通常需要改變控制器中的提示信息用法,例如:
throw_exception('新增用戶失敗!');
我們采用語言包后(例如在語言包里面增加了ADD_USER_ERROR 語言配置變量),在程序中的寫法就要改為:
throw_exception(L('ADD_USER_ERROR'));
也就是說,字符串信息要改成L方法和語言定義來表示。
如果ADD_USER_ERROR語言變量沒有定義的話,L方法會輸出當前的字符串ADD_USER_ERROR本身,所以你不用擔心ADD_USER_ERROR是否有定義,可以在最后統一修改語言文件。
定義好語言文件后,也可以在程序里面動態設置語言定義的值,使用下面的方式:
L('ADD_USER_ERROR','新增用戶錯誤!');
$value = L('ADD_USER_ERROR');
模型類的自動驗證功能里面會用到提示信息,這個部分也可以使用多語言的特性。例如:
原來的方式是把提示信息直接寫在模型里面定義
array('title','require','標題必須!',1),
如果使用了語言文件的話(假設,我們在當前語言包里面定義了' lang_var'=>'標題必須!')
還可以這樣定義模型的自動驗證:
array('title','require','{%lang_var}',1),
如果要在模板中輸出語言變量不需要在Action中賦值,可以直接使用模板引擎特殊標簽來直接輸出語言定義的值:
{$Think.lang.lang_var}
可以輸出當前選擇的語言包里面定義的 lang_var 語言定義。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲最新永久在线观看 | 无遮无挡非常色的视频免费 | 一二三四在线播放免费观看中文版视频 | 中国jizz18免费 | 69视频网站 | 中文字幕乱码人成乱码在线视频 | 亚洲综合日韩精品欧美综合区 | 亚洲色图男人天堂 | 国产免费福利视频一区二区 | 222aaa免费| 国产欧美又粗又猛又爽老 | 99久久中文字幕伊人 | 激情 黄 +色+成+人 | 久久亚洲成a人片 | 国产精品久久久久久久久久妇女 | 日本a级精品一区二区三区 日本a级毛片免费视频播放 | babes性欧美高清 | 黄色亚洲网站 | 欧美日韩在线亚洲国产人 | 97久久精品午夜一区二区 | 日本大胆欧美艺术337p | 成人精品一区二区不卡视频 | 一区二区三区在线免费视频 | 亚洲宅男天堂a在线 | 国产精品69白浆在线观看免费 | 影音先锋色成人资源网站 | 亚洲一区二区三区欧美 | 最好看的最新中文字幕2018免费视频 | 羞羞视频免费观看入口 | 天堂欧美 | 一级做α爱过程免费视频 | 免费一级肉体全黄毛片高清 | 性欧美18| 欧美肥老太太 | 性激烈的欧美三级视频中文字幕 | 爱爱综合网 | 国产欧美一区二区久久 | 久久福利资源站免费观看i 久久高清一级毛片 | 九色亚洲| 久久国产一级毛片一区二区 | 亚洲国产精品一区 |