Obtenez le code de langue et de pays des visiteurs avec javascript (côté client) [dupliquer]

cette question a déjà une réponse ici:

  • meilleure façon de déterminer la localisation de l'utilisateur dans le navigateur 6 réponses

Question: y a-t-il un code javascript (côté client) pour obtenir le code du pays/de la langue du visiteur, qui est précis et est navigateur"moderne"? Je cherche des résultats comme 'en-US' , 'sv-SE' , 'nl-NL' , etc.

des questions connexes à ceci ont été posées avant (certains liens SO: 1 , 2 , 3 , 4 , entre autres) mais je n'ai pas trouvé de réponse et certaines réponses sont vieilles d'un an et dans certains cas se référant à des articles encore plus anciens, ce qui me fait penser qu'il y a de nouveaux des solutions pour cela.

j'ai essayé:

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

et a obtenu "sv" en Chrome et "en-GB" En Firefox, dans la même machine, au même endroit.

24
demandé sur Community 2013-07-16 19:11:26

3 réponses

navigator.language n'est pas fiable comme le dit une de vos questions liées.

la raison pour laquelle cela est demandé beaucoup, mais vous cherchez toujours dit quelque chose sur le problème. Que la détection de langage purement du côté du client n'est pas du tout proche de fiable.

tout d'abord, les préférences linguistiques ne doivent être utilisées que pour détecter les préférences linguistiques - c'est-à-dire pas l'emplacement. Mon navigateur est défini à en_US , parce que je je voulais la version anglaise. Mais je suis au Royaume-Uni, donc je devrais modifier ça en en_GB pour que mon pays soit détecté via les paramètres de mon navigateur. Comme le "client" qui n'est pas mon problème. C'est très bien pour la langue, mais pas bon si tous les prix sur votre site sont en dollars américains.

À détecter la langue vous avez vraiment besoin d'avoir accès à un serveur de script côté. Si vous n'êtes pas un dev back end et que vous voulez en faire autant que possible du côté du client (comme votre question), tout ce dont vous avez besoin est un script PHP d'une ligne qui renvoie l'en-tête Accept-Language . Dans sa forme la plus simple, il pourrait simplement être:

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

vous pouvez obtenir cela via Ajax et analyser la réponse du côté du client, E. g (utilisant jQuery):

$.ajax( { url: 'script.php', success: function(raw){
    var prefs = raw.split(',');
    // process language codes ....
} } );

si vous étiez capable de générer votre HTML via une extrémité arrière, vous pourriez éviter D'utiliser Ajax complètement en imprimant simplement les préférences de langue dans votre page, par exemple

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

si vous n'aviez pas accès au serveur mais que vous pouviez obtenir un script sur un autre serveur, un simple service JSONP ressemblerait à:

<?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;

en utilisant jQuery pour votre Ajax vous feriez quelque chose comme:

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

Pays "de détection des 1519180920" est une autre affaire. Du côté client ,il y a le navigateur .géolocalisation , mais il sera très probablement demander à votre utilisateur pour la permission, donc pas bon pour une expérience utilisateur transparente.

pour faire invisiblement, vous êtes limité à la détection D'IP géo. De la même manière que ci-dessus, ne pas utiliser de langage implique pays.

pour effectuer la détection de pays du côté du client, vous aurez également besoin d'un service back end afin d'obtenir l'adresse IP du client et d'accéder à une base de données de correspondances IP/localisation. client JavaScript GeoIP2 de Maxmind semble envelopper tout cela dans un paquet côté client pour vous, donc vous n'aurez pas besoin de votre propre serveur (même si je suis sûr qu'il utilisera un service JSONP distant). Il y a aussi freegeoip.net , qui est probablement moins embêtant que MaxMind en termes d'inscription, et il semble être open source aussi.

19
répondu Tim 2013-07-17 09:59:59

en utilisant jQuery, cette ligne affichera le code de pays de votre utilisateur.

  $.getJSON('https://freegeoip.net/json/', function(result) {
    alert(result.country_code);
  });
43
répondu Sean McClory 2018-03-16 04:23:09

obtenir le Code de pays avec ipdata.co

cette réponse utilise une clé API 'test' qui est très limitée et qui ne sert qu'à tester quelques appels. S'inscrire pour votre propre clé API gratuite et obtenir jusqu'à 1500 demandes par jour pour le développement.

$.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>
5
répondu Jonathan 2018-08-29 14:04:51