2015-05-14 6 views
0

Я поставил под сомнение проблему обнаружения местоположения и местоположения браузера клиента. Я ищу в google много времени, но нет правильного ответа, java.util.Locale работает неправильно. Есть ли какое-либо решение, пожалуйста, поделитесь со мнойКак определить страну-клиента

ответ

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 

В дополнение к этому, вы можете использовать GetLocale ServletRequest (в) метод, который вернет Locale на основе заголовка Accept-Language.

+0

в системе windows, результат выглядит как «userAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, как и Gecko) Chrome/42.0.2311.135 Safari/537.36". Здесь нет языкового стандарта. – chakri

+0

Вы пытались использовать getLocale() для HTTPServletRequest? То есть http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getLocale() –

+0

ya, его некорректно работает – chakri

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) всегда просит, чтобы я дал сайту свое местоположение. Поэтому я могу это отрицать. Строка пользовательского агента всегда существует. Он может быть изменен, но вы всегда сможете получить его. Хотя в этом нет предпочтительного языка, поэтому вам нужен резервный вариант по умолчанию.

Edit: Очевидно, что существует также способ, чтобы получить клиента предпочтительным Locale с HttpServletRequest.getLocale(). According to the docs, который будет читать заголовок HTTP-Accept-Language, что является еще одним способом получить локаль, но также не является обязательным. Если нет языкового стандарта, он просто вернет null.

Итак, до сих пор у вас есть по крайней мере три способа получить вашу информацию. Все зависит от браузера, и вы, к сожалению, не можете положиться на один из них.

+0

Я использую локаль клиента, но результат будет отличаться от одной системы к другой системе в том же месте, тот же адрес ip – chakri

+0

Имеют ли эти системы одни и те же браузеры/ОС? Также Geolocation зависит от близкого WiFis и может быть не совсем корректным. – Zhedar

0

Местоположение и язык - это разные вопросы.

Местоположение (страна, регион и т. Д.) Определяется по IP-адресу. Вы можете геолокацию google через ip java и посмотреть много ссылок. Например, этот: http://www.mkyong.com/java/java-find-location-using-ip-address/

Язык обнаружен из заголовка HTTP. Google «locale from http request» и см. Ссылку. Например: Specifying locale for http request/response

Вскоре HTTP-заголовки Accept-Language и Accept-Charset - ваши друзья.

Смежные вопросы