1、基于windowsphp
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 安裝html
上述套件下载使用后, 会提示缺乏 Library: libexpat.dll libiconv2.dll 直接下载 : gettext-dll.tgz, 连接:https://git.oschina.net/tanjiajun/php_gettext/raw/master/gettext-dll.tgz 把两个文件放到 C:\gettext\bin\目录便可.(具体目录因我的而异)git
3.新建一个测试的php模板文件,保存为home.php,内容以下:windows
<?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来产生的:dom
把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,翻译对应的字符串为中文,最后以下:ui
# 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就好了。
2、基于Linux
1.安装php gettext扩展
(1)、从新编译php,加上--with-gettext (2)、动态安装
如今说下第二个动态安装
一、下载同版本的php原包,解压后进入ext目录,目录下即是模块
二、进入gettext目录下执行:
/usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config
(以上两个命令的路径根据本身系统状况而定)
make make install
三、在php.ini里添加上gettext.so extension = "gettext.so" 重启php便可
2.安装完毕后,和windonws步骤同样,生成pot,.po和.mo的文件。