Board logo

標題: [SQL與PHP] 使用gettext 來實做PHP 多國語系支援(I18N)之方法 [打印本頁]

作者: gswdkimo    時間: 2011-6-30 21:47     標題: 使用gettext 來實做PHP 多國語系支援(I18N)之方法

使用gettext 來實做PHP 多國語系支援(I18N)之方法:

.前置作業:

AppServ php.ini 設定檔修改

記事本 開啟 C:\WINDOWS\php.ini

先檢查Apache是否開啟 gettext




;extension=php_gettext.dll


改成


extension=php_gettext.dll


重新啟動 Apache 即可.


()23請選一個裝,建議只裝Poedit就好


2.安裝gettext-0.14.4[手動產生.po檔用]


3.安裝Poedit[自動產生]


詳見:http://idaiwan.pixnet.net/blog/post/30993354


. php-gettext 提供了多個相關的訊息函式,但以 gettext()最為常用,


並有一個慣例的簡短別名,即 _()

<?php echo gettext("id代碼"); ?>


<?php echo _("id代碼"); ?>


至於語系的初始設定:

例如設定為英文可參考下述:

      putenv('LANG=en_US');

setlocale(LC_ALL, 'en_US');//指定要用的語系,如:en_US

      define('PACKAGE', 'lang'); //定義所讀取的語言檔(.mo)檔名
      bindtextdomain(PACKAGE, './locale');// 區域化內容放置路徑

bind_textdomain_codeset(PACKAGE, 'UTF-8'); //設置mo文件的編碼為UTF-8

textdomain(PACKAGE);// 使用 lang.mo的訊息

[注意]

·PACKAGE 那個變數, 不用 define 也無所謂, 主要是當成 Project name 來用, 到時後翻譯檔建好後,

  此名稱就不能再修改(修改翻譯檔需要全部重建(po, mo 檔重建))

·gettext() 包起來的就是會被抽取出來的字, 可以用較簡短的寫法 _() 即可.

·_() 不能包括變數($var), 如果 _($var) 有包到變數, 那這行就不會被 xgettext parse 出來.

·要判斷要用哪種語系, 判斷法目前想到的有下面幾種:

其他可參考http://blog.roodo.com/rocksaying/archives/15193601.html



()Office Word中尋找中文字技巧:

尋找目標: [!^1-^127]

並在點選〔更多〕後勾選「使用萬用字元

[ ]裡的「^1-^127」表示ASCII字碼的編號1127,其中編號4857代表數字「0~9」,

    6590代表大寫英文字母「AZ」,97122代表小寫英文字母「az

[attach]138[/attach]


-1.Poedit使用方法:

先選擇新增編目檔。

在專案資訊中填入相關的資料。

※請注意:複數形式填上 nplurals=2; plural=n==1?0:1;

[attach]139[/attach][attach]140[/attach][attach]141[/attach]

基礎路徑選擇您來源檔的位置(指的是 WordPress 整體檔案的位置)

※請注意:在下方,請繼續選擇新增項目,然後填上一個句點;這個句點是表示在基礎路徑資料夾下的所有檔案。

而關鍵字的話,選擇新增項目來增添5 個關鍵字:

_c

_e

__

__ngettext:1,2

__ngettext_noop:1,2

OK 之後,選擇檔案存放的位置。

按儲存之後,poEdit 就會依據您所設定的相關資料來剖析 php 檔中的字串。

剖析之後,就會自行計算字串。

OK 之後就可以開翻譯囉。完成之後您就有 po 檔與重要的 mo 檔。


()mo檔還原成po

安裝 Poedit 後,你可以在它的安裝目錄的  \bin 資料夾中找到一支
msgunfmt.exe 檔案。它專門用來將 mo 轉換成 po 格式。請進入命令提示字元中輸入

msgunfmt.exe source.mo-o target.po

其中 source.mo
是你的 mo 的檔案名稱,可以帶有路徑,如 C:\Temp\source.mo
其中 target.po
為要產生的 po 檔,也可以帶有路徑。



-2.安裝gettext-0.14.4[手動產生.po檔用]

產生.po檔與.mo

進入命令提示字元

將路徑切換到yd_group.php所在目錄。

cd C:\AppServ\www\test


1.產生.po檔語法:


xgettext-d lang_cn *.php--from-code=utf-8


xgettext-d lang_us *.php--from-code=utf-8


說明: *.php表找尋該目錄下所有.php



當然也可指定單一檔案,:target.php



lang_cn表命名的po檔名稱


此時便會產生一個可以供 Poedit 編輯的 po 檔案。


2.產生mo



方法一:直接用Poedit 編輯,翻譯完成後,


按下工具列的 [儲存編目檔] 按鈕

即可在與 po 檔相同的地方直接編譯出 mo 檔。



方法二:進入命令提示字元



將路徑切換到要產生.mo檔的所在目錄後輸入



msgfmt lang_cn.po-o lang_cn.mo



msgfmtsource.po -o target.mo
[注意]

·xgettext -d NAME, NAME 會等同於 bindtextdomain(), textdomain(), NAME.po,任何一個沒對應到, 翻譯結果就出不來.

可參考以下資料:

http://rscc.hostev.net/%E2%99%A1%E5%A5%BD%E6%96%87%E6%8E%A8%E6%8E%A8%E2%99%A1/php/php-gettext%E6%96%B9%E5%BC%8F%E5%AF%A6%E7%8F%BEutf-8%E5%9C%8B%E9%9A%9B%E5%8C%96%E5%A4%9A%E8%AA%9E%E8%A8%80i18n/






歡迎光臨 資訊家電班NO7 (http://imce07.freehostia.com/forums/) Powered by Discuz! 7.2