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 相关文章推荐
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
php array_map()数组函数使用说明
Jul 12 PHP
php将session放入memcached的设置方法
Feb 14 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 PHP
PHP中Enum(枚举)用法实例详解
Dec 07 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
PHP微信H5支付开发实例
Jul 25 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
PHP的PDO预定义常量讲解
Jan 24 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 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
一个ubbcode的函数,速度很快.
2006/10/09 PHP
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
简化php模板页面中分页代码的解析
2009/02/06 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
ThinkPHP模型详解
2015/07/27 PHP
PHP类型约束用法示例
2016/09/28 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
Python: 传递列表副本方式
2019/12/19 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
优秀教师获奖感言
2014/01/31 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
标枪加油稿
2015/07/22 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
js前端图片加载异常兜底方案
2022/06/21 Javascript
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS