>  기사  >  백엔드 개발  >  PHP Smarty通过gettext加强国际化的总结_PHP教程

PHP Smarty通过gettext加强国际化的总结_PHP教程

WBOY
WBOY원래의
2016-07-15 13:25:44936검색

一、采用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<br>|   `-- LC_MESSAGES<br>|<br>|-- $package.mo
|<br>|-- zh_CN<br>|   `-- LC_MESSAGES<br>|<br>|-- $package.mo
|
`-- zh_TW<br>`-- LC_MESSAGES<br>|-- $package.mo

其中的第一层目录是按1.1 中的$language_code的定义设的,必须这样,否则找不到,第二层目录LC_MESSAGES是固定的,里面存放1.6 中生成的mo文件

二、由于是网站用的是Smaty,我们可以把模板中的文字都提取出来,集中放到语言文件中
通过smarty的config_load来加载,前提把语言文件放到$smarty->config_dir所设定的目录中
只要在php中包含 ,如下的代码,

<p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">$smarty->config_load( 'chs.lang' );</p><p style="FONT-SIZE: 10pt; MARGIN: 0in"><span lang="EN-US" style="FONT-FAMILY: Verdana">//$lang</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">为通过</span><span lang="EN-US" style="FONT-FAMILY: Verdana">cookie</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">或</span><span lang="EN-US" style="FONT-FAMILY: Verdana">session</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">获得的页面语言值</span></p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">switch ($lang) { </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">case 'zh-cn' :<span>   </span></p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">$smarty->config_load( 'chs.lang' );</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">break;<span>   </span><span>  </span></p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">case 'zh-tw' :<span>   </span></p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">header( 'cht.lang' ); </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">break;<span>   </span></p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">default: </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">header( 'cht.lang' ); </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">break;<span>   </span></p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</p>


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446660.htmlTechArticle一、采用gettext,由于Smarty有相应得gettext的插件,所以就直接用这个插件了 步骤如下: 1.1 在公共的包含文件中加入如下的代码: //$domain_i...
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.