1 回答

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個贊
ThinkPHP 多語言支持的配置與使用
ThinkPHP 多語言配置
ThinkPHP 內(nèi)置了對多語言的支持,如果應(yīng)用項(xiàng)目涉及到國際化,那么可以定義相關(guān)的語言包文件以實(shí)現(xiàn)多語言支持。這里涉及的多語言支持是指模板語言,數(shù)據(jù)的多語言轉(zhuǎn)換(翻譯)不在這個范疇之內(nèi)。
在項(xiàng)目配置文件里添加如下參數(shù)以開啟多語言的支持:
'LANG_SWITCH_ON' => true, //開啟多語言支持開關(guān)
'DEFAULT_LANG' => 'zh-cn', // 默認(rèn)語言
'LANG_AUTO_DETECT' => true, // 自動偵測語言
ThinkPHP 會自動判斷當(dāng)前用戶的瀏覽器支持語言來定位該使用何種語言包,如果找不到相關(guān)的語言包文件,會使用默認(rèn)語言。如果瀏覽器支持多種語言,那么取第一種支持語言。
除了自動偵測當(dāng)前用戶的瀏覽器語言之外,也可以在 URL 中指定使用何種語言,詳細(xì)見下面例子。
與多語言有關(guān)的文件包或目錄如下:
ThinkPHP系統(tǒng)簡體中文語言包:ThinkPHP系統(tǒng)目錄/Lang/zh-cn.php
ThinkPHP系統(tǒng)繁體中文語言包:ThinkPHP系統(tǒng)目錄/Lang/zh-tw.php
ThinkPHP系統(tǒng)美國英語語言包:ThinkPHP系統(tǒng)目錄/Lang/en-us.php
項(xiàng)目簡體中文語言包目錄:項(xiàng)目目錄/Lang/<項(xiàng)目分組/>zh-cn/
項(xiàng)目繁體中文語言包目錄:項(xiàng)目目錄/Lang/<項(xiàng)目分組/>zh-tw/
項(xiàng)目美國英語中文語言包目錄:項(xiàng)目目錄/Lang/<項(xiàng)目分組/>en-us/
如果有更多語言,可以按照例子依次創(chuàng)建文件或目錄即可。
項(xiàng)目多語言實(shí)例
下面以一個中英雙語的例子來看項(xiàng)目多語言支持的具體實(shí)現(xiàn)。
在 項(xiàng)目目錄/Lang/zh-cn/ 下創(chuàng)建 common.php 文件,并在內(nèi)設(shè)定簡體中文語言定義:
<?php
return array(
'welcome'=>'歡迎使用 ThinkPHP !',
'message'=>'這是一條測試消息!',
);
?>
在 項(xiàng)目目錄/Lang/en-us/ 下創(chuàng)建 common.php 文件,并在內(nèi)設(shè)定美國英語語言定義:
<?php
return array(
'welcome'=>'Welcome to ThinkPHP!',
'message'=>'This is a test message!',
);
?>
在操作中(如 Index 模塊 lang 操作)中:
public function lang(){
$this->assign('message', L('message'));
$this->display();
}
對應(yīng)的模板(Tpl/default/Index/lang.html):
<p>{$Think.lang.welcome}</p>
<p>{$message}</p>
<p>切換到:<a href="?l=zh-cn">簡體中文</a> | <a href="?l=en-us">English</a></p>
當(dāng)我們訪問該操作時,系統(tǒng)會根據(jù)當(dāng)前瀏覽器語言來自動獲取對應(yīng)的語言包內(nèi)容。上面的例子中,直接在模板中顯示的內(nèi)容使用 {$Think.lang.welcome} 來輸出,而在操作中獲取語言包內(nèi)容時,需要使用 L 快捷方法。當(dāng)點(diǎn)擊 English 鏈接時,由于 URL 中傳入了 l=en-us 參數(shù),系統(tǒng)會獲取對應(yīng)的英語語言包,從而顯示:
Welcome to ThinkPHP!
This is a test message!
L 快捷方法
L 快捷方法用于獲取和設(shè)置語言定義,語法如下:
L(name, value)
如果 name 和 value 參數(shù)都存在時,表示設(shè)定語言變量名 name=value;當(dāng) value 省略時,表示獲取 name 語言變量對應(yīng)的值,若 name 未定義時,將 name 以大寫返回。
模塊定義語言包
當(dāng)項(xiàng)目比較大時,可能需要按照模塊來定義語言包。按照模塊定義語言包時,語言包名字就是對應(yīng)的模塊名字(小寫)。如給 User 模塊定義語言包時,對應(yīng)的語言包文件為:項(xiàng)目目錄/Lang/zh-cn/user.php 。
對模塊定義語言包時,使用上與上面普通定義方式完全一致。當(dāng)模塊語言包與普通語言包有相同的語言定義項(xiàng)時,模塊語言包的定義會覆蓋普通方式的定義。
項(xiàng)目模型里使用語言包
項(xiàng)目多語言支持中除了模板和模塊操作要用到語言包之外,在模型類里也可能需要用到語言包(如自動驗(yàn)證的提示信息)。要在項(xiàng)目模型里使用語言包,只需將原來寫入驗(yàn)證規(guī)則的提示信息更改為:
array('title','require','{%vali_title}',1),
vali_title 是項(xiàng)目語言包里面定義的語言變量,如同例子上面定義 welcome 和 message 一樣。如果想測試多語言的效果,可以在表單提交的時候傳入 l 參數(shù):
<form action="-Article/insert/l/en-us" method="post">
注意:在提交表單里不可像前面列子使用 -Article/insert?l=en-us 這種參數(shù)傳入形式,否則會導(dǎo)致“表單令牌錯誤”。
由于 ThinkPHP 具有自動檢測瀏覽器使用語言的功能,因此一般不需要在 URL 中傳入 l 參數(shù),當(dāng)然這不是絕對的,可以根據(jù)實(shí)際情況來決定。
- 1 回答
- 0 關(guān)注
- 1320 瀏覽
添加回答
舉報