close

多國語系的實作方式很多,因為我本身是用Codeigniter的Framework

其中他的多國語系在官網上就有詳解 http://www.codeigniter.org.tw/user_guide/libraries/language.html

這邊記錄的是多國語系的傳統作法之一,我的系統是用Freebsd+PHP5

PHP範例如下:

|

// default lang & type
$lang = 'tw';
putenv('LANG=zh_TW');
setlocale(LC_ALL, 'zh_TW');

$lang = isset($_GET['lang']) ? $_GET['lang'] : 'tw';

switch ($lang) {
  case 'tw':
    putenv('LANG=zh_TW'); 
    setlocale(LC_ALL, 'zh_TW');
    break;
  case 'cn':  
    putenv('LANG=zh_CN');
    setlocale(LC_ALL, 'zh_CN'); 
}

define('PACKAGE', 'test');

// gettext setting
bindtextdomain(PACKAGE, 'locale'); 
textdomain(PACKAGE);

其中要翻譯的文字可以使用:gettext()或者簡短的 _()包起來就可以了

再來是輸入以下指令產生pot檔,複製成po檔可供編輯,編輯(此範例使用vi)完的po檔就可以產生真正在使用的mo檔了。

$ xgettext --language=php --from-code=utf-8 --output=hello.pot test.php
$ cp test.pot test-en_US.po
$ vi test-en_US.po
$ cp hello.pot test-zh_TW.po
$ vi test-zh_TW.po
$ msgfmt --output=locale/en/LC_MESSAGES/hello.mo test-en_US.po
$ msgfmt --output=locale/zh_TW/LC_MESSAGES/hello.mo test-zh_TW.po

最後只要加上連結:test.php?lang=tw、test.php?lang=cn等等就可以做切換語系了。

另外,PO檔在GUI環境底下還可以使用編輯器 POEDIT:

http://www.poedit.net/

其授權是MIT

arrow
arrow
    全站熱搜

    Matt 發表在 痞客邦 留言(1) 人氣()