php 國際化

巴扎黑
發布: 2016-11-24 09:58:55
原創
1902 人瀏覽過

PHP的gettext用法  

gettext程式在Linux/Unix世界中很常見,但一般人日常使用的機會不多。它用來為應用程式添加國際化支援。舉個例子,如果一個程式中的字串資源沒有硬編碼在程式原始檔中,而是以一種語言包的檔案存在的,那麼就可以透過添加語言包檔案來改變程式介面的語言。 gettext就可以做這種事。 

Windows下的PHP5中已經帶有了gettext擴展,Zend Server也以具有該擴展。在php.ini檔案中將「extension=php_gettext.dll」前面的分號去掉,重啟Apache,如果一切正常的話,在phpinfo()的輸出中應該會有gettext一節。下面有一個簡單的「Hello World」的範例來看看如何用gettext來達到支援多語言的目的。

建立一個PHP檔test.php,內容如下: 
putenv(“LANG=zh_CN”); 
setlocale(LC_ALL, 'zh_CN'); 
); 
textdomain('test'); 

echo gettext('Hello World!'); 
?> 

開頭兩行程式碼設定語言環境為'zh_CN',也就是簡體中文。 bindtextdomain設定域test的目錄為目前目錄下的locale目錄。 textdomain(’text’)告訴PHP解釋器,gettext函數要去test域中去找替代字串。 

在瀏覽器中開啟這個文件,可以看到結果為“Hello World”,只是原樣輸出而已,因為還沒有製作中文語言包。要讓瀏覽器輸出中文而不改變原始程序,需要準備兩個文件,PO和MO文件。為了得到這兩個文件,需要使用xgettext和msgfmt兩個程式。 Windows使用者可以去GnuWin32下載GetText軟體包,裡面就有這兩個程式。 

接著建立對應的目錄結構。在test.php的目錄下建立「localezh_CNLC_MESSAGES」這樣的目錄。目錄名zh_CN一定要跟程式碼中的語言名稱zh_CN相同。然後在命令提示字元下執行: 
xgettext -d test test.php 
“-d test”表示domain為“test”,這會在目前目錄下產生test.po這個檔案。用文字編輯器開啟它,做以下修改: 

… 
「Content-Type: text/plain; charset=GB2312n」 
「Content-Transfer-Encoding: 8bitn」 

「Content-Transfer-Encoding: 8bitn」 

#: test.1ms Hello World!” 
msgstr “你好,世界!”  

即將charset設定為中文編碼“GB2312”,將對應的msgid中的英文字串翻譯成中文填入到下面的msgstr中。接下來用msgfmt產生MO檔案。 MO是一個二進位格式的文件,gettext從它裡面提取字串資源。在指令提示字元中執行下列指令可以從剛剛修改的PO檔案得到MO檔案: 
msgfmt -o test.mo test.po 

最後將test.po和test.mo放在localezh_CNLC_MESSAGES目錄下,刷新瀏覽器,即可看到顯示的是中文。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!