一、基于windows
1.在php.ini中打开扩展php_gettext.dll,重启php. 2.下载关于gettext的工具, 链接:https://git.oschina.net/tanjiajun/php_gettext/raw/master/gettext-0.14.4-bin.zip GetText 所需相关的 Library 安裝
上述套件下载使用后, 会提示缺少 Library: libexpat.dll libiconv2.dll 直接下载 : gettext-dll.tgz, 链接:https://git.oschina.net/tanjiajun/php_gettext/raw/master/gettext-dll.tgz 把两个文件放到 C:\gettext\bin\目录即可.(具体目录因个人而异)
3.新建一个测试的php模板文件,保存为home.php,内容如下:
<?php
//home.php:
$str = 'home';
print <<<HTML
<a href="#">{$str}</a>
HTML;
?>
4.创建pot文件,pot是Portable Object Template的首字母缩写,与po对应的是mo,mo是Machine Object的首字母缩写。前者意指原始的字符串文件,一般用于给翻译人员去修改的,后者则是与机器相关的,一般是供程序读取。可以手工创建pot文件,也可以通过xgettext从代码中抽取字符串来产生。这里是用xgettext来产生的:
把home.php复制到工具gettext的bin目录下,我这边的是:D:\gettext\gettext-0.14.4-bin\bin这个目录。 dos窗口来到这个目录下,运行命令: xgettext -a home.php -o home.pot
这时,在根目录生成了一个home.pot模板文件,打开如下:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-29 14:49+0800\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"
#: home.php:3
msgid "home"
msgstr ""
接着,根据pot产生不同语言的po文件,这里我们先产生一个简体中文的po文件: msginit -l zh_CN.gb2312 -i home.pot
运行该命令后,我们发现,在当前目录下,产生了一个名zh_CN.po的文件,打开,把文件中的编码charset设置为UTF-8,翻译对应的字符串为中文,最后如下:
# Chinese translations for PACKAGE package.
# Copyright (C) 2016 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# tjj <EMAIL@ADDRESS>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-29 14:49+0800\n"
"PO-Revision-Date: 2016-12-29 14:50+0800\n"
"Last-Translator: tjj <EMAIL@ADDRESS>\n"
"Language-Team: Chinese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: home.php:3
msgid "home"
msgstr "首页"
根据po文件生成mo文件。
msgfmt zh_CN.po -o home.mo
运行该命令后,我们发现,在当前目录下,产生了一个名home.mo的文件。它是二进制的,不能用文本编辑器打开。
复制mo文件到特定目录中:
./locale/zh_CN/LC_MESSAGES/home.mo
最后修改,home.php:
<?php
$language='zh_CN';
putenv("LANG=$language");
setlocale(LC_ALL, 'zh_CN');
// Specify location of translation tables
bindtextdomain("home", "./locale");
// Choose domain
textdomain("home");
// Translation is looking for in ./locale/zh_CN/LC_MESSAGES/home.mo now
$str = gettext('home'); //也可以使用_('home')
print <<<HTML
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<a href="#">{$str}</a>
HTML;
?>
运行这个脚本, 看看, 是不是输出正确的中文了呢?
添加其它语言也很容易,不需要修改程序,只需要像对待中文一样,生成一个mo文件,并复制到系统中对应的目录即可。切换不同的语言仅仅是修改当前的locale就行了。
二、基于Linux
1.安装php gettext扩展
(1)、重新编译php,加上--with-gettext (2)、动态安装
现在说下第二个动态安装
1、下载同版本的php原包,解压后进入ext目录,目录下便是模块
2、进入gettext目录下执行:
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
(以上两个命令的路径根据自己系统情况而定)
make
make install
3、在php.ini里添加上gettext.so extension = "gettext.so" 重启php即可
2.安装完毕后,和windonws步骤一样,生成pot,.po和.mo的文件。