Page redirection according to access country

1

I have 2 PHP pages, one in Portuguese and the other in English, and would like the user to be redirected automatically to English, if access were outside Brazil. There must be a way ? Or the most effective solution is to create a link to the page in English, as it has on many websites.

    
asked by anonymous 29.07.2016 / 14:24

5 answers

1

Depending on your version of PHP, read the PHP documentation on Class location

    
29.07.2016 / 14:52
1

You can use an API, in this case I used link , and do:

// descobrir o ip do utilizador
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'];
}

$ip_test = '97.162.48.46';
$local_json = @file_get_contents('http://ip-api.com/json/' .$ip_test); // aqui usa o $ip, este é só para teste

$countries_en = array('gb', 'us'); // definir codigo iso2 dos paises para os quais o site será apresentado em inglês
$lang = 'pt'; // linguagem default
if($local_json !== false) {
    $local_array = json_decode($local_json, true);
    if($local_array !== null && isset($local_array['countryCode'])) {
        if(in_array(strtolower($local_array['countryCode']), $countries_en)) {
            $lang = 'en'; // definir site com a linguagem Inglês
        }
    }
}
echo $lang; // en, pois o país (neste exemplo) são os EUA, cujo código é US, está dentro do nosso array $countries_en

Note that on production server instead of $ip_test it uses $ip

    
29.07.2016 / 14:52
1

You can use the $ _SERVER ["HTTP_ACCEPT_LANGUAGE"] of php. It carries information sent from the browser.

<?php
 echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
 // pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4,gl;q=0.2

$arralang = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang = $arrlang[0];

switch ($lang) {
    case 'pt-BR':
      // redireciona para página em português
      break;
    case 'en-US':
    case 'en':
      // redireciona para página em inglês
      break;
    default:
      // redireciona para página em português
 }
    
29.07.2016 / 14:43
0

You can also use this alternative, redirecting to default or language, if any.

echo $_SERVER['HTTP_ACCEPT_LANGUAGE']; // pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4,gl;q=0.2     

$arrlang = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang = $arrlang[0];
$default_lang = "pt-br";

if(isset($lang)){
     header("Location: url/".$lang);
} else {
     header("Location: url/".$default_lang);
}
    
29.07.2016 / 15:02
0

One way to do this is to use an API that identifies the country, see the example below:

function isBrazil() {
    $location = file_get_contents('http://freegeoip.net/json/');
    if ($location) {
       $data = json_decode($location, true);
       if ($data['country_name'] == 'Brazil') {
          return true;
       }
    }
    return false;
}

if (isBrazil()) {
   header('Location: pagina-brasil.php');
} else {
   header('Location: pagina-ingles.php');
}

Or if you just want to redirect out ...

 if (!isBrazil()) {
    header('Location: pagina-ingles.php');
 } 
    
29.07.2016 / 21:01