php 中gettext是一種國際化(i18n)的解決方案,可以方便地實現(xiàn)多語言應用程序。gettext最初是linux的一個工具,用于將程序中的文本串提取出來,交由翻譯人員翻譯,最后再使用相應庫文件進行多語言支持。
在php中,使用gettext需要安裝GNU gettext擴展,可以使用命令sudo apt-get install gettext安裝。下面我們通過實例來演示如何使用php中gettext實現(xiàn)多語言支持。
//demo.php putenv("LANGUAGE=en_US");//設置語言環(huán)境 setlocale(LC_ALL, 'en_US.utf-8');//設置本地化信息 bindtextdomain("messages", "./locale");//設置翻譯文件所在目錄 textdomain("messages");//指定使用哪個翻譯文件 echo _("Hello World!");//使用gettext函數(shù)翻譯“Hello World!”
在上面的代碼中,我們使用了gettext函數(shù)對“Hello World!”進行翻譯,翻譯文件存放在./locale/en_US/LC_MESSAGES/messages.mo文件中(.po文件為翻譯文件源碼,.mo文件為機器碼格式的翻譯文件)。
接下來,我們創(chuàng)建一個翻譯文件,假設我們需要將“Hello World!”翻譯成中文,可以創(chuàng)建一個messages.po文件,文件內容如下:
msgid "Hello World!" msgstr "你好,世界!"
使用gettext編譯器,將messages.po文件編譯成二進制的messages.mo文件,可以使用命令msgfmt messages.po -o messages.mo進行編譯。
然后,我們將LANGUAGE和LC_ALL設置為中文,再次運行demo.php文件:
putenv("LANGUAGE=zh_CN"); setlocale(LC_ALL, 'zh_CN.utf-8');
輸出結果為“你好,世界!”,成功實現(xiàn)了多語言支持。
除了使用gettext函數(shù)對文本串進行翻譯之外,還可以使用gettext庫提供的其他函數(shù),如ngettext用于處理復數(shù)形式的翻譯,dngettext用于指定域名進行翻譯等。
//處理復數(shù)形式的翻譯 printf(ngettext("%d apple", "%d apples", 3), 3); //指定域名進行翻譯 bindtextdomain("news", "./locale");//指定news域名的翻譯文件 textdomain("news");//指定使用news域名的翻譯文件 echo dgettext("news","Hello World!");
以上是php中gettext的基本用法和相關函數(shù)介紹,可以根據實際業(yè)務需求靈活運用,實現(xiàn)多語言的支持。