【小(xiǎo)編推薦】ThinkPHP3.2——多(duō)語言支持

2014-06-26  &nb↕™γ↕sp;|   ✘δ¥&發布者:梁國(guó)芳   |&nbs↑©​p;  查看(kàn):332§₹✔0次

Thinkphp

ThinkPHP內(nèi)置多(duō)語言支持,如(rú)€σ↔果你(nǐ)的(de)應用(yòng)涉及到♣₹(dào)國(guó)際化(huà)的(de)支持,那(nà←•±)麽可(kě)以定義相(xiàng)關的(de)語言包文(wén)件 γ♥(jiàn)。任何字符串形式的(de)輸出,都(dōu)可(kě)以± ₽定義語言常量。

要(yào)啓用(yòng)多(duō)語言功能(né©©₹ng),需要(yào)配置開(kāi)啓多(duō)語言¥<∞行(xíng)為(wèi),在應用(yòn€ λg)的(de)配置目錄下(xià)面的(de)行(xíng)→ ε為(wèi)定義文(wén)件(jiànφ∑®☆)tags.php中,添加:

  1. return array(
  2. // 添加下(xià)面一(yī)行(xíng☆→‍)定義即可(kě)
  3. 'app_begin' => array('Behavior\CheckLang'),
  4. // 如(rú)果是(shì)3.2.1版本 ←™✘∞需要(yào)改成
  5. // 'app_begin' => arrσ&ay('Behavior\CheckLangBehavior')≠←,
  6. );

表示在app_begin标簽位置執行(xíng)多(duō)語言檢測行(xíng)π₹↕±為(wèi)。

要(yào)開(kāi)啓語言包功能(néng),需要(yào)開(kāi)₽≥啓

  1. 'LANG_SWITCH_ON' => true, // 開(kāi)啓語言包功能(néng)

其他(tā)的(de)配置參數(shù)包括:

  1. 'LANG_AUTO_DETECT' => true, // 自(zì)動偵測語言 開(kāi)啓多(duō)語€₩言功能(néng)後有(yǒu)效
  2. 'LANG_LIST' => 'zh-cn', // 允許切換的(de)語言列表 用(yòng)逗号分(fēn)隔
  3. 'VAR_LANGUAGE' => 'l', // 默認語言切換變量

可(kě)以為(wèi)項目定義不(bù)同的(de)語言↕ ↑'文(wén)件(jiàn),框架的(de)系統語言包目錄在系統框架的( Ω®de)Lang目錄下(xià)面,每個(gè)語言都(↓∑♦₽dōu)對(duì)應一(yī)個(gè)語言包文(wén)件(ji‌↑"‌àn),系統默認隻有(yǒu)簡體(tǐ)中文™"(wén)語言包文(wén) 件(jiàn)zh-cn.php和(hé)>φε英文(wén)語言包en-us.php ,如(rú÷>‌)果要(yào)增加繁體(tǐ)中文(wén)zh-tw或者其他(tā)→↑↓語言支持,隻要(yào)增加相(xiàng)¶©'應的(de)語言定義文(wén)件(jiàn)。

語言包的(de)使用(yòng)由系統自§←♥ (zì)動判斷當前用(yòng)戶的(de)浏覽器(qì)支持語言來→≤♥(lái)定位,如(rú)果找不(bù)到(dào)相(xi♦✔àng)關的(de)語言包文(wén)件(ji€®àn),會(huì)使用(yòng)默認的(de)語≥↕言。如(rú)果浏覽器(qì)支持多(duō)種語言,那(nà¶↔)麽取第一(yī)種支持語言。

ThinkPHP的(de)多(duō)語言支持是(shì)指的(de)是(s♦§>↓hì)模闆多(duō)語言支持,數(shù)據的(de)多(duō)語✘ π<言轉換(翻譯)不(bù)在這(zhè)個(gè)範疇之內(nèi)。₽εThinkPHP具備語言包定義、自(zì)動識别、動态定義語言參數(shù←↑ε♠)的(de)功能(néng)。并且可(kě)以自(zì)動識♥λ ≈别用(yòng)戶浏覽器(qì)的(de)語言€π∑,從(cóng)而選擇相(xiàng)應的(de)語言包(如(rú)Ω≤σ果有(yǒu)定義)。例如(rú):

  1. throw_exception'新增用(yòng)戶失敗!');

我們在語言包裡(lǐ)面增加了(le)ADD_USER_ERROR語言配置變量的(de)話(huà),在程序¶®☆中的(de)寫法就(jiù)要(yào)改為(wèi):

  1. throw_exceptionL('ADD_USER_ERROR'));

也(yě)就(jiù)是(shì)說(shuō​₽),字符串信息要(yào)改成L方法和(hé)語言€✘♦定義來(lái)表示。

應用(yòng)語言包文(wén)件(j∑ >iàn)位于應用(yòng)公共模塊下(xià)的(de)₽↔Lang目錄,并且按照(zhào)語言類别分(fēn)子(zǐ)目‌✔ "錄存放(fàng),在執行(xíng)的(de)時(sΩ<hí)候系統會(huì)自(zì)動加載,無需手動≈≥←加載。

具體(tǐ)的(de)語言包文(wén)件(jiàn)命名和(hé♠♣)位置如(rú)下(xià):

語言包 語言文(wén)件(jiàn)位置
應用(yòng)語言包 應用(yòng)公共目錄/Lang/語言文(wén)件(jiàn↓≥↔).php
模塊語言包 模塊目錄/Lang/語言文(wén)件(jiàn).∞$∞php
控制(zhì)器(qì)語言包 模塊目錄/Lang/語言目錄/控制(zhì✔‍÷)器(qì)名(小(xiǎo)寫).php

以當前模塊為(wèi)Home、當前語言為(wèi)zh-cn為(w≤♥♥✘èi)例,我們可(kě)以讀(dú)取語言包的(de)‍×順序如(rú)下(xià)(如(rú)果沒有πδ ←(yǒu)定義則不(bù)讀(dú)取):

  1. ThinkPHP/Lang/zh-cn.php 框架底層語言包
  2. Application/Common/Lang/zh-cn.php 應用(yòng)公共語言包
  3. Application/Home/Lang/zh-cn.php Home模塊語言包
  4. Application/Home/Lang/zh-cn/user.php Home模塊的(de)User控制(zhì)器(qì)語言包

語言子(zǐ)目錄采用(yòng)浏覽器(qì)的(de)語γ‍Ω言命名(全部小(xiǎo)寫)定義,例如(rú)English (Unite✔δ≥d States) 可(kě)以使用(yòng)en-us作(z£€uò)為(wèi)目錄名。如(rú)果項目比較小(xiǎo),整個'∏ (gè)項目隻有(yǒu)一(yī)個(gè)語言包β≤☆↓文(wén)件(jiàn),那(nà)可(kě)以定義₽¥應用(yòng)的(de)公共語言文(wén)件(jiàn)即可(kě)£♣•,而無需按照(zhào)模塊分(fēn)開(kāi)定義。

語言文(wén)件(jiàn)定義

ThinkPHP語言文(wén)件(jiàn)定σ¥"♠義采用(yòng)返回數(shù)組方式:

  1. return array(
  2. 'lan_define'=>'歡迎使用(yòng)ThinkPHP',
  3. );

也(yě)可(kě)以在程序裡(lǐ)面動态設置語±♣λ♦言定義的(de)值,使用(yòng)下(xià)面的(de)方式:

  1. L('define2','語言定義');
  2. $value = L('define2');

通(tōng)常多(duō)語言的(de)使用(yòngε✘‌)是(shì)在控制(zhì)器(qì)≈λ<裡(lǐ)面,但(dàn)是(shì)模型類的(de☆‌≤)自(zì)動驗證功能(néng)裡(lǐ)面會≥ γ(huì)用(yòng)到(dào)提示信息,這(zhè)個(gè)部分(fē©$αn)也(yě)可(kě)以使用(yòng)多(duō)語言的(de)特性‌&✔。例如(rú)原來(lái)的(de)方式是(sh✔ε↑♠ì)把提示信息直接寫在模型裡(lǐ)面定義:

  1. array('title','require','标題必須!',1),

如(rú)果使用(yòng)了(le)多(duōλ✔σ)語言功能(néng)的(de)話(huà)(假設,我們在當前語言包裡(lǐ)δ&面定義了(le)' lang_var'=>' ×→标題必須!'),就(jiù)可(kě)以這(z★δ×hè)樣定義模型的(de)自(zì)動驗證

  1. array('title','require','{%lang_var}',1),

如(rú)果要(yào)在模闆中輸出語言變量不(bù)需要↓∞(yào)在控制(zhì)器(qì)中賦值,可 &÷✔(kě)以直接使用(yòng)模闆引擎特殊标簽來(lái)直接輸出語言定↑↕義的(de)值:

  1. {$Think.lang.lang_var}

可(kě)以輸出當前選擇的(de)語言包裡(lǐ)面定義的(de) lang_var語言定義。

變量傳入支持

3.2.2版本開(kāi)始,語言包定義的(de)時(s₽α↓hí)候支持傳入變量,例如(rú):

  1. 'FILE_FORMAT' => '文(wén)件(jiàn)格式: {$format★₽€},文(wén)件(jiàn)大(dà)小(xiǎ‌∏★™o):{$size}',

在模闆中輸出語言字符串的(de)時(shí)候傳入變量值即可(kβ♥​ě):

  1. {:L('FILE_FORMAT',array('format' => 'jpeg,png,gif,jpg','maximum' => '2MB'))}