que - Obtenga el idioma y el código de país de los visitantes con javascript(del lado del cliente)
codigo javascript (3)
Con jQuery, esta línea mostrará el código de país de su usuario.
$.getJSON(''https://freegeoip.net/json/'', function(result) {
alert(result.country_code);
});
Esta pregunta ya tiene una respuesta aquí:
Pregunta: ¿Existe un código javascript (del lado del cliente) para obtener el código de país / idioma de los visitantes, que sea preciso y sea cruzado con el navegador "moderno"? Estoy buscando resultados como ''en-US''
, ''sv-SE''
, ''nl-NL''
, etc.
Preguntas relacionadas con esto han sido formuladas anteriormente (algunos enlaces SO: 1 , 2 , 3 , 4 , entre otros) pero no encontré la respuesta y algunas de las respuestas tienen algunos años y, en algunos casos, se refieren a artículos aún más antiguos , lo que me hace pensar que hay nuevas soluciones para esto.
Lo intenté :
var language = window.navigator.userLanguage || window.navigator.language;
console.log(language);
y obtuve "sv"
en Chrome y "en-GB"
en Firefox, en la misma máquina, en el mismo lugar.
Obteniendo el Código de País con ipdata.co
Esta respuesta utiliza una clave de API de ''prueba'' que es muy limitada y solo para probar algunas llamadas. Regístrese para obtener su propia clave de API gratuita y reciba hasta 1500 solicitudes diarias para el desarrollo.
$.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>
navigator.language
no es confiable como indica una de sus preguntas vinculadas.
La razón por la que esto se pregunta mucho, pero todavía estás buscando, dice algo sobre el problema. Que la detección de lenguaje puramente en el lado del cliente no es nada confiable.
En primer lugar, las preferencias de idioma solo deben usarse para detectar las preferencias de idioma, es decir, no la ubicación. Mi navegador está configurado para en_US
, porque quería la versión en inglés. Pero estoy en el Reino Unido, así que tendría que cambiar esto a en_GB
para que mi país sea detectado a través de la configuración de mi navegador. Como el ''cliente'' no es mi problema. Eso está bien para el idioma, pero no es bueno si todos los precios en su sitio están en $ USD.
Para detectar el idioma , realmente necesita acceso a un script del lado del servidor. Si no es un dev de back-end y desea hacer todo lo posible en el lado del cliente (como su pregunta), todo lo que necesita es un script PHP de una línea que devuelva el encabezado Accept-Language . En su forma más simple podría ser:
<?php
echo $_SERVER[''HTTP_ACCEPT_LANGUAGE''];
// e.g. "en-US,en;q=0.8"
Puede obtener esto a través de Ajax y analizar el lado del cliente de respuesta de texto, por ejemplo (utilizando jQuery):
$.ajax( { url: ''script.php'', success: function(raw){
var prefs = raw.split('','');
// process language codes ....
} } );
Si pudiera generar su HTML a través de un back-end, podría evitar usar Ajax completamente simplemente imprimiendo las preferencias de idioma en su página, por ejemplo
<script>
var prefs = <?php echo json_encode($_SERVER[''HTTP_ACCEPT_LANGUAGE''])?>;
</script>
Si no tuviera acceso al servidor pero pudiera obtener un script en otro servidor, un simple servicio JSONP se vería así:
<?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;
Usando jQuery para tu Ajax harías algo como:
function myCallback( raw ){
var prefs = raw.split('','');
// process language codes ....
}
$.ajax( {
url: ''http://some.domain/script.php'',
dataType: ''jsonp''
} );
La detección del país es otro asunto. En el lado del cliente hay navigator.geolocation , pero lo más probable es que solicite permiso a su usuario, por lo que no es bueno para una experiencia de usuario perfecta.
Para hacerlo de forma invisible, estás limitado a la detección de geo IP. De la misma manera que la anterior, tampoco use el idioma para indicar país.
Para realizar la detección de país en el lado del cliente, también necesitará un servicio de back-end para obtener la dirección IP del cliente y acceder a una base de datos de asignaciones de ubicación / IP. El cliente GeoIP2 JavaScript de Maxmind parece envolver todo esto en un paquete del lado del cliente para usted, por lo que no necesitará su propio servidor (aunque estoy seguro de que utilizará un servicio jsonp remoto). También hay freegeoip.net , que probablemente sea menos problemático que MaxMind en términos de inscripción, y parece ser también de código abierto.