确定Zend Framework中的浏览器语言?

Determine browser language(s) in Zend Framework?

提问人:Pekka 提问时间:3/7/2010 最后编辑:Pekka 更新时间:1/17/2011 访问量:4898

问:

我正在用随着时间的推移积累的各种 PHP 辅助函数来解散一个相当大的旧库。我正在寻找基于 Zend Framework 的替代品,以尽可能多地替换这些功能。

我的第一个候选函数是一个函数,该函数从巨大的列表中返回用户最喜欢的浏览器语言,该列表可以是 .http_accept_language

采埃孚有这方面的功能吗?

我意识到Zend_Translate能够以某种方式检测浏览器语言,但我没有看到一个公开可用的函数来实际获取语言字符串。

php zend-framework

评论


答:

9赞 Pascal MARTIN 3/7/2010 #1

Zend_Locale应该能够提供帮助。

请参阅使用Zend_Locale(引用)页面上的示例和说明:

在大多数情况下,将自动 选择正确的区域设置,使用 优先考虑信息 由用户的 Web 浏览器提供。new Zend_Locale()


该页面后面还有一些细节(引用):

用于自动选择的搜索算法 的区域设置使用三个来源 信息:

1. - 用户的网络 浏览器提供每个 request,由 PHP 在 全局变量 。如果没有匹配 可以找到 locale,然后找到 preference 是给 和 最后 .

2. - PHP的 通过以下方式发布主机服务器的区域设置 PHP内部函数。如果没有匹配的区域设置 可以找到,然后给予优先权 到最后.

3. - 当禅宗 框架具有标准化的方式 指定组件默认值(已计划,但尚不可用),然后在 实例化将优先考虑 根据这些选择区域设置 违约。如果没有匹配的区域设置,则可以 找到,则优先考虑 和 最后。
Zend_Localeconst Zend_Locale::BROWSERHTTP_ACCEPT_LANGUAGEENVIRONMENTFRAMEWORKconst Zend_Locale::ENVIRONMENTsetlocale()FRAMEWORKBROWSERconst Zend_Locale::FRAMEWORKENVIRONMENTBROWSER

(建议:去读那一页——我不会复制粘贴所有要读的东西^^)


编辑:这是说明我的评论的代码部分:

$locale = new Zend_Locale();
var_dump($locale->getLanguage());
var_dump($locale->getRegion());
die;

给我:

string(2) "fr" 
bool(false) 

好吧,我的浏览器要求法语,但没有指定地区^^

评论

0赞 Pekka 3/7/2010
干杯@Pascal,从长远来看,我将能够与之合作.不过,目前我只是用自己的语言环境处理替换现有应用程序中的帮助程序函数库,因此我需要掌握实际的 ISO 代码。Zend_Locale
0赞 Pascal MARTIN 3/7/2010
哦:-(太糟糕了:-( ;;;哼。。。关于它,首先实例化语言环境,让 ZF 发挥它的魔力,然后调用 and/or 方法来获取语言环境的代码呢?getLanguage()getRegion()
0赞 Pascal MARTIN 3/7/2010
我已经编辑了我的答案以获得部分代码 - 但我看到我被@henchman ^^打败了
0赞 Pekka 3/7/2010
我会接受@henchman的回答,因为他确实比你快了几秒钟,但欢呼@Pascal。它完美地工作,即使语言 100% 不在任何语言环境中。
0赞 Pascal MARTIN 3/7/2010
没问题:-)很高兴你有你的解决方案:-)
11赞 Phil Rykoff 3/7/2010 #2

给你:

$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();

评论

0赞 Michelangelo 5/10/2013
如果首选项只有“en”或“es”,会发生什么情况?stackoverflow.com/questions/16469629/......
0赞 Phil Rykoff 5/10/2013
我直接回答了你的问题。
5赞 Gordon 3/7/2010 #3

我已经对这两个答案投了赞成票。作为获取语言的替代方法,请考虑Zend_Locale

评论

1赞 Pascal MARTIN 3/7/2010
第一个+1 :即使它仅在 PHP >= 5.3 中可用,使用本机函数也很好(并且 intl 类是 PHP 的一个很好的补充)。
1赞 Pekka 3/7/2010
我将接受基于 Zend 的答案,因为这就是我所要求的,但 +1,因为这真的很好,甚至是内置的 - 5.3.0 现在要求太多了,但一年后不会。干杯。
1赞 Nico 1/17/2011 #4

是否有可能强制获取第一个完整的区域设置(语言代码和区域代码,如“en_US”),而不仅仅是语言代码(“en”)?如果没有,那么处理货币就是一个问题,因为它们需要一个完整的语言环境。Zend_Locale()

你如何处理这个问题?我还没有为这个问题找到任何可接受的解决方案,对我来说,这似乎应该是一项任务,例如。Zend_Locale_prepareLocale($locale, $strict = false)