问题:
是否有一个javascript(客户端)代码来获取访问者的国家/语言代码,该代码是准确的并且是跨“现代”浏览器的?我要寻找的结果一样'en-US'
,'sv-SE'
,'nl-NL'
,等。
我试过了 :
var language = window.navigator.userLanguage || window.navigator.language;
console.log(language);
并"sv"
在"en-GB"
同一台计算机和同一位置安装了Chrome和Firefox。
navigator.language
正如您所链接的问题之一所言,这是不可靠的。
问这个问题的原因很多,但是您仍在搜索中说明有关该问题的信息。 纯粹 在客户端进行语言检测几乎没有可靠的方法。
首先,语言首选项仅应用于检测语言首选项,即不用于位置。我的浏览器设置为en_US
,因为我想要英语版本。但是我在英国,因此必须对其进行更改,en_GB
以通过浏览器设置检测到我的国家。作为“客户”,这不是我的问题。这对于语言来说很好,但是如果您网站上的所有价格均为$
USD,那就不好了。
要 检测语言,
您确实需要访问服务器端脚本。如果您不是后端开发人员,并且想要在客户端上尽可能多地执行操作(作为您的问题),那么您需要做的是一个单行PHP脚本,该脚本回显Accept-Language标头。最简单的是:
<?php
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
// e.g. "en-US,en;q=0.8"
您可以通过Ajax获得此信息并解析文本响应客户端,例如(使用jQuery):
$.ajax( { url: 'script.php', success: function(raw){
var prefs = raw.split(',');
// process language codes ....
} } );
如果您能够通过后端生成HTML,则可以通过简单地将语言首选项打印到页面中来避免完全使用Ajax,例如
<script>
var prefs = <?php echo json_encode($_SERVER['HTTP_ACCEPT_LANGUAGE'])?>;
</script>
如果您无权访问服务器但可以将脚本添加到另一台服务器,则简单的JSONP服务将如下所示:
<?php
$prefs = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$jsonp = 'myCallback('.json_encode($prefs).')';
header('Content-Type: application/json; charset=UTF-8', true );
header('Content-Length: '.strlen($jsonp), true );
echo $jsonp;
对您的Ajax使用jQuery,您将执行以下操作:
function myCallback( raw ){
var prefs = raw.split(',');
// process language codes ....
}
$.ajax( {
url: 'http://some.domain/script.php',
dataType: 'jsonp'
} );
国家检测 是另一回事。在客户端上有navigator.geolocation,但是它很可能会提示您的用户进行许可,因此对于获得无缝的用户体验没有好处。
要隐式地进行操作,您仅限于地理IP检测。同样,也不要使用语言来暗示国家。
要在客户端进行国家/地区检测,您还需要一个后端服务,以便获取客户端IP地址并访问IP/位置映射的数据库。Maxmind的GeoIP2JavaScript客户端似乎将所有这些都打包在一个客户端软件包中,因此您不需要自己的服务器(尽管我确定它将使用远程jsonp服务)。还有freegeoip。net,就注册而言,它可能不如MaxMind麻烦,它似乎也是开源的。
问题内容: 我正在尝试扩展本机地理位置功能 这样我就可以使用访问者的国家/地区名称(也许返回一个信息丰富的数组)。 到目前为止,我所能找到的只是显示google maps界面的函数,但实际上没有提供我想要的东西,除了该库但由于某种原因在我的计算机上不起作用。我不知道为什么在那里出错了。 无论如何,您知道我怎样才能简单地从纬度和经度值中返回一个包含国家,城市等信息的数组? 问题答案: 如果只需要用户
问题内容: 我想通过他们的IP获取访问者国家/地区…现在我正在使用它(http://api.hostip.info/country.php?ip= ......) 这是我的代码: 好吧,它工作正常,但事实是,这将返回国家代码(例如美国或加拿大),而不是整个国家名称(例如美国或加拿大)。 那么,hostip.info可以提供这种方法吗? 我知道我可以编写一些代码,最终将这两个字母转换为整个国家/地区
问题内容: 对于我们的网站,重要的是确切知道访问者来自哪个国家。 我想我的问题的最佳答案将是当前浏览器系统的简单地理位置功能,该功能仅询问用户是否允许该网站查看其地理位置:http : //dev.w3.org/geo/api/ spec- source.html 但是我不想打扰访客,我想自动检测访客的位置(国家应该足够了。) 最好的方法是什么?-哪个IP数据库最好?-浏览器标头是否足够可信以检测
问题内容: 我已经找到了针对Objective-C的答案,但是林先生很难迅速做到这一点。 我用它来获取当前位置的国家代码: 但是,如何将该国家/地区代码转换为国家/地区名称,例如在此示例中,将“ US”转换为“ United States”? 问题答案: 迅捷3
我正在使用PHP Google API客户端库使用OAuth2从Google帐户检索用户信息。然而,尽管谷歌的文档中指出,我似乎无法访问用户的国家或时区信息,即使令牌成功返回,并且所有其他信息都可以从范围中获得。 我在这里使用了int heir库提供的示例代码,如果我在该文件的第49行上var_dump($user),我将获得以下输出(出于隐私考虑进行编辑): 正如您所见,没有可用的时区或国家信息
问题内容: 如果有国家代码,(ISO-3166-1 alpha-2国家代码),你怎么弄的地区代码(,)做这样的事情: 问题答案: 您不能,因为语言环境用于保存语言,而不是国家/地区。它可以包含特定国家/地区的语言,也可以是该国家/地区的特定变体,但它是第一语言。语言与国家之间没有一对一的关系。大多数语言在各个国家/地区使用,许多国家/地区使用多种语言。 如果您有语言的国家/地区代码,则可以使用。但