我正在尝试使用以下方法获取当前用户的语言设置:
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
当我 VPN 进入另一个国家,甚至使用 geopeeker.com 时,当我回显 $lang 时,我仍然会得到“en”。
这种方法不是解决这个问题的最好方法吗?还是我的测试方法有缺陷?
我正在尝试使用以下方法获取当前用户的语言设置:
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
当我 VPN 进入另一个国家,甚至使用 geopeeker.com 时,当我回显 $lang 时,我仍然会得到“en”。
这种方法不是解决这个问题的最好方法吗?还是我的测试方法有缺陷?
Accept-Language 标头不是由您访问的国家/地区设置的,而是由您的浏览器设置的。如果您使用相同的浏览器,VPN 到另一个国家,您的浏览器仍然会发送相同的标头。它要么是浏览器首选项中的设置,要么是浏览器从系统的区域设置首选项中获取的。
这取决于您的浏览器设置,并在请求标头中发送。请参阅如何将自定义接受语言添加到 Chrome 以进行伪本地化测试?用于更改浏览器设置,或考虑使用 curl 之类的东西手动指定它们。