【问题标题】:detect user language in PHP - stable solution在 PHP 中检测用户语言 - 稳定的解决方案
【发布时间】:2009-09-29 16:24:32
【问题描述】:

我目前正在开发一种自动用户语言检测,以便以用户的语言提供内容。

当然可以手动更改语言,但如果用户第一次访问该页面,我想以他的语言提供内容。

所以我在谷歌上搜索,发现 $_SERVER['HTTP_ACCEPT_LANGUAGE']-Var 得到这样的结果:

de-de,de;q=0.8,en-us;q=0.5,en;q=0.3

过滤此结果以获得清晰结果(如“EN”/“DE”/“IT”)的最佳方法是什么?

$rL = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; //  de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
$langCode = strtoupper($rl[0].$rl[1]);

这个 Server-Var 的第二个问题是,如果浏览器提供一些信息,它只会给我一个结果。设置默认页面语言是处理这个问题的唯一可能性吗?

我感兴趣的第二种可能性是通过 IP 获取语言。因此,如果我得到语言,我可能知道用户的语言。但是在像瑞士、比利时这样的多语言国家呢? .com / .net / .org 之类的 tld 是什么。

那么你会应用哪种方法来检测用户的语言?

感谢您的帮助。

【问题讨论】:

    标签: php


    【解决方案1】:

    坚持接受语言。所有浏览器都会传递标头,它更有可能是用户想要的语言,而不是粗略的地理位置猜测。

    PECL 有 http_negotiate_language 可以解析标题并为您正确选择一种语言,尽管在实践中,即使是在字符串中寻找 en/de/it 的有点虚假的方法也比IP 嗅探。

    .com / .net / .org 等 tld 是什么。

    域名通常不参与 IP 嗅探,它有自己的 IP 范围后端数据库,可能连接到某个国家/地区。国家猜测的反向解析几乎没有用,因为很少有 IP 反向解析到 ccTLD。

    【讨论】:

    • 好吧,当我尝试使用 http_negotiate_language 的示例时,我得到了 - 致命错误:调用未定义的函数 http_negotiate_language() - 我做错了什么?
    • 安装 pecl_http 扩展。 uk.php.net/manual/en/http.install.php 或者,negotiate_language 页面的 cmets 中有一个原生 PHP 版本,看起来应该没问题。
    【解决方案2】:

    作为最佳实践,我将使用 Zend Framework 中开发得非常好的Zend_Locale 组件。

    它拥有 I18n 和本地化应用程序所需的一切,从检测用户的本地设置到大量国际化货币、数字、日期格式和翻译管理解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 2018-07-29
      相关资源
      最近更新 更多