成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用gettext實現PHP的國際化編程

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

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

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

一、安裝設置gettext套件:

1. *NIX系統:

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系統:

a.需要將gnu_gettext.dll檔拷貝到系統目錄下面 (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 字樣,至此已設置完畢。

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

如下:

string bindtextdomain ( string domain, string directory)

string textdomain ( string text_domain)

string gettext ( string message)

三、寫作i18n程序:

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

下面是 i18n 程序:hello.php

<?php 
// I18N 程序范例開始 
define('PACKAGE', 'hello'); // 定義要用的mo文件名稱,常規來說,我們都把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,輸出結果為:“Hello World!”。

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

四、接下來設置gettext po檔:

1.創建目錄結構,如下所示:

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.創建PO檔

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

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

以上面hello.php檔為例:

$ xgettext -d hello hello.php

運行后將產生一個hello.po檔,內容如下:

# 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 檔里所有調用 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.創建MO檔

msgfmt -o hello.mo hello.po

運行后將產生一個hello.mo二進制檔。

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

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

【編輯推薦】

  1. 使用PHP調用MySQL的存儲過程
  2. PHP開發大型Web應用淺析
  3. PHP編程的五個良好習慣
責任編輯:楊鵬飛 來源: 陳毅鑫blog
相關推薦

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-08-29 09:48:30

springMVC

2011-07-08 11:13:42

Cocoa Touch XCode

2010-03-02 16:44:59

CentOS Mono

2010-07-28 14:52:29

Flex國際化

2024-05-17 08:25:06

數據驅動React語言包

2024-04-03 13:27:28

Next.js擴展項目

2009-06-25 16:04:30

2011-08-19 13:13:14

struts2Java

2023-04-07 15:12:46

ReactReact-Intl
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜电影网址 | 天堂久久一区 | 亚洲欧美日韩在线一区二区 | 久久久国产一区二区三区 | 久久免费小视频 | 国产欧美日韩一区 | 日干夜干| 亚洲日韩第一页 | 麻豆一区一区三区四区 | 久久精品欧美一区二区三区不卡 | 午夜免费看| 91久久久久 | 97久久精品午夜一区二区 | 午夜免费视频观看 | 欧美亚洲一级 | 精品国产一区二区三区性色 | 日韩午夜精品 | а天堂中文最新一区二区三区 | 欧美一区久久 | 欧美成人免费在线视频 | 日韩福利 | 在线视频 亚洲 | 国产精品成人一区二区三区 | 91在线看片| 欧美日韩国产在线观看 | 国产成人福利视频在线观看 | 亚洲美女视频 | 久久精品二区亚洲w码 | 一级片在线观看视频 | 久久影音先锋 | 成人亚洲精品 | 国产精品亚洲一区 | 99成人在线视频 | 欧美啪啪网站 | 欧美成年人网站 | 日韩精品视频中文字幕 | 欧美久久一级特黄毛片 | 久久成人久久 | 亚洲精品一区二区三区四区高清 | 中文字幕一区二区三区在线乱码 | 亚洲综合在线播放 |