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

wil*_*ber 7 php

我目前正在进行自动用户语言检测,以用户的语言提供内容.

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

所以我在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]);
Run Code Online (Sandbox Code Playgroud)

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

我感兴趣的第二种可能性是通过IP获取语言.所以,如果我得到语言,我可能知道用户的语言.但是在瑞士,比利时这样的多语言国家有什么?什么是.com/.net/.org等等.

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

谢谢你的帮助.

bob*_*nce 5

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

PECL有http_negotiate_language,它可以解析标题并为你正确选择一种语言,但实际上即使是在字符串中寻找en/ de/ 的一些虚假方法也it比IP嗅探效果更好.

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

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