程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP Smarty通過gettext加強國際化的總結

PHP Smarty通過gettext加強國際化的總結

編輯:關於PHP編程

一、采用gettext,由於Smarty有相應得gettext的插件,所以就直接用這個插件了

步驟如下:

1.1  在公共的包含文件中加入如下的代碼:

//$domain_info['lang']為cookie傳進來的語言設定值$language_code = $domain_info['lang'];//界面語言設置成中文if($language_code == 'zh_CN'){//設置目標語言putenv("LANG=$language_code");setlocale(LC_ALL, $language_code);//$package為mo文件的名字$package = 'i18n_zh';//綁定mo文件的路徑bindtextdomain($package, '/var/locale');//設置搜索的mo文件的文件名textdomain($package);
//指定mo文件的返回到gettext的編碼bind_textdomain_codeset($package, 'UTF-8');}elseif($language_code == 'BIG5'){//界面語言設置成繁體$language_code = 'zh_TW';putenv("LANG=$language_code");setlocale(LC_ALL, $language_code);$package = 'i18n_tw';bindtextdomain($package, '/var/locale');textdomain($package);bind_textdomain_codeset($package, 'UTF-8');}else{//界面語言是英文//設置目標語言putenv("LANG=$language_code");setlocale(LC_ALL, $language_code);//$package為mo文件的名字$package = 'i18n_en';//綁定mo文件的路徑bindtextdomain($package, '/var/locale');//設置搜索的mo文件的文件名textdomain($package);//指定mo文件的返回到gettext的編碼bind_textdomain_codeset($package, 'UTF-8');}//*********添加國際化語言的處理結束***************/

1.2 相應的模版中加入smarty插件要求的t標簽

1.3 用smarty插件提供的工具 生成c文件

這個c文件是把所有的模版中加了標簽的串提取出來了

php -q ./tsmarty2c.php  *.html  $package.c

注意:默認的c文件的名和1.1中定義的最好一樣

需要注意的是tsmarty2c.php中定義的 smarty的open tag 和close  tag 必須與smarty配置文件設置的一致

1.4 調用linux系統得xgettext把1.3中的c文件生成後綴為po的文件

xgettext -d $package    $package.c

注意:如果文件不是Asc編碼的 還得在上面地命令中指明

--file-code=文件編碼

1.5 編輯1.4中生成的$package.po ,加入相應的翻譯對應串

有幾種語言,就的分別編輯生成幾個po文件

1.6 調用linux系統得msgfmt把1.3中的1.5中的po文件生成後綴為mo的 二進制文件

msgfmt -o $package.mo $package.po

1.7 建立locale目錄,要與1.1 中的bindtextdomain($package, '/var/locale');設置一樣

以1.1中的為例,首先在/var/( 已有的)目錄下建立locale目錄,locale的結構為

|-- en_US
|   `-- LC_MESSAGES
|
|-- $package.mo
|
|-- zh_CN
|   `-- LC_MESSAGES
|
|-- $package.mo
|
`-- zh_TW
`-- LC_MESSAGES
|-- $package.mo

其中的第一層目錄是按1.1 中的$language_code的定義設的,必須這樣,否則找不到,第二層目錄LC_MESSAGES是固定的,裡面存放1.6 中生成的mo文件

二、由於是網站用的是Smaty,我們可以把模板中的文字都提取出來,集中放到語言文件中
通過smarty的config_load來加載,前提把語言文件放到$smarty->config_dir所設定的目錄中
只要在php中包含 ,如下的代碼,

$smarty->config_load( 'chs.lang' );

//$lang為通過cookie或session獲得的頁面語言值

switch ($lang) {

case 'zh-cn' :  

$smarty->config_load( 'chs.lang' );

break;    

case 'zh-tw' :  

header( 'cht.lang' ); 

break;  

default: 

header( 'cht.lang' ); 

break;  

}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved