我挑战了一个问题来检测客户端浏览器的位置和位置。我搜索谷歌很多时间但没有正确答案,java.util.Locale无法正常工作。有没有解决方案请与我分享
答案 0 :(得分:2)
java.util.Locale
无法工作的原因是,它使用的是您服务器的区域设置,而非客户端。
您可以从浏览器的用户代理处获取用户系统语言等信息。
有关详细信息,例如用户的位置,有不同的方法。一种方法是使用HTML5 Geolocation:
<script>
var x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
function showPosition(position) {
x.innerHTML = "Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude;
}
</script>
问题是,你不能依靠获取地理位置。我的浏览器(Safari)总是要求我给网站我的位置。所以我能够否认它。用户代理字符串始终存在。它可能会被更改,但您应该始终能够检索它。 虽然两者都没有首选语言,但您需要一个后备默认值。
编辑:显然,还有一种方法可以让客户首选Locale
HttpServletRequest.getLocale()
。 According to the docs,它将读取HTTP Accept-Language Header,这是另一种获取语言环境的方法,但也不是强制性的。如果没有区域设置,它只会返回null
。
所以到目前为止,您至少有三种获取信息的方法。所有这些都取决于浏览器,您可能不会依赖其中的一个。
答案 1 :(得分:1)
听起来您需要使用User-Agent来获取所需的信息。使用JSP,您可以按如下方式获取它:
String userAgent = request.getHeader("User-Agent");
包含类似于以下内容的字符串中的大多数客户端信息:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36
除此之外,您还可以使用ServletRequest的getLocale()方法,该方法将根据Accept-Language标头返回Locale。
答案 2 :(得分:0)
答案 3 :(得分:0)
位置和区域设置是不同的问题。
位置(国家,地区等)检测基于IP地址。你可以通过ip java&#34; google&#34; geolocation并看到很多参考文献。例如,这一个:http://www.mkyong.com/java/java-find-location-using-ip-address/
从HTTP标头中检测到区域设置。来自http请求的Google&#34;语言环境&#34;并参考参考。例如:Specifying locale for http request/response
很快,HTTP标头Accept-Language
和Accept-Charset
就是您的朋友。