• 利用 gettext 来实现 PHP 的国际化编程 - [图空人留:杂项]

    发表时间:2007-12-24

      通常人们写程序时都是将文字写死在程序里的,比如:echo "Hello World!"; ,假如要改成它国语言,写国际化程序,就要逐个打开进行修改,程序较短时还行,若程序有上万甚至更多,改起来就不是那么容易了。近来随着i18n的逐渐标准化,我也来讲一讲在PHP中如何实现国际化支持。跟其他程序语言一样,在 PHP 也可以利用 gettext 套件写作 i18n 程序,实现 NLS(Native Language Support) 国际化支持,具体请参考官方文档( http://www.gnu.org/manual/gettext/index.html )。

      实现流程:程序设计者在程序码中写入所要显示的信息,在运行程序时并不会直接显示程序设计师所写的信息,而会先去找一个所设置语系的信息档。如果未找到,才会去显示程式码中的信息。

      一、安装设置gettext套件:

      1) *NIX系统:

      1、从 http://www.gnu.org/software/gettext/gettext.html 下载 gettext package,进行安装

      2、编译PHP的时候加上“--with-gettext[=DIR]”,其中DIR为gettext安装的

      目录,缺省为:/usr/local

      3、保存,然后 restart server。

      2) WIN32系统:

      1、需要将gnu_gettext.dll档拷贝到系统目录下面 (Ex: C:\WINNT\SYSTEM32 or C:\WINDOWS\SYSTEM32),PHP 4.2.3 之后文件名为 libintl-1.dll,可在 php4\dlls 下获得。

      2、打开php.ini档,查找extension=php_gettext.dll,去掉前面的“;”

      3、保存,然后restart server。

      若一切顺利,就可以在 phpinfo() 中看到 gettext 字样,至此已设置完毕。

      二、php_gettext.dll套件里有好几个函式,具体请看相关的manual。在这里我们只用记住3个函式就行了,如下:

    1. string bindtextdomain ( string domain, string directory)
    2. string textdomain ( string text_domain)
    3. string gettext ( string message)

      三、写作i18n程序:

    1. <?php
    2. // 常规的程序
    3. echo "Hello World!");
    4. ?>

      下面是 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!");
    ?>

  • img2html-图片也能html代码化 - [图空人留:杂项]

    发表时间:2007-06-25
    关键词:编程
    牛人一个