[英]detect user language in PHP - stable solution
我目前正在进行自动用户语言检测,以用户的语言提供内容。
当然可以手动更改语言,但如果用户第一次访问该页面,我想以他的语言提供内容。
所以我在Google上搜索并找到了$ _SERVER ['HTTP_ACCEPT_LANGUAGE'] - Var来得到这样的结果:
DE-DE,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等等。
那么您将应用哪种方法来检测用户语言?
谢谢你的帮助。
坚持使用Accept-Language。 所有浏览器都会传递标题,并且它更可能是用户想要的语言,而不是地理定位的粗略猜测。
PECL有http_negotiate_language ,它可以解析标题并为你正确选择一种语言,但实际上即使是在字符串中查找en
/ de
/ it
的有点虚假方法it
比IP嗅探效果更好。
什么是.com / .net / .org等等。
域名通常不涉及IP嗅探,它具有自己的IP范围后端数据库, 可能连接到某个国家/地区。 国家猜测的反向解决几乎没有用,因为很少有IP反向解析为ccTLD。
作为最佳实践,我将使用Zend Framework中非常完善的Zend_Locale组件。
它拥有您需要的所有内容和本地化您的应用程序,从检测用户的本地设置到大量国际化货币,号码,日期格式和翻译管理解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.