看過CakePHP的程式例子的程式員都會發現,在Controller或者View中,大多數輸出都是用一個函數 __(”xxxx”) 來執的,
這個函數就相當與其他架構中的getText()函數,是根據key值和locale來動態擷取相應的語言內容。
1)什 麼是 i18n,l10n
首 先要先明白Localization & Internationalization兩個單詞,分別叫本地化和國際化. Localization 表示將 Web 應用程式轉化以適應某種語言(或文化)的需求,而 Internationalization 表示 Web 應用程式可以被本地化的能力。Internationalization 和 localization 常被縮寫為 i18n 和 l10n; 數字 18 和 10 是該單詞的第一個字母到最後一個字母之間的字母數量
2)實現本地化語言檔案
任何需要本地化內容的 Controller 都需要首先引用 CakePHP 的 L10n 類。可以在AppController裡進行匯入,這樣就能用於所有的Controller啦
view plaincopy
//引用 L10n 類:
App::import('Core', 'l10n');
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)
含有本地化內容的檔案夾放在 CakePHP 安裝目錄 /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 "Please purchase a ball by selecting its name ."
view plaincopy
msgid "search" msgstr "Click here to search our product database."
對應中文語言default.po檔案的內容:
view plaincopy
msgid "purchase" msgstr "請通過選擇名字來購買一個球。"
msgid "search" msgstr "點擊搜尋我們的產品列表。"
view plaincopy
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></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中根據使用者的語言環境來設定相應的語言):
view plaincopy
$this->Session->write ("Config.language","chi");
3、使用以下代碼來進行設定
view plaincopy
App::import('Core', 'L10n');
$l10n = & new L10n();
$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本地化和國際化詳解 的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!