栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用javascript(客户端)获取访问者的语言和国家/地区代码(重复)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用javascript(客户端)获取访问者的语言和国家/地区代码(重复)

navigator.language
正如您所链接的问题之一所言,这是不可靠的。

问这个问题的原因很多,但是您仍在搜索中说明有关该问题的信息。 纯粹 在客户端进行语言检测几乎没有可靠的方法。

首先,语言首选项仅应用于检测语言首选项,即不用于位置。我的浏览器设置为

en_US
,因为我想要英语版本。但是我在英国,因此必须对其进行更改,
en_GB
以通过浏览器设置检测到我的国家。作为“客户”,这不是我的问题。这对于语言来说很好,但是如果您网站上的所有价格均为$
USD,那就不好了。

检测语言,
您确实需要访问服务器端脚本。如果您不是后端开发人员,并且想要在客户端上尽可能多地执行操作(作为您的问题),那么您需要做的是一个单行PHP脚本,该脚本回显Accept-Language标头。最简单的是:

<?phpecho $_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 pres ....} } );

如果您能够通过后端生成HTML,则可以通过简单地将语言首选项打印到页面中来避免完全使用Ajax,例如

<script>    var prefs = <?php echo json_enpre($_SERVER['HTTP_ACCEPT_LANGUAGE'])?>;</script>

如果您无权访问服务器但可以将脚本添加到另一台服务器,则简单的JSONP服务将如下所示:

<?php$prefs = $_SERVER['HTTP_ACCEPT_LANGUAGE'];$jsonp = 'myCallback('.json_enpre($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 pres ....}$.ajax( {    url: 'http://some.domain/script.php',    dataType: 'jsonp'} );

国家检测 是另一回事。在客户端上有navigator.geolocation,但是它很可能会提示您的用户进行许可,因此对于获得无缝的用户体验没有好处。

要隐式地进行操作,您仅限于地理IP检测。同样,也不要使用语言来暗示国家。

要在客户端进行国家/地区检测,您还需要一个后端服务,以便获取客户端IP地址并访问IP/位置映射的数据库。Maxmind的GeoIP2Javascript客户端似乎将所有这些都打包在一个客户端软件包中,因此您不需要自己的服务器(尽管我确定它将使用远程jsonp服务)。还有freegeoip。net,就注册而言,它可能不如MaxMind麻烦,它似乎也是开源的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号