Получить язык посетителей и код страны с javascript (на стороне клиента) [дубликат]

этот вопрос уже есть ответ здесь:

вопрос: есть ли код javascript (на стороне клиента) для получения кода страны/языка посетителей, который является точным и кросс-"современным"браузером ? Я ищу результаты как 'en-US', 'sv-SE', 'nl-NL', etc.

связанные с этим вопросы задавались раньше (некоторые ссылки SO:1,2,3,4, среди других), но я не нашел ответа, и некоторые из ответов-это несколько лет, а в некоторых случаях ссылаются на еще более старые статьи, Что заставляет меня думать, что для этого есть новые решения.

пробовал :

var language = window.navigator.userLanguage || window.navigator.language;
console.log(language);

и получил "sv" в Chrome и "en-GB" в Firefox, в та же машина, то же место.

3 ответов


navigator.language не является надежным, как один из ваших связанных государств вопросов.

причина, по которой об этом много спрашивают, но вы все еще ищете, говорит что-то о проблеме. Это обнаружение языка чисто на стороне клиента нет ничего близкого к надежным.

прежде всего языковые предпочтения должны использоваться только для определения языковых предпочтений-т. е. не местоположения. Мой браузер настроен на en_US, потому что я хотел английскую версию. Но я в Великобритании., так что придется изменить это на en_GB чтобы моя страна была обнаружена через настройки моего браузера. Как "клиент" это не моя проблема. Это нормально для языка, но не хорошо, если все цены на сайте в долларах США.

до определения языка вам действительно нужен доступ к скрипту на стороне сервера. Если вы не являетесь сторонним разработчиком и хотите сделать как можно больше на стороне клиента( как ваш вопрос), все, что вам нужно, это одна строка PHP-скрипта, который повторяет Принять-Язык заголовок. В простейшем случае это может быть:

<?php
echo $_SERVER['HTTP_ACCEPT_LANGUAGE']; 
// e.g. "en-US,en;q=0.8"

вы можете получить это через Ajax и проанализировать текстовый ответ на стороне клиента, e.g (используя 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;

используя jQuery для вашего Ajax, вы сделаете что-то вроде:

function myCallback( raw ){
    var prefs = raw.split(',');
    // process language codes ....
}
$.ajax( {
    url: 'http://some.domain/script.php',
    dataType: 'jsonp'
} );

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

чтобы сделать невидимо, вы ограничены обнаружения гео IP. По той же причине, что и выше, не используйте язык означает страна любой.

чтобы сделать обнаружение страны на стороне клиента, вам также понадобится серверная служба для получения IP-адреса клиента и доступа к базе данных сопоставлений IP/location. клиент JavaScript GeoIP2 Maxmind похоже, все это обернется для вас клиентским пакетом, поэтому вам не понадобится собственный сервер (хотя я уверен, что он будет использовать удаленную службу jsonp). Есть также freegeoip.net, что, вероятно, меньше хлопот, чем MaxMind с точки зрения регистрация, и, похоже, с открытым исходным кодом тоже.


используя jQuery, эта строка отобразит код страны вашего пользователя.

  $.getJSON('https://freegeoip.net/json/', function(result) {
    alert(result.country_code);
  });

получаете Код страны ipdata.сотрудничество

этот ответ использует "тестовый" ключ API, который очень ограничен и предназначен только для тестирования нескольких вызовов. Регистрация для вашего собственного бесплатного ключа API и получите до 1500 запросов ежедневно для разработки.

$.get("https://api.ipdata.co?api-key=test", function (response) {
    $("#response").html(response.country_code);
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="response"></pre>