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 相关文章推荐
使用 eAccelerator加速PHP代码的目的
Mar 16 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
Oct 29 PHP
php的GD库imagettftext函数解决中文乱码问题
Jan 24 PHP
PHP实现的统计数据功能详解
Dec 06 PHP
ZendFramework2连接数据库操作实例
Apr 18 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP hex2bin()函数用法讲解
Feb 25 PHP
详解php命令注入攻击
Apr 06 PHP
php连接sftp的作用以及实例代码
Sep 23 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
PHP开发API接口签名生成及验证操作示例
May 27 PHP
PHP7 其他修改
Mar 09 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
截获网站title标签之家内容的例子
2006/10/09 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
python实现自主查询实时天气
2018/06/22 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
python实现简单银行管理系统
2019/10/25 Python
python3+opencv生成不规则黑白mask实例
2020/02/19 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
爸爸的花儿落了教学反思
2014/02/20 职场文书
禁止酒驾标语
2014/06/25 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL