【问题标题】:Determine browser language(s) in Zend Framework?在 Zend Framework 中确定浏览器语言?
【发布时间】:2011-01-17 20:34:57
【问题描述】:

我正在解散一个相当大的旧库,其中包含随着时间的推移而积累的各种 PHP 帮助函数。我正在为尽可能多的这些功能寻找基于 Zend 框架的替代品。

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

ZF 是否有这方面的功能?

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

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    给你:

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

    【讨论】:

    【解决方案2】:

    Zend_Locale 应该能够提供帮助。

    查看Using Zend_Locale页面上的示例和解释(引用)

    在大多数情况下,new Zend_Locale() 会自动 选择正确的语言环境,使用 信息优先 由用户的网络浏览器提供。


    该页面稍后会提供更多详细信息(引用)

    使用的搜索算法 Zend_Locale 自动选择 语言环境的三个来源 信息:

    1. const Zend_Locale::BROWSER - 用户的网站 浏览器提供每个信息 请求,由 PHP 在 全局变量 HTTP_ACCEPT_LANGUAGE。如果没有匹配 可以找到语言环境,然后是偏好 给ENVIRONMENT,最后 FRAMEWORK

    2. const Zend_Locale::ENVIRONMENT - PHP 通过发布主机服务器的语言环境 PHP 内部函数 setlocale()。如果没有匹配的语言环境 可以找到,然后给出优先级 到FRAMEWORK,最后是BROWSER

    3. const Zend_Locale::FRAMEWORK - 当 Zend 框架有一个标准化的方式 指定组件默认值 (计划中,但尚不可用),然后在 实例化将优先考虑 根据这些选择语言环境 默认值。如果没有匹配的语言环境可以 找到,然后优先考虑 ENVIRONMENT,最后是BROWSER

    (建议:去阅读那个页面——我不会复制粘贴所有要阅读的内容^^)


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

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

    给我:

    string(2) "fr" 
    bool(false) 
    

    嗯,我的浏览器要求法语,但没有指定区域^^

    【讨论】:

    • 干杯@Pascal,从长远来看,我将能够与Zend_Locale 合作。不过,目前我只是用自己的语言环境处理替换现有应用程序中的辅助函数库,所以我需要掌握实际的 ISO 代码。
    • 哦 :-( 太糟糕了 :-( ;;; 哼...想一想:首先实例化语言环境怎么样,让 ZF 发挥它的魔力,然后调用 getLanguage() 和/或getRegion() 方法来获取语言环境的代码?
    • 我已经编辑了我的答案以获得部分代码——但我发现我已经被@henchman 打败了^^
    • 我会接受@henchman 的回答,因为他确实比你快了几秒钟,但欢呼@Pascal。即使使用 100% 不在任何语言环境列表中的语言,它也能完美运行。
    • 没问题 :-) 很高兴你有你的解决方案 :-)
    【解决方案3】:

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

    【讨论】:

    • +1 表示第一个:即使它仅在 PHP >= 5.3 中可用,使用本机函数也很好(并且 intl 类是 PHP 的一个很好的补充)。
    • 我会接受基于 Zend 的答案,因为这是我所要求的,但是 +1 因为这真的很好,甚至是内置的 - 5.3.0 现在要求太多但不会一年内。干杯。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      相关资源
      最近更新 更多