Ir para conteúdo
Fórum Script Brasil
  • 0

Detectar idioma do Site apartir do ip


Diego Macario

Pergunta

15 respostass a esta questão

Posts Recomendados

  • 0
Olá pessoal, estou com uma duvida, gostaria de implantar no meu site um sistema de detecção de idioma atraves do Ip do usuario,alguém pode me ajudar?

Fico no aguardo

Obrigado

olá tudo bem,

procure a biblioteca geo.ip ela permite a localização geografica mas não é muito confiaves quando se trata de localizaçao especifica.

Link para o comentário
Compartilhar em outros sites

  • 0
olha ai um script que mudifiquei , zipei pra voce , ta no meu server

cybercentro-braganca.pt/~m3io/flags.zip

no exemplo tá o que voce precisa, o resto é so por no server , são as class e as flags

Olha o erro que aparece.

Fatal error: Call to undefined function iptocountry() in /home/rededms/public_html/idioma/exemplo.php on line 4

Link para o comentário
Compartilhar em outros sites

  • 0
Poste o código deste arquivo.

Um abraço.

Segue o Codigo amigo

<?php

$IPaddress=$_SERVER['REMOTE_ADDR'];

$two_letter_country_code=iptocountry($IPaddress);

$three_letter_country_code=$countries[ $two_letter_country_code][0];

$country_name=$countries[$two_letter_country_code][1];

print "Two letters code: $two_letter_country_code<br>";

print "Three letters code: $three_letter_country_code<br>";

print "Country name: $country_name<br>";

$pais = $country_name;

// To display flag

$file_to_check=BASE_HREF."flags/$two_letter_country_code.gif";

if (file_exists($file_to_check)){

//$band = "<img src=$file_to_check width=30 height=15><br>";

$band = "<img src=".$file_to_check." width=\"30\" height=\"15\"><br>";

}else{

$band = "<img src=".BASE_HREF."flags/noflag.gif\" width=\"30\" height=\"15\"><br>";

}

?>

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

esqueci de dizer esse

BASE_HREF que esta ai é o meu site como constante

faca

define("BASE_HREF", "http://seusite.com");

ou simplesmente elimine

$band = "<img src=".BASE_HREF."flags/noflag.gif\" width=\"30\" height=\"15\"><br>";

para

$band = "<img src="flags/noflag.gif\" width=\"30\" height=\"15\"><br>";

Link para o comentário
Compartilhar em outros sites

  • 0

ups, esqueci de passar a funcao pra voce

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){$two_letter_country_code=$ranges[$key][1];break;}
            }
    }
    if ($two_letter_country_code==""){$two_letter_country_code="unkown";}
    return $two_letter_country_code;
}

Link para o comentário
Compartilhar em outros sites

  • 0
esqueci de dizer esse

BASE_HREF que esta ai é o meu site como constante

faca

define("BASE_HREF", "http://seusite.com");

ou simplesmente elimine

$band = "<img src=".BASE_HREF."flags/noflag.gif\" width=\"30\" height=\"15\"><br>";

para

$band = "<img src="flags/noflag.gif\" width=\"30\" height=\"15\"><br>";

Ola amigo segui a sua orientação e modifiquei no codigo mas não obtive sucesso.

<?php

$IPaddress=$_SERVER['REMOTE_ADDR'];

$two_letter_country_code=iptocountry($IPaddress);

$three_letter_country_code=$countries[ $two_letter_country_code][0];

$country_name=$countries[$two_letter_country_code][1];

print "Two letters code: $two_letter_country_code<br>";

print "Three letters code: $three_letter_country_code<br>";

print "Country name: $country_name<br>";

$pais = $country_name;

define (".BASE_HREF.","http://rededms.com.br/idioma/");

// To display flag

$file_to_check=BASE_HREF."flags/$two_letter_country_code.gif";

if (file_exists($file_to_check)){

//$band = "<img src=$file_to_check width=30 height=15><br>";

$band = "<img src=".$file_to_check." width=\"30\" height=\"15\"><br>";

}else{

$band = "<img src=".BASE_HREF."flags/noflag.gif\" width=\"30\" height=\"15\"><br>";

}

?> continua o erro

Fatal error: Call to undefined function iptocountry() in /home/rededms/public_html/idioma/exemplo.php on line 4

Obrigado amigo

Link para o comentário
Compartilhar em outros sites

  • 0
ups, esqueci de passar a funcao pra voce

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){$two_letter_country_code=$ranges[$key][1];break;}
            }
    }
    if ($two_letter_country_code==""){$two_letter_country_code="unkown";}
    return $two_letter_country_code;
}

Amigo desculpe mais minha duvida ainda continua, com o script que você me passou foi possivel detectar o pais do Ip.ficando assim no Browser:

Two letters code: BR

Three letters code:

Country name:

agora como eu faço para o idioma do site ser detectado pelo IP. Ps. ip do Brasil=Idioma=PT, ip dos EUA=Idioma+EN. etc...

aqui esta o link do site[link]http://www.filapremium.info[link] que eu já tenho a vesao EN dele agora tenho que fazer ele detectar pelo ip se é PT ou EN.Entende minha Duvida amigo?

Obrigado fico no aguardo

Link para o comentário
Compartilhar em outros sites

  • 0

tinha tb 2 erros no codigo

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){$two_letter_country_code=$ranges[$key][1];break;}
            }
    }
    if ($two_letter_country_code==""){$two_letter_country_code="unkown";}
    return $two_letter_country_code;
}

define ("BASE_HREF","http://rededms.com.br/idioma/");
$IPaddress=$_SERVER['REMOTE_ADDR']; 
$two_letter_country_code=iptocountry($IPaddress);
$three_letter_country_code=$countries[ $two_letter_country_code][0];
$country_name=$countries[$two_letter_country_code][1];

print "Two letters code: $two_letter_country_code<br>";
print "Three letters code: $three_letter_country_code<br>";
print "Pais: $country_name<br>";
$pais = $country_name;

// To display flag
$file_to_check=BASE_HREF."flags/$two_letter_country_code.gif";
if (file_exists($file_to_check)){
//$band = "<img src=$file_to_check width=30 height=15><br>";
$band = "<img src=".$file_to_check." width=\"30\" height=\"15\"><br>";
}else{
$band = "<img src=".BASE_HREF."flags/noflag.gif\" width=\"30\" height=\"15\"><br>";
}

verifique que a pasta

flags e ip_files estao junto do ficheiro onde voce escreve o script

por exemplo se voce meter o script no index.php

o http://rededms.com.br/index.php fica na mesma directoria que

http://rededms.com.br/ip_files e http://rededms.com.br/flags

Link para o comentário
Compartilhar em outros sites

  • 0
tinha tb 2 erros no codigo

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){$two_letter_country_code=$ranges[$key][1];break;}
            }
    }
    if ($two_letter_country_code==""){$two_letter_country_code="unkown";}
    return $two_letter_country_code;
}

define ("BASE_HREF","http://rededms.com.br/idioma/");
$IPaddress=$_SERVER['REMOTE_ADDR']; 
$two_letter_country_code=iptocountry($IPaddress);
$three_letter_country_code=$countries[ $two_letter_country_code][0];
$country_name=$countries[$two_letter_country_code][1];

print "Two letters code: $two_letter_country_code<br>";
print "Three letters code: $three_letter_country_code<br>";
print "Pais: $country_name<br>";
$pais = $country_name;

// To display flag
$file_to_check=BASE_HREF."flags/$two_letter_country_code.gif";
if (file_exists($file_to_check)){
//$band = "<img src=$file_to_check width=30 height=15><br>";
$band = "<img src=".$file_to_check." width=\"30\" height=\"15\"><br>";
}else{
$band = "<img src=".BASE_HREF."flags/noflag[code]
.gif\" width=\"30\" height=\"15\"><br>"; }

verifique que a pasta

flags e ip_files estao junto do ficheiro onde voce escreve o script

por exemplo se voce meter o script no index.php

o http://rededms.com.br/index.php fica na mesma directoria que

http://rededms.com.br/ip_files e http://rededms.com.br/flags

Como eu disse antes amigo muito obrigado pelo tempo que você tomou tentando me ajudar, mas minha duvida é esta

agora como eu faço para o idioma do site ser detectado pelo IP. Ps. ip do Brasil=Idioma=PT, ip dos EUA=Idioma+EN. etc...

aqui esta o link do site http://www.filapremium.info que eu já tenho a vesao EN dele agora tenho que fazer ele detectar pelo ip se é PT ou EN.Entende minha Duvida amigo?

Obrigado fico no aguardo

Link para o comentário
Compartilhar em outros sites

  • 0

$two_letter_country_code=iptocountry($IPaddress);

$three_letter_country_code=$countries[ $two_letter_country_code][0];

$country_name=$countries[$two_letter_country_code][1];

echo $two_letter_country_code ////// ex: PT, BR, EN, US

echo $three_letter_country_code ///// ex: PTB

echo $country_name ////ex: Portugal, Brasil, Espanha

é isso que ele faz se te ajudar

Link para o comentário
Compartilhar em outros sites

  • 0

mudei o código para fazer o que você quer

no exemplo.php

<?php

    include('ip_files/countries.php');
    function iptocountry($ip) {
        $numbers = preg_split( "/\./", $ip);
        $numbers[0] =(int)$numbers[0];
        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){$two_letter_country_code=$ranges[$key][1];break;}
                }
        }
        if ($two_letter_country_code==""){$two_letter_country_code="unkown";}
        return $two_letter_country_code;
    }
    $IPaddress=$_SERVER['REMOTE_ADDR'];
    //$IPaddress="186.205.6.60"; 
    $two_letter_country_code=iptocountry($IPaddress);
    $three_letter_country_code=$countries[ $two_letter_country_code][0];
    $country_name=$countries[$two_letter_country_code][1];
    $country_lang=$countries[$two_letter_country_code][2];
    $country_lang_long=$countries[$two_letter_country_code][3];
    if(!isset($country_lang)){
        $country_lang="en";
        $country_lang_long="en_US";
    }
    print "IP: $IPaddress<br>";
    print "Two letters code: $two_letter_country_code<br>";
    print "Three letters code: $three_letter_country_code<br>";
    print "Country name: $country_name<br>";
    print "Country language: $country_lang<br>";
    print "Country language long: $country_lang_long<br>";
    $pais = $country_name;
    // To display flag
    $file_to_check="flags/$two_letter_country_code.gif";
    if (file_exists($file_to_check)){
           $band = "<img src=".$file_to_check." width=\"30\" height=\"15\"><br>";
    }else{
              $band = "<img src=\"flags/noflag.gif\" width=\"30\" height=\"15\"><br>";
    }
    echo "Flag: ".$band;
?>
para funcionar corretamente você deve incluir os códigos de idioma que deseja usar para os países no arquivo /ip_files/countries.php exemplo na linha do Brasil: está assim:
"BR" => array("BRA","Brazil"),
inclua os idiomas
"BR" => array("BRA","Brazil","pt","pt_BR"),

faça isso para os países que quiser especificar o idioma.

os países que estiverem sem esses dados automaticamente receberão o idioma inglês dos USA

se quizer baixar os arquivos modificados lá vai. http://www.mediafire.com/download.php?9wzwati1qenfs49

Abraços a todos! :rolleyes:

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...