在Zend框架中设置语言环境
每个应用程序都有一个语言环境,即使那只是作者的语言环境。通过使用本地语言,您可以使您的应用程序知道用户想要查看哪种语言,货币甚至时区。在ZendFramework中,这是通过Zend_Locale来实现的。
一次与语言环境有很多关系,但是首先您需要确定用户所在的位置。为了找到答案,您只需创建一个Zend_Locale对象的新实例。以下代码将创建Zend_Locale对象,并打印出用户的语言和区域。
$locale = new Zend_Locale(); $language = $locale->getLanguage(); $region = $locale->getRegion(); echo $language . ' ' . $region;
您在这里看到的内容取决于您所在的位置以及计算机上运行的语言。例如,一个居住在德国的人说德语,将看到以下输出。
deDE
Zend_Locale通过查看正在访问页面的用户代理的语言设置来工作。每次您访问Internet上的任何页面时,浏览器都会向服务器发送一个标头,上面写着“这是我的语言环境”。所有Zend_Locale都会查看此标头并正确解释它。
可以通过使用Zend_Locale类中的常量来更改此行为。将常量Zend_Locale::BROWSER传递给Zend_Locale对象创建将具有与将其保留为空白相同的效果。您可以使用其他两个常量。
Zend_Locale::ENVIRONMENT-此常量将获取通过PHP函数创建的值setlocale()。如果尚未设置,则使用浏览器设置。
Zend_Locale::FRAMEWORK-此常数将获取基于应用程序内默认值设置的值。如果不可用,则使用环境设置。
也可以强制将语言环境设置为某个值,例如,您的应用程序可能支持英语,法语和德语,但是如果出现其他语言环境,您仍然希望能够显示某些内容。这可以通过两种方式完成。第一种是使用setLocale()功能设置本地语言,第二种是在德国将本地语言设置为德语。
$locale->setLocale('de_DE');
另外,您还可以在实例化期间通过传递包含本地语言环境的字符串来设置语言环境。以下与先前的示例具有相同的效果。
$locale=newZend_Locale('de_DE');
也可以通过使用Zend_Registry设置应用程序范围的语言环境。通过使用键“Zend_Locale”,所有支持语言环境的对象将能够查看已设置的语言环境并采取相应的措施。
$locale = new Zend_Locale('de_AT'); Zend_Registry::set('Zend_Locale', $locale);
那么,这样做有什么用呢?对于诸如设置日期之类的次要事情,以正确的格式显示日期很重要。例如,英国人可能会说星期三,而德国人会说Mittwoch。以下代码将打印出星期几。请注意,您不需要传递$local参数,如果您在注册表中进行了设置,则可以自动检测到该参数。
$date = new Zend_Date(); echo $date->get(Zend_Date::WEEKDAY, $locale);
也可以通过语言环境对数字进行归一化。下面的示例采用一个数字并将其格式化为正确的语言环境。这很重要,因为不同的本地人使用不同的数字书写方式。
$number = Zend_Locale_Format::toNumber(123456.78, array('locale' => $locale)); print $number;
您可能希望前面的示例始终输出123,456.78,但是对于其他本地语言(交换千位和小数点的含义),可以写为123.456,78。在编写货币值时,这一点尤其重要。
也可以使用Zend_Translate完全翻译页面的内容,但是由于这是一个涉及更多的主题,因此将成为单独博客文章的一部分。