Cakephp本地化與國際化詳解

黄舟
發布: 2023-03-03 16:14:02
原創
1159 人瀏覽過

看過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<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">
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
  

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
 > /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)! 


相關標籤:
來源:php.cn
上一篇:基於PHP實現用戶註冊登入功能 下一篇:cakephp 呼叫不同資料庫中的資料表
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
相關專題
更多>
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!