2011-03-05 20 views
5

Necesito detectar el país del usuario y mostrar el idioma del sitio web por su país. (Turco para los turcos, inglés para todos los demás)Forma más rápida de detectar el país del usuario

¿Cómo puedo hacer esto de la manera más rápida? El rendimiento es importante para mí.

Estoy buscando IPInfoDB' API, ¿hay alguna alternativa mejor?

(estoy usando PHP)

+6

es casi seguro que desea utilizar la configuración de idioma preferida del navegador en lugar de tratar de averiguar dónde se encuentra el usuario. – geoffspear

+3

Al igual que el comentario de @ Wooble: esta no es una buena idea. Vivo en Canadá, ¿cuál es mi idioma preferido? Si soy de Quebec podría ser francés, o podría ser italiano o alemán ... donde vivo no determina mi idioma preferido. Si lo desea, puede agregar un enlace que le permita al usuario cambiar al idioma que "cree" que desea. por ejemplo: Préférez français? – scunliffe

+0

"¿Cómo puedo hacer esto de la manera más rápida?" Es incorrecto. Debería hacer esto * una vez * por visita y establecer una cookie. Y permita que las personas anulen su configuración predeterminada. – bart

Respuesta

3

Puede utilizar la API aquí http://www.hostip.info/use.html si está de acuerdo en confiar en un sitio externo.

También puede utilizar el GeoIP PHP API

Por supuesto, la aplicación de la órbita de script vinculado sólo podría ahorrar la molestia de ir a través de la API.

Buena suerte.

1

Como han señalado otros, probablemente sería una mejor idea consultar el Accept-Language encabezado HTTP para turco. Si es el idioma preferido, preséntalo. De lo contrario, sirve inglés. Aquí está some code.

2

La mejor manera de hacer esto que he encontrado es usar el "GAE-IP-A-PAÍS" biblioteca: https://github.com/andris9/GAE-IP-TO-COUNTRY/tree/master/src/ip_files

Ejemplo de uso (lo que tienes que copiar el directorio "ip_files" a su servidor) :

function iptocountry($ip) {  
    $numbers = preg_split("/\./", $ip);  
    include("./ip_files/".$numbers[0].".php"); 
    $code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]);  
    foreach($ranges as $key => $value){ 
     if($key<=$code){ 
      if($ranges[$key][0]>=$code){$country=$ranges[$key][1];break;} 
     } 
    } 
    return $country; 
} 

$country=iptocountry($_SERVER['REMOTE_ADDR']); 
echo $country; 
0

I codificados usando el siguiente material Accept-Language otros usuarios señalaron:

function GetAcceptedLangs() 
{ 
    $res=array(); 
    $a=getallheaders(); 
    if(isset($a["Accept-Language"])) 
    { 
     $aceptlangs=explode(",",str_replace(array(';','0','1','2','3','4','5','6','7','8','9','.',"q="),array(',','','','','','','','','','','','',""),$a["Accept-Language"])); 
     foreach($aceptlangs as $i=>$v) 
     { 
      if(trim($v)!="") 
       $res[]=trim($v); 
     } 
    } 
    return $res; 
} 

Un simple

print_r(GetAcceptedLangs()); 

regreso en mi caso:

Array ([0] => es-ES [1] => es [2] => en) 

Puede después de definir una matriz como ésta para cambiar al valor de su lenguaje interno, por ejemplo:

$al={"ES-es"=>"es","es"=>"es","en"=>"en"......} 

Ya están ordenados por preferencias de usuario.

Si no existen todos los idiomas en la matriz, puede ir al idioma predeterminado de su sitio web. Esto también es válido si el navegador no envía el encabezado Aceptar idioma.

Otra versión de retirar la subregión valores

function GetAcceptedLangs2() 
{ 
    $res=array(); 
    $a=getallheaders(); 
    if(isset($a["Accept-Language"])) 
    { 
     $aceptlangs=explode(",",str_replace(array(';','0','1','2','3','4','5','6','7','8','9','.',"q="),array(',','','','','','','','','','','','',""),$a["Accept-Language"])); 
     foreach($aceptlangs as $i=>$v) 
     { 
      $va=trim($v); 
      if(($pos=strpos($va,"-"))!==false) 
       $l=substr($va,0,$pos); 
      else 
       $l=$va; 
      if($l!="" && !isset($check[$l])) 
      { 
       $check[$l]=1; 
       $res[]=$l; 
      } 
     } 
    } 
    return $res; 
} 

volvería en mi caso

Array ([0] => es [1] => en) 
1

Bueno para la gente que puede visitar en 2017 se trata de una solución de este extremadamente fácil de usar

<button class="btn dropdown-toggle" style="cursor:pointer;z-index:1000!important;margin-top:-67px;background:none!important;font-size:1.4em;" onclick="window.location.href='language'"> 
(a) <?php 
if (!empty($_SERVER['HTTP_CLIENT_IP'])) { 
$ip = $_SERVER['HTTP_CLIENT_IP'];} 
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
$ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
} else { 
$ip = $_SERVER['REMOTE_ADDR']; 
} 
$url = "http://api.wipmania.com/".$ip; 
(h) $country = file_get_contents($url); //ISO code for Nigeria it is NG check your country ISO code 
?> 

<?php if ($country == ""){ 
echo "Country not found"; 
} else { ?> 
<script> 
var map = "<?php echo $country ?>"; 
$.ajax({ 
type : 'POST', 
url : 'http://www.mowemy.com/countryflag.php', 
data : {map: map}, 
success : function(r) { 
//console.log("success: " + r); 
$('#mumil').html(r); 
} }) 
</script> 
<?php } ?> 

<div id ="mumil" style="font-size:13px!important;margin-top:5px;"></div> 
</button> 

permítanme escribirles la letra A - H es la secuencia de comandos para detectar su número ISO para la co untry para mi país Nigeria es NG puede buscar en Google el número ISO de su país, con este script se detecta automáticamente. Entonces creé una página con algo de información que el fuego AJAX a esa página que se envía de nuevo el color de bandera del país y el nombre simple y fácil POR FAVOR LLAME JQUERY ANTES AJAX CORRER EL AJAX MENOS lo puedo trabajar GOODLUCK

0

Aquí está el manera directa me gusta usar

<?php 
class GeoIp 
{ 
    protected $api = 'https://ipapi.co/%s/json/'; 

    protected $properties = []; 

    //------------------------------------------------------ 
    /** 
    * __get 
    * 
    * @access public 
    * - @param $key string 
    * - @return string/bool 
    */ 
    public function __get($key) 
    { 
     if(isset($this->properties[$key])) 
     { 
      return $this->properties[$key]; 
     } 

     return null; 
    } 

    //------------------------------------------------------ 
    /** 
    * request_geoip 
    * 
    * @access public 
    * - @return void 
    */ 
    public function request_geoip($ip) 
    { 
     $url = sprintf($this->api, $ip); 
     $data = $this->send_geoip_request($url); 
     $this->properties = json_decode($data, true); 
     //var_dump($this->properties); 
    } 

    //------------------------------------------------------ 
    /** 
    * send_geoip_request 
    * 
    * @access public 
    * - @param $url string 
    * - @return json 
    */ 
    public function send_geoip_request($url) 
    { 
     $loc_content = file_get_contents($url); 

     return $loc_content; 
    } 
} 

//You can access it like this: 
$geo = new GeoIp; 
$geo->request_geoip('foo'); 
echo $geo->country; 

?> 

Visita this website para obtener más información

Cuestiones relacionadas