Zend Framework中使用Zend_Translate搭建多语言站点

如果你的项目想要支持多语言版本,那么就需要用到 Zend_Translate。通过google搜索了一些帮助文档,除了需要Zend_Translate,还需要Zend_Session_Namespace的使用,我将多个网站的描述和讲解总结如下。

1. 准备翻译文件

Zend_Translate 支持多种格式的翻译文件。假设,我们需要一个中文版支持和一个英文版支持,翻译文件命名为 zh_cn.php、en.php,放在与 application 平行的 languages 文件夹里。
zh_cn.php该文件内容如下:

<?php
return array(
‘hello_world’ => ‘你好!’,
);

en.php该文件内容如下:

<?php
return array(
‘hello_world’ => ‘Hello world!’,
);


2. 加载翻译文件

编辑 index.php 文件,在前端控制器运行之前,插入下面的代码

$registry['fileurl']=dirname(__FILE__);

require_once ‘Zend/Registry.php’;
require_once ‘Zend/Translate.php’;

$languageNamespace = new Zend_Session_Namespace(‘language’);
$langid = $languageNamespace->languagetype;

if($langid == ‘zh_cn’){
$adapter = new Zend_Translate(‘array’, $registry['fileurl'] . ‘/languages/zh_cn.php’, ‘zh_cn’);
}elseif($langid == ‘en’){
$adapter = new Zend_Translate(‘array’, $registry['fileurl'] . ‘/languages/en.php’, ‘en’);
}else{
$adapter = new Zend_Translate(‘array’, $registry['fileurl'] . ‘/languages/zh_cn.php’, ‘en’);
}

Zend_Registry::set(‘Zend_Translate’, $adapter);

A.上述代码的作用是载入 zh_cn.php,并把它保存成全局变量。
B.Zend_Registry 可以看成是一个全局变量容器。
C.创建一个Zend_Session_Namespace的实例,使用SESSION存储数据时要设置命名空间language。
D.根据session中存储的language值切换调用的语言包文件。
E.在保存到 Zend_Registry 中时,键值必须是 Zend_Translate,否则,得不到应有的结果。

3. 在视图中使用翻译条目
编辑 application/views/scripts/admin/index.phtml 文件,将原来的“<h1>Hello World!</h1>”替换成:

<h1>
<?php echo $this->translate(‘hello_world’); ?>
</h1>

4. 设置翻译按钮
编辑 application/layouts/admin.phtml 文件,在原来的导航位置添加:

<a href=’<?php echo $this->baseUrl();?>/language/change/l/zhcn’?>简体中文</a> |
<a href=’<?php echo $this->baseUrl();?>/language/change/l/en’>English</a>

5. 设置session内的语言标量值
在application中新建LanguageController.php文件,添加一个方法用于获取参数L,并将语言标量值保存到session中,为前台index.php获取提供便利:

function changeAction(){
$lid = $this->_request->getParam(‘l’);
$languageNamespace = new Zend_Session_Namespace(‘language’);
if($lid == ‘zhcn’){
$languageNamespace->languagetype = ‘zh_cn’;
}elseif($lid == ‘en’){
$languageNamespace->languagetype = ‘en’;
}else{
$languageNamespace->languagetype = ‘zh_cn’;
}
$this->_helper->layout->setLayout(‘adminlogin’);
}

新建application/views/scripts/language/change.phtml,用于当点击切换语言后自动返回当前页面。

<script>
window.history.go(-1);
window.histrory.back();
</script>

6. 完毕

参考网站:
Zend Framework入门-多国语言支持
Zend Framework之Zend_Session
Zend Session使用要点
Google搜索“zend session”

相关文章:
You can leave a response, or trackback from your own site.

Leave a Reply

请输入验证码:click to change