首頁  >  文章  >  後端開發  >  Cakephp本地化與國際化詳解

Cakephp本地化與國際化詳解

黄舟
黄舟原創
2016-12-20 09:22:471160瀏覽

看過CakePHP的程式範例的程式設計師都會發現,在Controller或View中,大多數輸出都是用一個函數__(”xxxx」) 來執的,

這個函數就相當與其他框架中的getText ()函數,是根據key值和locale來動態取得對應的語言內容。


 1)什麼是i18n,l10n
           首先要先明白Localization & Internationalization兩個單字,分別叫本地化與國際化. Localization 表示將Web 應用轉換以適應某種語言(或文化)的需求分別叫本地化與國際化. Localization 表示將Web 應用轉換以適應某種語言(International)的需求,而International表示Web 應用可以被在地化的能力。 Internationalization 和localization 經常被縮寫為i18n 和l10n; 數字18 和10 是該單字的第一個字母到最後一個字母之間的字母數量

2)實現本地化語言檔案

         Controller 都需要先引用CakePHP 的L10n 類別。可以在AppController裡導入,這樣就能用於所有的Controller啦

view plaincopy

//引用 L10n 類:    

 App::import('Core', 'l10n');

class  ProductController extends AppController 

class  ProductController extends AppController {  接著,你需要創建相應的語言檔案(檔案名稱為default.po )來管理在地化內容。該文件包含一系列 string 和其 ID,易於組織管理和翻譯內容,並保存在對應的語言資料夾下。例如:

view plaincopy

/app/locale/eng/LC_MESSAGES/default.po (English)   

/app/locale/fre/LC_MESSAGES/default.po (French)

/app/locale/chi/LC_MESSAGES/default.po (Chinese)安裝目錄/app/locale 下。每種語言對應不同的 3 個字母代碼,符合 ISO 639-2 標準。 (更多信息,請參考Library of Congress Website,http://www.loc.gov/standards/iso639-2/php/code_list.php)

一旦你創建了該文件,就可以編輯本地化的內容了。注意每個字串的鍵值必須唯一,且包含對應值。以下是簡單是例子,

英語語言default.po 文件的內容:

view plaincopy

msgid    "purchase"   msgstr    gid     "search"      msgstr     "Click here to search our product database."   


對應中文語言default.po檔案的內容:

view plaincopy

msgid    "purchase"    ms   

  

  

  

 
  

  

  

  


  

 > /pre>  

(其中,msgid用來識別字串,在不同的語言檔案中應該保持一致,而msgstr則為對應語言的內容)

.po 檔案應用UTF-8 編碼,每個msmstr 值須限定在1014 個字元之內。如果你使用 Macintosh 電腦,編輯檔案時請確保使用 Unix 換行符 (LF),否則檔案將不會被正確地解析。你可輕鬆地使用 Poedit 來編輯 .po 文件,一個免費的編輯器。

3)設定應用的本機locale(此步驟可省略,cakephp會依照使用者的瀏覽器設定來使用對應的語言進行顯示)

     1、 在config/core.php中使用configure::write:

 view plaincopy

Configure::write('Config.language' , "chi");  

其中chi代表中文,英文應為eng。

     2、在php檔案程式開始前寫入(例如在beforeFilter中根據使用者的語言環境設定對應的語言):

msgid     "search"      msgstr     "点击搜索我们的产品列表。"

$this->Session->write ("Config.language","chi ");  

    3、設定以下程式碼

 view plaincopy

App::import('Core', 'L10n'); ->get ('chi');  //設定locale為中文  

  

//然后使用_()函数来实现本地化  

_('msgid');  

4)实现本地化

    在需要实现本地化的地方,调用_()函数

1、直接输出字符串,没有返回值:

view plaincopy

__("msgid"); 或者  _("msgid", false);  

 

2、间接输出字符串,有返回值:

view plaincopy

__("msgid",true);  

 

3、还有input要加个label来使他出现中文。

view plaincopy

echo $form->input('name',array('label'=>__('msgid',true)));  


 5)没有覆盖的内容

    日期、货币格式的国际化可以直接用php中的setlocale函数来实现。

 以上就是Cakephp本地化和国际化详解 的内容,更多相关内容请关注PHP中文网(www.php.cn)! 


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn