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初学者们头痛的十四个问题
Jan 15 PHP
php对csv文件的读取,写入,输出下载操作详解
Aug 10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
Jun 23 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 PHP
php单文件版在线代码编辑器
Mar 12 PHP
php下载文件,添加响应头的简单实例
Sep 22 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
PHP中上传文件打印错误错误类型分析
Apr 14 PHP
关于php开启错误提示的总结
Sep 24 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 10 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
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
js下获取div中的数据的原理分析
2010/04/07 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
Python之eval()函数危险性浅析
2014/07/03 Python
Python正则表达式教程之一:基础篇
2017/03/02 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
Python使用add_subplot与subplot画子图操作示例
2018/06/01 Python
django的ORM操作 增加和查询
2019/07/26 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Python如何访问字符串中的值
2020/02/09 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
重构Python代码的六个实例
2020/11/25 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
Wiggle新西兰:自行车、跑步、游泳
2020/05/06 全球购物
季度思想汇报
2014/01/01 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
高中军训感言600字
2014/03/11 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
模范教师事迹材料
2014/12/16 职场文书
人代会简报
2015/07/21 职场文书
护士旷工检讨书
2015/08/15 职场文书