gettext简介

由fanyamin翻译摘录自php.net及 ::URL:: http://www.onlamp.com/pub/a/php/2002/06/13/php.html
gettext函数实现了本地化语言支持的应用程序接口,可用于PHP应用程序的国际化,详细的说明文档请参见 ::URL:: http://www.gnu.org/software/gettext/manual/index.html

需求:
要使用这些函数,必需从 ::URL:: http://www.gnu.org/software/gettext/gettext.html  下载安装GNU gettext软件包

要在你的PHP安装中加入GNU gettext支持,必需增加--with-gettext[=DIR]选择,其中 DIR 是 gettext 的安装目录,默认为/usr/local. 
注意对于win32用户,必需拷贝gnu_gettext.dll到windows下的SYSTEM32目录,从PHP 4.2.3开始更名为libintl-1.dll,而且同时要安装iconv.dll

函数列表
bind_textdomain_codeset --  Specify the character encoding in which the messages from the DOMAIN message catalog will be returned 
bindtextdomain -- Sets the path for a domain
dcgettext -- Overrides the domain for a single lookup
dcngettext -- Plural version of dcgettext
dgettext -- Override the current domain
dngettext -- Plural version of dgettext
gettext -- Lookup a message in the current domain
ngettext -- Plural version of gettext
textdomain -- Sets the default domain

为简单起见,Gettext PHP extension允许通过使用gettext()函数在你的PHP代码中动态地翻译源字串为适宜的目的字串,
如果那个字串仍没有被翻译,则保留源字串。
例如
<?php
// I18N support information here
$language = 'en';
putenv("LANG=$language"); 
setlocale(LC_ALL, $language);

// Set the text domain as 'messages'
$domain = 'messages';
bindtextdomain($domain, "/www/htdocs/site.com/locale"); 
textdomain($domain);

echo gettext("A string to be translated would go here");
?>



安装Gettext文件
Gettext需要一个拥有全部翻译字串的locale目录,基本结构如下
/locale
    /en
        /LC_MESSAGES
            messages.po
            messages.mo
在locale目录中要为每一个你想要支持的语言创建一个子目录
<?php
// The language code goes here
$language = 'zh_CN';
putenv("LANG=$language"); 
setlocale(LC_ALL, $language);

// ....
?>
例如:
/locale
    /en
        /LC_MESSAGES
            messages.po
            messages.mo
    /zh_CN
        /LC_MESSAGES
            messages.po
            messages.mo
zh_CN目录创建以后,在PHP文件中用gettext函数标注需要翻译和文本,然后可以用命令
$xgettext -n *.php
来生成翻译字串文件messages.po,举例如下

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION/n"
"POT-Creation-Date: 2002-04-06 21:44-0500/n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE/n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>/n"
"Language-Team: LANGUAGE <LL@li.org>/n"
"MIME-Version: 1.0/n"
"Content-Type: text/plain; charset=CHARSET/n"
"Content-Transfer-Encoding: 8bit/n"

#: gettext_example.php:12
msgid "A string to be translated would go here"
msgstr ""

这个文件包括所有在gettext()调用的字串,可提供给翻译者翻译成不同的语言

然后,就可把这些pot文件*.po转换成Gettext函数真正能够了解的二进制文件*.mo
以下命令可以创建一个message.mo文件,且须放置在正确的目录下locale/<LANG_CODE>/LC_MESSAGES/
$ msgfmt messages.po

注意如果新增一包含新字串的新文件,如何维护一个包括所有字串翻译的不断更新的message.po文件
这时就可利用gettext的msgmerge 功能
$ ls
example.php
$ xgettext -n *.php
$ ls
example.php   messages.po
// ...
// Translates the messages.po file now
// ...
$ msgfmt messages.po
$ ls
example.php   messages.po   messages.mo
// ...
// Changes the example.php file
// ...
$ mv messages.po old.po
$ xgettext -n *.php
$ ls
example.php   messages.po   messages.mo   old.po
$ msgmerge old.po messages.po --output-file=new.po
$ ls
example.php   messages.po   messages.mo   new.po    old.po
// ...
// Translates the new.po file
// ...
$ msgfmt new.po
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值