开始应用:
步骤一:搭建环境(服务器已经完成,环境已经搭建好了)
1、首先查看你的php扩展目录下是否有php_gettext.dll这个文件,如果没有,这就需要你下载一个或是从其他地方拷贝一个,然后放到php扩展目录。
2、打开php.ini,查找”;extension=php_gettext.dll“ ,然后去除注释,重启nginx。
若一切顺利,就可以在 phpinfo() 中看到 gettext 字样,至此服务器环境配置完毕。
步骤二:假如我们要翻译test.php页面里的hello word.这句话。
编辑test.php,将要翻译 的文字用gettext函数包含,表示这些被包含的文字是需要用来翻译的。
<?php $lan = isset($_REQUEST [ 'lan' ])?$_REQUEST [ 'lan' ]:'zh_CN'; 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 } $domain = 'test' ; //域名,可以任意取个有意义的名字,不过要跟相应的.mo文件的文件名相同(不包括扩展名)。 bindtextdomain ( $domain , "locale/" ); //设置某个域的mo文件路径 bind_textdomain_codeset($domain , 'UTF-8' ); //设置mo文件的编码为UTF-8 textdomain($domain ); //设置gettext()函数从哪个域去找mo文件 ?> <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" > <?= gettext ( 'hello world.' ) ?> <br> <?= gettext ( 'hello world2.' ) ?> </body> </html>
步骤三:编辑好了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所在的目录。
输入 xgettext -d test test.php --from-code=utf-8 (当你要翻译的页面为index.php,只需要将蓝色部分改为index即可),然后执行,这时候你可以在test.php所在目录看到新生成的文件test.po
用poedit工具打开test.po,然后针对这些语言翻译成我们对应的语言,保存后poedit会自动生产mo文件(unicode二进制码)。
将po文件和mo文件放入项目目录
如我们放入的是简体中文,则放入:
/locale/zh_CN/LC_MESSAGES/test.po
/locale/zh_CN/LC_MESSAGES/test.mo
如我们放入的是繁体中文,则放入:
/locale/zh_TW/LC_MESSAGES/test.po
/locale/zh_TW/LC_MESSAGES/test.mo
OK。一切都非常顺利,我们开始访问测试下多语言吧。
访问test.php?lan=zh_CN则显示简体,
访问test.php?lan=en_US则显示英文,
访问test.php?lan=zh_TW显示繁体(该功能本文没有实现)。
最后记得要 重启nginx,方可看到效果。
++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++
如何将多个文件的语言翻译放到同一个.mo文件中???
生成.po文件命令如下: (注意,此时多加了一个命令参数 -j ,表明是以追加的形式添加语言包的。)
xgettext -d test test.php -j --from-code=utf-8