本文将总结Php通过运用smarty中的gettext插件加强国际化的具体应用。

一、选用gettext,因为Smarty有相应得gettext的插件,所以就直接用这个插件了

PHP Smarty经过gettext加强国际化的总结  gettext smarty php 第1张

过程如下:

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为经过cookiesession取得的页面言语值

switch ($lang) {

case 'zh-cn' :

$smarty->config_load( 'chs.lang' );

break;

case 'zh-tw' :

header( 'cht.lang' );

break;

default:

header( 'cht.lang' );

break;

}

【修改引荐】

  1. PHP优化及高效提速问题小结
  2. 在PHP中怎么判别AJAX恳求
  3. PHP优化及高效提速问题小结
转载请说明出处
知优网 » PHP Smarty经过gettext加强国际化的总结

发表评论

您需要后才能发表评论