本篇文章给大家分享的是有关PHP Smarty如何通过gettext加强国际化的总结,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
为市中等地区用户提供了全套网页设计制作服务,及市中网站建设行业解决方案。主营业务为成都网站制作、成都网站建设、市中网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
一、采用gettext,由于Smarty有相应得gettext的插件,所以就直接用这个插件了
步骤如下:
1.1 在公共的包含文件中加入如下的代码:
//$domain_info['lang']为cookie传进来的语言设定值 $language_code = $domain_info['lang']; //界面语言设置成中文 if($language_code == 'zh_CN') { //设置目标语言 putenv("LANG=$language_code"); setlocale(LC_ALL, $language_code); //$package为mo文件的名字 $package = 'i18n_zh'; //绑定mo文件的路径 bindtextdomain($package, '/var/locale'); //设置搜索的mo文件的文件名 textdomain($package); //指定mo文件的返回到gettext的编码 bind_textdomain_codeset($package, 'UTF-8'); } elseif($language_code == 'BIG5') { //界面语言设置成繁体 $language_code = 'zh_TW'; putenv("LANG=$language_code"); setlocale(LC_ALL, $language_code); $package = 'i18n_tw'; bindtextdomain($package, '/var/locale'); textdomain($package); bind_textdomain_codeset($package, 'UTF-8'); } else { //界面语言是英文 //设置目标语言 putenv("LANG=$language_code"); setlocale(LC_ALL, $language_code); //$package为mo文件的名字 $package = 'i18n_en'; //绑定mo文件的路径 bindtextdomain($package, '/var/locale'); //设置搜索的mo文件的文件名 textdomain($package); //指定mo文件的返回到gettext的编码 bind_textdomain_codeset($package, 'UTF-8'); } //*********添加国际化语言的处理结束***************/ |
1.2 相应的模版中加入smarty插件要求的t标签
1.3 用smarty插件提供的工具 生成c文件
这个c文件是把所有的模版中加了标签的串提取出来了
php -q ./tsmarty2c.php *.html $package.c |
注意:默认的c文件的名和1.1中定义的***一样
需要注意的是tsmarty2c.php中定义的 smarty的open tag 和close tag 必须与smarty配置文件设置的一致
1.4 调用linux系统得xgettext把1.3中的c文件生成后缀为po的文件
xgettext -d $package $package.c |
注意:如果文件不是Asc编码的 还得在上面地命令中指明
--file-code=文件编码
1.5 编辑1.4中生成的$package.po ,加入相应的翻译对应串
有几种语言,就的分别编辑生成几个po文件
1.6 调用linux系统得msgfmt把1.3中的1.5中的po文件生成后缀为mo的 二进制文件
msgfmt -o $package.mo $package.po |
1.7 建立locale目录,要与1.1 中的bindtextdomain($package, '/var/locale');设置一样
以1.1中的为例,首先在/var/( 已有的)目录下建立locale目录,locale的结构为
|-- en_US | `-- LC_MESSAGES | |-- $package.mo | |-- zh_CN | `-- LC_MESSAGES | |-- $package.mo | `-- zh_TW `-- LC_MESSAGES |-- $package.mo |
其中的***层目录是按1.1 中的$language_code的定义设的,必须这样,否则找不到,第二层目录LC_MESSAGES是固定的,里面存放1.6 中生成的mo文件
二、由于是网站用的是Smaty,我们可以把模板中的文字都提取出来,集中放到语言文件中
通过smarty的config_load来加载,前提把语言文件放到$smarty->config_dir所设定的目录中
只要在php中包含 ,如下的代码,
$smarty->config_load( 'chs.lang' );//$lang为通过cookie或session获得的页面语言值switch ($lang) {case 'zh-cn' : $smarty->config_load( 'chs.lang' );break; case 'zh-tw' : header( 'cht.lang' );break; default:header( 'cht.lang' );break; } |
以上就是PHP Smarty如何通过gettext加强国际化的总结,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。