关于php程序国际化(i18n)的那些事

这事说起来也是老生常谈了,其实这事本来没什么意思,可是这回想用的时候才发现真不是这么回事,最主要的是我个人很习惯了WP的那种“_e”和“__”的本地化方式,可真的去试用gettext的时候,才发现那家伙真不是一般的麻烦,要为每一种语言都配置好目录和设置什么的,总之那是相当的麻烦……

可又确实想用,怎么办?唉,没办法,翻WP的原程吧,可是现在升来升去越来越繁复,于是想起初接触WP时的2.3.1版,网站上拿下,主要查“l10n”这个文件,在wp-includes文件夹里,于是从一个文件找到另一个文件,这样找齐了四个文件: l10n.php / streams.php / gettext.php / plugin.php ……,可我总不能做一个程序就带着这四个累赘吧,唉,还是自己合并吧。于是得到了一个文件,我延续了WP的文件命名,将合并后的文件命名为:l10n.php 。

该文件内包函了需要使用的各函数,在输出时保持WP的原始风格,“_e”为直接输出显示,“__”为返回输出。在本地化文件命名上,我倾向于插件式命名,即:“程序名-zh_CN”,这个PO和MO可以用POEDIT去搞了,能看这篇文章的,我想不会不知道怎么弄吧,呵呵。

将以上文件都保存在程序目录下的“languages”目录下(个人习惯),然后在调用里进行如下代码设置:

define ('WPLANG','zh_CN');
require_once( 'l10n.php' );
load_plugin_textdomain('your programe name', 'languages');

以上完全按照WP的系统来写的,如果你有其它想法,请自己更改啦,好了,进行好如上这些,在代码里就可以将需要国际化的词句以“_e”或“__”方式来输出了。如果对于“define ('WPLANG','zh_CN')”中的“WPLANG”这个常量进行了其它命名,请修改“l10n.php”文件中的相应处(在编辑器里搜一下就可以,或查找文件中“get_locale()”函数,就在这里)。

对于懒得自己更改的朋友,请直接点击下面的链接进行下载:

http://image.xfuxing.com/attachment/2010/08/l10n.rar

对于国际化有兴趣的朋友还可以访问下面的链接,这篇文章里利用了 l10n.php / streams.php / gettext.php 三个文件再加上一些代码,可以将MO读取出来成为PO,也很有意思。文章链接如下:

http://comox.textdrive.com/pipermail/wp-polyglots/2006-July/000989.html

明天周日,公休(我每周只休一天的),网上也休息,下周一见。

喜欢 0

这篇文章有2条评论

  1. Gavin 2010/9/15 #1 [REPLY]

    _e('Hello','hello');

    实验成功。。

  2. Gavin 2010/9/14 #2 [REPLY]

    楼主,测试了下,不知道怎么用,麻烦帮忙看看
    文件:index.php

    访问地址:http://127.0.0.1/test/index.php

    我的目录结构是:
    /test/index.php
    /test/l10n.php
    /test/languages/zh_CN.mo
    /test/languages/zh_CN.po

发表评论