提问人:Pekka 提问时间:3/7/2010 最后编辑:Pekka 更新时间:1/17/2011 访问量:4898
确定Zend Framework中的浏览器语言?
Determine browser language(s) in Zend Framework?
问:
我正在用随着时间的推移积累的各种 PHP 辅助函数来解散一个相当大的旧库。我正在寻找基于 Zend Framework 的替代品,以尽可能多地替换这些功能。
我的第一个候选函数是一个函数,该函数从巨大的列表中返回用户最喜欢的浏览器语言,该列表可以是 .http_accept_language
采埃孚有这方面的功能吗?
我意识到Zend_Translate能够以某种方式检测浏览器语言,但我没有看到一个公开可用的函数来实际获取语言字符串。
答:
Zend_Locale
应该能够提供帮助。
请参阅使用Zend_Locale(引用)页面上的示例和说明:
在大多数情况下,将自动 选择正确的区域设置,使用 优先考虑信息 由用户的 Web 浏览器提供。
new Zend_Locale()
该页面后面还有一些细节(引用):
用于自动选择的搜索算法 的区域设置使用三个来源 信息:
1. - 用户的网络 浏览器提供每个 request,由 PHP 在 全局变量 。如果没有匹配 可以找到 locale,然后找到 preference 是给 和 最后 .
2. - PHP的 通过以下方式发布主机服务器的区域设置 PHP内部函数。如果没有匹配的区域设置 可以找到,然后给予优先权 到最后.
3. - 当禅宗 框架具有标准化的方式 指定组件默认值(已计划,但尚不可用),然后在 实例化将优先考虑 根据这些选择区域设置 违约。如果没有匹配的区域设置,则可以 找到,则优先考虑 和 最后。Zend_Locale
const Zend_Locale::BROWSER
HTTP_ACCEPT_LANGUAGE
ENVIRONMENT
FRAMEWORK
const Zend_Locale::ENVIRONMENT
setlocale()
FRAMEWORK
BROWSER
const Zend_Locale::FRAMEWORK
ENVIRONMENT
BROWSER
(建议:去读那一页——我不会复制粘贴所有要读的东西^^)
编辑:这是说明我的评论的代码部分:
$locale = new Zend_Locale();
var_dump($locale->getLanguage());
var_dump($locale->getRegion());
die;
给我:
string(2) "fr"
bool(false)
好吧,我的浏览器要求法语,但没有指定地区^^
评论
Zend_Locale
getLanguage()
getRegion()
给你:
$locale = new Zend_Locale();
// if locale is 'de_AT' then 'de' will be returned as language
print $locale->getLanguage();
// if locale is 'de_AT' then 'AT' will be returned as region
print $locale->getRegion();
评论
我已经对这两个答案投了赞成票。作为获取语言的替代方法,请考虑Zend_Locale
- http://de3.php.net/manual/en/locale.acceptfromhttp.php 或
- http://de3.php.net/manual/en/function.http-negotiate-language.php
评论
是否有可能强制获取第一个完整的区域设置(语言代码和区域代码,如“en_US”),而不仅仅是语言代码(“en”)?如果没有,那么处理货币就是一个问题,因为它们需要一个完整的语言环境。Zend_Locale()
你如何处理这个问题?我还没有为这个问题找到任何可接受的解决方案,对我来说,这似乎应该是一项任务,例如。Zend_Locale
_prepareLocale($locale, $strict = false)
评论