Zend Framework 多语言国际化-适配器gettext

“多语言”仅仅是网站国际化的一个方面,其中还包括“日期格式”、“时区”、“日历”、“货币”等。“多语言”、“日期”和“时区”是最为关心的。这篇文章就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');
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值