1. 程式人生 > >php gettext方式實現UTF-8國際化多語言(i18n)

php gettext方式實現UTF-8國際化多語言(i18n)

近來隨著i18n(國際化)的逐漸標準化,我也來講一講在PHP中如何實現國際化支援。跟其他程式語言一樣,在 PHP 也可以利用 gettext 套件寫作 i18n 程式,實現 NLS(Native Language Support) 國際化支援,具體請參考官方文件(http://www.gnu.org/software/gettext/manual/gettext.html)

這裡我們主要介紹window平臺下使用php的擴充套件gettext實現程式的國際化。

gettext簡介:
GNU gettext是翻譯專案的重要一步,它提供了一個工作框架,由一些整合的工具和文件組成,幫助程式設計師、翻譯人員和終端使用者實現程式的國際化和本地化。用Gettext的方式實現多語言得到了廣泛的支援,著名的BLOG程式wordpress的國際化就是用的GNU gettext。

大致原理:
GNU gettext使用PO或MO檔案來實現國際化和本地化。PO的意思是Portable Object,是一種文字結構,可以方便的由人們閱讀和修改。MO是Machine Object的簡寫,MO檔案是PO檔案的二進位制形態。一般來說,一個PO或MO檔案對應於一種語言,如果一個程式要支援多種語言,每一種語言都需要自己的PO或MO檔案。

開始應用:

步驟一:搭建環境(伺服器已經完成,環境已經搭建好了)
1。首先檢視你的php擴充套件目錄下是否有php_gettext.dll這個檔案,如果沒有,這就需要你下載一個或是從其他地方拷貝一個,然後放到php擴充套件目錄。
2。開啟php.ini,查詢”;extension=php_gettext.dll“ ,然後去除註釋,重啟apache。

若一切順利,就可以在 phpinfo() 中看到 gettext 字樣,至此伺服器環境配置完畢。

步驟二:假如我們要翻譯test.php頁面裡的hello word!這句話。

編輯test.php,將要翻譯 的文字用gettext函式包含,表示這些被包含的文字是需要用來翻譯的。

這裡的setLan.php元件是用來接收語言引數的,當呼叫test.php?lan=zh_CN的時候,則顯示中文翻譯後的頁面,呼叫test.php?lan=zh_TW,則顯示繁體翻譯後的頁面,當沒有引數的情況,則預設根據http頭資訊裡的語言進行顯示,如果頭資訊裡的語言我們沒有提供語言包,則預設顯示gettext函式裡包含的文字。
setLan.php程式碼:

步驟三:編輯好了test.php後,我們就應該對這個頁面生成對應的語言包(test.po和test.mo檔案)

假設我們都安裝好了這些軟體,現在我們開始對test.php進行翻譯工作。開啟命令提示符cmd,切換到test.php所在的目錄。

輸入xgettext -d test test.php --from-code=utf-8(當你要翻譯的頁面為index.php,只需要將藍色部分改為index即可),然後執行,這時候你可以在test.php所在目錄看到新生成的檔案test.po

用poedit工具開啟test.po,然後針對這些語言翻譯成我們對應的語言,儲存後poedit會自動生產mo檔案(unicode二進位制碼)。

將po檔案和mo檔案放入專案根目錄
/locale
/language
/LC_MESSAGES
test.po
test.mo
如我們放入的是簡體中文則放入:
/locale
/zh_CN
/LC_MESSAGES
test.po
test.mo

如我們放入的是繁體中文則放入:
/locale
/zh_TW

/LC_MESSAGES
test.po
test.mo

OK。一切都非常順利,我們開始訪問測試下多語言吧。訪問test.php?lan=zh_CN則顯示簡體,訪問test.php?lan=zh_TW顯示繁體。有什麼問題,留言共同討論 :)

php 通過include方式實現國際化多語言(i18n) :