php程序的国际化实现方法(利用gettext)


Posted in PHP onAugust 14, 2011

步骤一:搭建环境
1,首先查看你的php扩展目录下是否有php_gettext.dll这个文件,如果没有,这就需要你
下载一个或是从其他地方拷贝一个,然后放到php扩展目录。
2,打开php.ini,查找”;extension=php_gettext.dll“ ,然后去除注释,重启apache。
步骤二:原理讲解
假如你的没有国际化的程序里有这样的代码,echo "你好";,而国际化的程序你要写成
echo gettext("你好");,然后再在配置文件里添加“你好”相对应的英文“Hi”。
这时,中国地区浏览都会在屏幕上输出“你好”,而美国地区浏览都会在屏幕上输出
“Hi”。也就是说,最终显示什么是根据你的配置文件而定的,如果找不到配置文件,
才会输出程序里面的内容。
步骤三:编码测试
1,我们在d:\www下面新建文件hi.php,详细代码如下

<?php 
$domain = 'test'; 
bindtextdomain($domain, "locale/");//设置某个域的mo文件路径 
textdomain($domain);//设置gettext()函数从哪个域去找mo文件 
echo gettext("Hi!");//_()是gettext()函数的简写形式 
?>

这时你运行改程序,只会输出“Hi”。但我们是中国人,我们不认识“Hi”,
我们只认识“你好”,这时就要配置文件出马。配置文件的生成一般借助一款工具。
下载地址:http://nchc.dl.sourceforge.net/sourceforge/gnuwin32/gettext-0.14.4.exe
安装好以后,为了在任意目录里使用,需要把“安装路径/bin”添加到系统环境变量里。
步骤四:配置文件的生成
1,我们假设你的工具已经安装好,并且可以在任意目录使用。现在就要运行cmd,并把
路径切换到d:\www下面,也就是hi.php所在目录。
键入xgettext -d hi hi.php --from-code=gb2312,然后执行,这时你可以看到新生成一个
hi.po文件,注意:--from-code=gb2312,其中gb2312还可以是utf-8。
2,打开hi.po文件,显示如下:
# 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: 2009-01-19 17:47+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" 
#: hi.php:6 
msgid "Hi!" 
msgstr ""

现在有两个地方需要修改,
1:"Content-Type: text/plain; charset=CHARSET\n"
2:msgstr ""
把1中的CHARSET修改成gb2312,然后把2修改成msgstr "你好"。
3,键入msgfmt -o hi.mo hi.po,执行,这时生成hi.mo文件。
然后在d:\www下新建locale\zh_Cn\LC_MESSAGES目录,把hi.mo拷到这里就行了。
4,现在重启apache,再次运行,屏幕上可以输出“你好”。
其他:
如果使用utft-8编码的话,需要使用
bind_textdomain_codeset($domain,'UTF-8');
相应的要把hi.po里的CHARSET改成utf-8,还需要把hi.po保存成utf-8格式,
再次生成hi.mo就行了。
总结:
我们都希望我们写的程序可以被大众甚至国际普遍使用,像大名鼎鼎的wordpress的
国际化使用的也是他。gettext还是非常不错的,简单易用,
PHP 相关文章推荐
PHP安装攻略:常见问题解答(一)
Oct 09 PHP
PHP 错误之引号中使用变量
May 04 PHP
两个强悍的php 图像处理类1
Jun 15 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
Jun 20 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
Jan 19 PHP
thinkphp实现附件上传功能
May 26 PHP
Yii输入正确验证码却验证失败的解决方法
Jun 06 PHP
php 实现银联商务H5支付的示例代码
Oct 12 PHP
php的instanceof和判断闭包Closure操作示例
Jan 26 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 PHP
PHP排序之二维数组的按照字母排序实现代码
Aug 13 #PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
Aug 12 #PHP
PHP简洁函数小结
Aug 12 #PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
Aug 12 #PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 #PHP
php 文章调用类代码
Aug 11 #PHP
初学PHP的朋友 经常问的一些问题。不断更新
Aug 11 #PHP
You might like
加速XP搜索功能堪比vista
2007/03/22 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
js实现的复制兼容chrome和IE
2014/04/03 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
python处理excel绘制雷达图
2019/10/18 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
美国购物网站:Clickhere2shop
2021/01/28 全球购物
施工人员岗位职责
2013/12/12 职场文书
十佳大学生事迹材料
2014/01/29 职场文书
经济担保书范文
2014/04/02 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
会议欢迎词
2015/01/23 职场文书
应届毕业生自荐信
2015/03/04 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android