Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何确定用户的语言_Php_Geoip_User Location - Fatal编程技术网

Php 如何确定用户的语言

Php 如何确定用户的语言,php,geoip,user-location,Php,Geoip,User Location,我正在寻找最好的方式来决定网络用户的语言,以便内容可以在他的母语。我想知道不同技术的优缺点 我正在考虑的几个选项是: 使用PHP geoIP扩展,该扩展使用Maxminds数据库免费版本 使用http\u语言从浏览器访问用户语言 正如我提到的,我不想深入了解各州和城市。我只想根据用户的位置/语言切换内容 您还有其他建议吗?最佳做法是让您的用户从选择器中决定他们的语言 取自。下面查找可以由Javascript语言选择器设置的cookie,如果找不到,则使用用户浏览器发送的设置 // Get loc

我正在寻找最好的方式来决定网络用户的语言,以便内容可以在他的母语。我想知道不同技术的优缺点

我正在考虑的几个选项是:

使用PHP geoIP扩展,该扩展使用Maxminds数据库免费版本 使用http\u语言从浏览器访问用户语言 正如我提到的,我不想深入了解各州和城市。我只想根据用户的位置/语言切换内容


您还有其他建议吗?

最佳做法是让您的用户从选择器中决定他们的语言

取自。下面查找可以由Javascript语言选择器设置的cookie,如果找不到,则使用用户浏览器发送的设置

// Get locale from user agent
if(isset($_COOKIE['lang']))
{
    $preference = $_COOKIE['lang'];
}
else
{
    $preference = Locale::acceptFromHttp(getenv('HTTP_ACCEPT_LANGUAGE'));
}

// Match preferred language to those available, defaulting to generic English
$locale = Locale::lookup(config()->languages, $preference, false, 'en');

// Default Locale
Locale::setDefault($locale);
setlocale(LC_ALL, $locale . '.utf-8');
//putenv("LC_ALL", $locale);
需要PHP5.3和ICU INTL库

$ sudo apt-get install php5-intl
使用浏览器的语言

提供易于访问的菜单,以便随时切换语言


使用地理定位设置第一选择也是一种选择,但它不是100%可靠的,而且实际的浏览器语言是用户所说语言的更好指示器。

地理定位在许多情况下都会失败。例如,一个在旅行/度假时说英语的人在乌克兰停留时会被错误的语言呈现。我认为大多数用户在浏览器设置中都有正确的语言。

自动获取浏览器的使用语言$\u服务器['HTTP\u USER\u AGENT'],但会提供一个选择框或其他东西,让用户可以选择其他语言。如果您使用的是一个框架,那么它应该有一些辅助方法


我不会使用GeoIP,比如说一个美国人正在法国度假时浏览你的网站。

我将其标记为php,但你也可以使用javascript navigator.language,具体取决于你需要知道的地方。在边境地区,语言不会有明显的变化,我相信很多人(比如说美国人)会用西班牙语或汉语作为首选语言浏览,所以你的浏览器会说你住在纽约,没有告诉我你说的是什么语言,因为请求标题说明了浏览器是如何配置为更喜欢一种语言还是本地化的。Cookie有一个很大的缺陷,就是你不能同时打开来自不同语言的多个页面,这就是为什么我倾向于使用基于URL的页面approach@Pekka符合事实的但别忘了,如果需要,您可以将cookie限制在某些路径上。@Pekka,在不同的地区同时打开多个页面有什么意义?@idle比较两个翻译。。。在谷歌上搜索一个特定的术语,并在两个不同的语言版本上找到它。。。有很多用例,而且被浏览器强制转换成一个版本是非常烦人的。重要的是,acceptFromHttp将只提取第一个/最高的值。如果默认情况下支持英语和西班牙语,并且用户首选葡萄牙语,其次是西班牙语。acceptFromHttp将只返回葡萄牙语,您不支持葡萄牙语,因此即使您可以提供西班牙语,您最终也将使用英语。我正在研究如何实现这一点:我上面的例子就是这样做的。首先,您询问安装时已配置的浏览器,如果这还不够好,请让他们从下拉列表中选择一种语言,并保存一个名为lang的cookie以使用该语言。