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 静态化实现代码
Mar 20 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
深入Memcache的Session数据的多服务器共享详解
Jun 13 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 PHP
总结一些PHP中好用但又容易忽略的小知识
Jun 02 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
php连接sftp的作用以及实例代码
Sep 23 PHP
php利用ZipArchive类操作文件的实例
Jan 21 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 10 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 12 PHP
PHP正则表达式之RCEService回溯
Apr 11 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
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
jQuery对象[0]是什么含义?
2010/07/31 Javascript
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
Python中的文件和目录操作实现代码
2011/03/13 Python
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
自荐信封面
2013/12/04 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
小组口号大全
2014/06/09 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
安全生产年活动总结
2014/08/29 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
授权委托书样本
2014/09/25 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
新员工试用期自我评价
2015/03/10 职场文书
观后感格式
2015/06/19 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python