魏长东

weichangdong

poedit php gettext方式实现UTF-8国际化多语言(i18n)

开始应用:

步骤一:搭建环境(服务器已经完成,环境已经搭建好了) 
1、首先查看你的php扩展目录下是否有php_gettext.dll这个文件,如果没有,这就需要你下载一个或是从其他地方拷贝一个,然后放到php扩展目录。
2、打开php.ini,查找”;extension=php_gettext.dll“ ,然后去除注释,重启apache。

若一切顺利,就可以在 phpinfo() 中看到 gettext 字样,至此服务器环境配置完毕。

步骤二:假如我们要翻译test.php页面里的hello word!这句话。

编辑test.php,将要翻译 的文字用gettext函数包含,表示这些被包含的文字是需要用来翻译的。

<?php  
include_once ( 'inc/setLan.php' );   
$domain  =  'test' ;                     //域名,可以任意取个有意义的名字,不过要跟相应的.mo
文件的文件名相同(不包括扩展名)。
bindtextdomain ( $domain ,  "locale/" ); //设置某个域的mo文件路径    
bind_textdomain_codeset($domain ,  'UTF-8' );  //设置mo文件的编码为UTF-8    
textdomain($domain);                    //设置gettext()函数从哪个域去找mo文件    
//"C:\Program Files (x86)\GnuWin32\bin\xgettext.exe" -d test ../test.php --from-code=utf-8 
?>  
<html>  
<head>  
<meta http-equiv="Content-Type"  content= "text/html; charset=utf-8"  />  
<title>title</title>  
</head>  
<body bgcolor="#FFFFFF"  text= "#000000"  link= "#FF9966"  vlink= "#FF9966"  alink= "#FFCC99" >  
<?php echo  gettext( 'hello world.' ); ?>  
</body>  
</html> 

这里的setLan.php组件是用来接收语言参数的,当调用test.php?lan=zh_CN的时候,则显示中文翻译后的页面,调用 test.php?lan=zh_TW,则显示繁体翻译后的页面,当没有参数的情况,则默认根据http头信息里的语言进行显示,如果头信息里的语言我们 没有提供语言包,则默认显示gettext函数里包含的文字。 
setLan.php代码:

<?php  
$lan  =  $_REQUEST [ 'lan' ];  
if ( $lan  ==  'zh_CN' ){  
  putenv('LANG=zh_CN' );   
  setlocale(LC_ALL, 'zh_CN' );  //指定要用的语系,如:en_US、zh_CN、zh_TW   
}elseif  ( $lan  ==  'zh_TW' ){  
  putenv('LANG=zh_TW' );   
  setlocale(LC_ALL, 'zh_TW' );  //指定要用的语系,如:en_US、zh_CN、zh_TW   
}elseif  ( $lan  ==  'en_US' ) {  
  putenv('LANG=en_US' );   
  setlocale(LC_ALL, 'en_US' );  //指定要用的语系,如:en_US、zh_CN、zh_TW   
}  
?>  

步骤三:编辑好了test.php后,我们就应该对这个页面生成对应的语言包(test.po和test.mo文件)

要生成语言包,我们需要借助两款工具:

1、gettext工具下载地址:http://nchc.dl.sourceforge.net/sourceforge/gnuwin32/gettext-0.14.4.exe

(用来生成po文件,安装好了以后,需要把”安装路径/bin”添加到系统环境变量path里) 
2、Poedit工具下载地址:http://www.poedit.net/download.php (用来编辑po文件,编辑需要翻译的语言,

最后自动生成mo文件)

 

假设我们都安装好了这些软件,现在我们开始对test.php进行翻译工作。打开命令提示符cmd,切换到test.php所在的目录。

输入  "C:\Program Files (x86)\GnuWin32\bin\xgettext.exe" -d test ../test.php --from-code=utf-8   

  (当你要翻译的页面为index.php,只需要将蓝色部分改为index即可),然后执行,这时候你可以在test.php

所在目录看到新生成的文件test.po

用poedit工具打开test.po,然后针对这些语言翻译成我们对应的语言,保存后poedit会自动生产mo文件(unicode二进制码)。

将po文件和mo文件放入项目目录

\htdocs\gettext\locale\zh_CN\LC_MESSAGES(这一步很重要,我开始随便放在了当前目录下,结果折腾半天)

如果是繁体或者别的,放到响应的目录下就可以。

OK。一切都非常顺利,我们开始访问测试下多语言吧。访问test.php?lan=zh_CN则显示简体,访问test.php?lan=zh_TW显示繁体。有什么问题,留言共同讨论 :)

php 通过include方式实现国际化多语言(i18n) :

 

 

最后记得要  重启Apache,方可看到效果。 

poedit-123.png

copy from http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/08/09/2132603.html