Heim > Backend-Entwicklung > PHP-Tutorial > PHP Smarty通过gettext加强国际化的总结_PHP教程

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

WBOY
Freigeben: 2016-07-15 13:25:44
Original
964 Leute haben es durchsucht

一、采用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);
Nach dem Login kopieren
//指定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');}//*********添加国际化语言的处理结束***************/
Nach dem Login kopieren

1.2 相应的模版中加入smarty插件要求的t标签

1.3 用smarty插件提供的工具 生成c文件

这个c文件是把所有的模版中加了标签的串提取出来了

php -q ./tsmarty2c.php  *.html  $package.c
Nach dem Login kopieren

注意:默认的c文件的名和1.1中定义的最好一样

需要注意的是tsmarty2c.php中定义的 smarty的open tag 和close  tag 必须与smarty配置文件设置的一致

1.4 调用linux系统得xgettext把1.3中的c文件生成后缀为po的文件

xgettext -d $package    $package.c
Nach dem Login kopieren

注意:如果文件不是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
Nach dem Login kopieren

1.7 建立locale目录,要与1.1 中的bindtextdomain($package, '/var/locale');设置一样

以1.1中的为例,首先在/var/( 已有的)目录下建立locale目录,locale的结构为

|-- en_US<br>|   `-- LC_MESSAGES<br>|<br>|-- $package.mo
Nach dem Login kopieren
|<br>|-- zh_CN<br>|   `-- LC_MESSAGES<br>|<br>|-- $package.mo
Nach dem Login kopieren
|
Nach dem Login kopieren
`-- zh_TW<br>`-- LC_MESSAGES<br>|-- $package.mo
Nach dem Login kopieren

其中的第一层目录是按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>
Nach dem Login kopieren


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446660.htmlTechArticle一、采用gettext,由于Smarty有相应得gettext的插件,所以就直接用这个插件了 步骤如下: 1.1 在公共的包含文件中加入如下的代码: //$domain_i...
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage