繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM