PHP Smarty通過(guò)gettext加強(qiáng)國(guó)際化的總結(jié)
一、采用gettext,由于Smarty有相應(yīng)得gettext的插件,所以就直接用這個(gè)插件了
步驟如下:
1.1 在公共的包含文件中加入如下的代碼:
//$domain_info['lang']為cookie傳進(jìn)來(lái)的語(yǔ)言設(shè)定值 $language_code = $domain_info['lang']; //界面語(yǔ)言設(shè)置成中文 if($language_code == 'zh_CN') { //設(shè)置目標(biāo)語(yǔ)言 putenv("LANG=$language_code"); setlocale(LC_ALL, $language_code); //$package為mo文件的名字 $package = 'i18n_zh'; //綁定mo文件的路徑 bindtextdomain($package, '/var/locale'); //設(shè)置搜索的mo文件的文件名 textdomain($package); //指定mo文件的返回到gettext的編碼 bind_textdomain_codeset($package, 'UTF-8'); } elseif($language_code == 'BIG5') { //界面語(yǔ)言設(shè)置成繁體 $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 { //界面語(yǔ)言是英文 //設(shè)置目標(biāo)語(yǔ)言 putenv("LANG=$language_code"); setlocale(LC_ALL, $language_code); //$package為mo文件的名字 $package = 'i18n_en'; //綁定mo文件的路徑 bindtextdomain($package, '/var/locale'); //設(shè)置搜索的mo文件的文件名 textdomain($package); //指定mo文件的返回到gettext的編碼 bind_textdomain_codeset($package, 'UTF-8'); } //*********添加國(guó)際化語(yǔ)言的處理結(jié)束***************/ |
1.2 相應(yīng)的模版中加入smarty插件要求的t標(biāo)簽
1.3 用smarty插件提供的工具 生成c文件
這個(gè)c文件是把所有的模版中加了標(biāo)簽的串提取出來(lái)了
php -q ./tsmarty2c.php *.html $package.c |
注意:默認(rèn)的c文件的名和1.1中定義的***一樣
需要注意的是tsmarty2c.php中定義的 smarty的open tag 和close tag 必須與smarty配置文件設(shè)置的一致
1.4 調(diào)用linux系統(tǒng)得xgettext把1.3中的c文件生成后綴為po的文件
xgettext -d $package $package.c |
注意:如果文件不是Asc編碼的 還得在上面地命令中指明
--file-code=文件編碼
1.5 編輯1.4中生成的$package.po ,加入相應(yīng)的翻譯對(duì)應(yīng)串
有幾種語(yǔ)言,就的分別編輯生成幾個(gè)po文件
1.6 調(diào)用linux系統(tǒng)得msgfmt把1.3中的1.5中的po文件生成后綴為mo的 二進(jìn)制文件
msgfmt -o $package.mo $package.po |
1.7 建立locale目錄,要與1.1 中的bindtextdomain($package, '/var/locale');設(shè)置一樣
以1.1中的為例,首先在/var/( 已有的)目錄下建立locale目錄,locale的結(jié)構(gòu)為
|-- en_US | | `-- zh_TW |
其中的***層目錄是按1.1 中的$language_code的定義設(shè)的,必須這樣,否則找不到,第二層目錄LC_MESSAGES是固定的,里面存放1.6 中生成的mo文件
二、由于是網(wǎng)站用的是Smaty,我們可以把模板中的文字都提取出來(lái),集中放到語(yǔ)言文件中
通過(guò)smarty的config_load來(lái)加載,前提把語(yǔ)言文件放到$smarty->config_dir所設(shè)定的目錄中
只要在php中包含 ,如下的代碼,
|
【編輯推薦】