自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用gettext實現(xiàn)PHP的國際化編程

開發(fā) 后端
通常人們寫程序時都是將文字寫死在程序里了,比如:echo "Hello World!"; ,假如要改成它國語言,寫國際化程序,就要逐個打開進行修改,程序較短時還行,若程序有上萬甚至更多,改起來就不是那么容易了。本文將講述如何使用gettext實現(xiàn)PHP的國際化編程。

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

實現(xiàn)流程:程序設(shè)計者在程序碼中寫入所要顯示的信息,在運行程序時并不會直接顯示程序設(shè)計師所寫的信息,而會先去找一個所設(shè)置語系的信息檔。如果未找到,才會去顯示程式碼中的信息。

一、安裝設(shè)置gettext套件:

1. *NIX系統(tǒng):

a.http://www.gnu.org/software/gettext/gettext.html 下載 gettext package,進行安裝。

b.編譯PHP的時候加上“--with-gettext[=DIR]”,其中DIR為gettext安裝的 目錄,缺省為:/usr/local。

c.保存,然后 restart server。

2.WIN32系統(tǒng):

a.需要將gnu_gettext.dll檔拷貝到系統(tǒng)目錄下面 (Ex: C:\WINNT\SYSTEM32 or C:\WINDOWS\SYSTEM32),PHP 4.2.3 之后文件名為 libintl-1.dll,可在 php4\dlls 下獲得。

b.打開php.ini檔,查找extension=php_gettext.dll,去掉前面的“;”。

c.保存,然后restart server。

若一切順利,就可以在 phpinfo() 中看到 gettext 字樣,至此已設(shè)置完畢。

二、php_gettext.dll套件里有好幾個函式,具體請看相關(guān)的manual。在這里我們只用記住3個函式就行了。

如下:

string bindtextdomain ( string domain, string directory)

string textdomain ( string text_domain)

string gettext ( string message)

三、寫作i18n程序:

<?php 
// 常規(guī)的程序 
echo "Hello World!"); 
?>

下面是 i18n 程序:hello.php

<?php 
// I18N 程序范例開始 
define('PACKAGE', 'hello'); // 定義要用的mo文件名稱,常規(guī)來說,我們都把PACKAGE的
名稱定義和程序名稱相同。 putenv('LANG=zh_TW'); setlocale(LC_ALL, 'zh_TW'); // 指定要用的語系,如:en_US、zh_CN、zh_TW bindtextdomain(PACKAGE, '/apache/htdocs/locale'); textdomain(PACKAGE); // The .mo file searched is: // /apache/htdocs/locale/en/LC_MESSAGES/hello.mo echo gettext("Hello World!"); ?>

在IE中輸入:http://localhost/hello.php,輸出結(jié)果為:“Hello World!”。

note:按照 GNU package 里面的習慣,可以使用 _(...) 來代替 gettext(...) ,這樣就可以少打很多 gettext 了。

四、接下來設(shè)置gettext po檔:

1.創(chuàng)建目錄結(jié)構(gòu),如下所示:

bindtextdomain's dir
      /language
        /LC_MESSAGES
          domain.po
          domain.mo

其中 bindtextdomain's dir 為 bindtextdomain() 所用的目錄,language 為要用的語系,domain 為 PACKAGE 名稱。

以上面為例:

/locale
 /zh_TW
  /LC_MESSAGES
   hello.po
   hello.mo

2.創(chuàng)建PO檔

xgettext -d [您定義的PACKAGE名稱] [程序文件名]

WIN32下面的xgettext、msgfmt程序檔可以從 ( http://www.sourceforge.net ) 下載,需要 libiconv.dll,、libintl.dll 的支持。

以上面hello.php檔為例:

$ xgettext -d hello hello.php

運行后將產(chǎn)生一個hello.po檔,內(nèi)容如下:

# SOME DESCRIPTIVE TITLE.
# Copyright ? YEAR Free Software Foundation, Inc.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2003-04-21 22:31+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: hello.php:14
msgid "Hello World!"
msgstr ""

里面列出 hello.php 檔里所有調(diào)用 gettext 函式的字符串,翻譯的時候只需將 msgid 值翻譯填入 msgstr 即可,如翻譯成中文。

# SOME DESCRIPTIVE TITLE.
# Copyright ? 2003 Ptker All Right Reserved.
# FIRST AUTHOR , 2003.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 0.1\n"
"POT-Creation-Date: 2003-04-21 22:31+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Ptker \n"
"Language-Team: zh_TW \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=BIG5\n"
"Content-Transfer-Encoding: 8bit\n"

#: hello.php:14
msgid "Hello World!"
msgstr "世界,您好!"

3.創(chuàng)建MO檔

msgfmt -o hello.mo hello.po

運行后將產(chǎn)生一個hello.mo二進制檔。

4.***將 hello.po、hello.mo 拷貝到相關(guān)語系的目錄下即可。

五、在IE中輸入:http://localhost/hello.php ,現(xiàn)在的結(jié)果就是:“世界,您好!”

【編輯推薦】

  1. 使用PHP調(diào)用MySQL的存儲過程
  2. PHP開發(fā)大型Web應(yīng)用淺析
  3. PHP編程的五個良好習慣
責任編輯:楊鵬飛 來源: 陳毅鑫blog
相關(guān)推薦

2009-03-04 10:53:39

gettextsmartyphp

2011-04-22 09:46:59

ASP.NET

2009-10-27 14:36:50

PHP 6Unicode編程

2011-07-20 14:53:28

iPhone NSLocalize 國際化

2011-08-11 13:26:30

iPhoneNSLocalized

2024-01-17 10:16:22

前端國際化消息鍵

2023-01-31 10:29:26

JavaScript國際化國際化庫

2010-01-04 13:09:51

Silverlight

2009-12-29 15:05:29

WPF支持國際化

2011-05-17 09:39:38

JavaSE

2011-08-18 15:24:40

iPhone國際化

2011-07-08 11:13:42

Cocoa Touch XCode

2011-08-29 09:48:30

springMVC

2024-04-03 13:27:28

Next.js擴展項目

2010-03-02 16:44:59

CentOS Mono

2010-07-28 14:52:29

Flex國際化

2024-05-17 08:25:06

數(shù)據(jù)驅(qū)動React語言包

2011-08-19 13:13:14

struts2Java

2009-06-25 16:04:30

2023-04-07 15:12:46

ReactReact-Intl
點贊
收藏

51CTO技術(shù)棧公眾號