检测PHP中的用户语言 - 稳定的解决方案

时间:2009-09-29 16:24:32

标签: php

我目前正致力于使用用户语言提供内容的自动用户语言检测。

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

所以我在Google上搜索并找到了$ _SERVER ['HTTP_ACCEPT_LANGUAGE'] - Var来得到这样的结果:

  

解德,DE; Q = 0.8,EN-US; Q = 0.5,连接; 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等等。

那么您将应用哪种方法来检测用户语言?

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

坚持使用Accept-Language。所有浏览器都会传递标题,并且它更可能是用户想要的语言,而不是地理定位的粗略猜测。

PECL有http_negotiate_language,它可以解析标题并为您正确选择一种语言,不过在实践中甚至只是有点虚假的方法只是寻找en / de / {{1字符串中的字符串比IP嗅探更好。

  

与tld类似.com / .net / .org等等。

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

答案 1 :(得分:1)

作为最佳实践,我将使用Zend Framework中非常完善的Zend_Locale组件。

它拥有您需要的所有内容并将您的应用程序本地化,从检测到用户的本地设置到大量国际化货币,号码,日期格式化和翻译管理解决方案。