网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > PHP > 正文
Php Smarty通过gettext加强国际化的总结
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/12/10
下载{$ArticleTitle}原创论文样式

  一、采用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;  

}

(责任编辑:admin)

  • 上一篇资讯: Discuz中的同步登录
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号