“多语言”仅仅是网站国际化的一个方面,其中还包括“日期格式”、“时区”、“日历”、“货币”等。“多语言”、“日期”和“时区”是最为关心的。这篇文章就Zend_Locale, Zend_Translate, Zend_Date, date_default_timezone_set讲述国际化的简单运用。
1. 创建Zend_Locale对象
$local = new Zend_Locale();
默认情况下,按照用户浏览器设定地区。即,浏览器为中国,则网站地区为中国。
当然可以根据服务器环境设定地区,或者直接输入参数:new Zend_Locale(‘en_US’)。
设计思路:使用Cookie来保存用户曾经选择的地区,如果Cookie未设置,则默认根据浏览器判断。
$locale = new Zend_Locale();
if (isset($_COOKIE['locale']) && Zend_Locale::isLocale($_COOKIE['locale'], true, false)) {
$locale->setLocale($_COOKIE['locale']);
}
2. Zend_Translate 设置多语言
ZF提过了很多翻译适配器,其中最为常用的gettext,对应的语言数据位.mo。.mo被很多软件用来开发多语言,譬如WordPress。
简介下Zend_Rranslate的gettext用法:
$translate = new Zend_Translate(
‘gettext’, //适配器
‘languages’, //语言包文件夹,mo文件存放位置
$locale, //Zend_Locale对象
array(’scan’ => Zend_Translate::LOCALE_FILENAME)//自动扫描形式
);
languages文件夹下存放数据文件为:zh_CN.mo, en_US.mo, zh_TW
Controller中使用方法$translate->_(‘msgID’),需要将$translate对象写入注册表,Zend_Registry(‘Zend_Translate’,$translate), 键值必须是 Zend_Translate,否则,得不到应有的结果。
View中使用方法<?php $this->translate(‘msgID’) ?> , 通过View中的translate助手。
关于mo文件的创建,可以下载poEdit,关于poEdit的使用我尚未完全明白,简述我的mo文件制作方法。
(1) 通过poEdit创建zh_CN.po文件,用editPlus打开zh_CN.po,
输入:
msgid "welcome"
msgstr "欢迎您"
(2)用poEdit打开zh_CN.po,保存一下,即可生成zh_CN.mo文件。也可以另存为zh_TW,用来做繁体。
3. 时间格式
都知道美国人表示时间格式与中国人不同,怎样才能把数据库中的一个UNIX时间戳根据地区显示不同形式呢?Zend_Date可以达到这样的效果。
$date = new Zend_Date(123456789, false, $locale);
print $date;
即可根据$locale地区设置不同时间显示格式。
思路
在数据库中存储UNIX时间戳,利用Zend_Date与$locale对象设置时间戳的显示格式。
4. 时区
让我很不解的是,好像Zend_Date里面没有时区设置,不能根据$locale自动设置时区,尝试很多,未果。我的思路如下:
将用户选择的失去写入Cookie,如果未设置Cookie,则使用Asia/Shanghai作为默认时区。
if (isset($_COOKIE['timezone'])) {
date_default_timezone_set($_COOKIE['timezone']);
} else {
date_default_timezone_set('Asia/Shanghai');
}