看過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/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
對應中文語言default.po檔案的內容:
view plaincopy
msgid "purchase" ms
</pre<p><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">
(其中,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
//然后使用_()函数来实现本地化
_('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)!