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

Detectar País Do Visitante.


taniamariamom

Pergunta

Olá amigos,

Estou criando uma página para o brasil e para portugal. No caso seriam duas paginas distintas... uma chamada brasil.php e outra portugal.php.

Pesquisando na internet descobri que atraves do comando

$_SERVER['HTTP_ACCEPT_LANGUAGE']
consigo detectar o idioma do visitante, sendo retornado pt-br para o brasil e (acho) pt-pt para portugal.

Como faço para que a página index.php pegue o idioma do visitante e no caso de ser portugues do brasil redireciona ele para a página brasil.php, no caso de ser portugues de portugal redireciona para portugal.php ou no caso de não ser nenhum dos dois redireciona para index.php?pais=(o que retornou no comando citado acima).

Gostaria de sabar o que devo inserir na index.php para criar as paginas index.php?pais=(idioma do pais) e como devo criar estas paginas. Também gostaria de saber se teria como eu criar uma pagina unica para todos os outros paises mas na hora em que fossem acessadas por determinado pais exibisse o nome do pais a partir do idioma que é informado em index.php?pais=(idioma), tipo assim: "Detectamos que seu pais é (nome do pais), porem não suportamos este pais. Selecione um pais abaixo:"

Aguardo resposta,

Até Mais

Link para o comentário
Compartilhar em outros sites

20 respostass a esta questão

Posts Recomendados

  • 0

você usa if...

<?php
if (condição) { instrução }
else { instrução }
?>
no seu caso:
<?php
if ($_SERVER['HTTP_ACCEPT_LANGUAGE']=="pt-br"){ header("Location: brasil.php");}
elseif (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2)=="pt"){ header("Location: portugal.php");}
else{ header("Location: index.php?pais=".$_SERVER['HTTP_ACCEPT_LANGUAGE']); }
?>
Aviso: se for colocar isso no index.php vai cair num loop. então coloque:
<?php
if(!$_GET['pais']){
if ($_SERVER['HTTP_ACCEPT_LANGUAGE']=="pt-br"){ header("Location: brasil.php");}
elseif (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2)=="pt"){ header("Location: portugal.php");}
else{ header("Location: index.php?pais=".$_SERVER['HTTP_ACCEPT_LANGUAGE']); }
}
?>

como eu também não tenho certeza se é pt-pt também, eu limitei apenas as 2 primeiras letras...

me corijàm se eu estiver errado :D ;)

Link para o comentário
Compartilhar em outros sites

  • 0

sim é um sub-string..

$receptor=substr("valor", inicio, tamanho);

$idioma=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

//resultado : $idioma = "pt" (se estiver no brasil ou em portugal)

ai você pergunta: mas pt também é portugal; e eu respondo: mas ele vai ver primeiro se é brasileiro pela condição anterior.

Início

|Se idioma="pt-br" Então vá para "brasil.php";

|Senão

||Se as duas primeiras letras do idioma="pt" Então vá para "portugal.php";

||Senão vá para "index.php?pais="+idioma;

||Fim-Se

|Fim-Se

Fim

entendeu?

responderam enquanto eu estava pintando ^^

ah, o tamanho é opcional

Link para o comentário
Compartilhar em outros sites

  • 0

Isso valeu, esqueci de dizer que o tamanho era opcional :P to ficando caduco...

Buenas, Amon-rá_beraldo como tu podes ver ali no exemplo do José quando ele executou o "script" retornou apenas as duas primeiras letras da string... bom, foi nisso aí que ele limitou pra localizar a string somente nos primeiros dois caracteres (start = 0 e length = 2) da string maior (que possui um length = 5)...

sacou???

Link para o comentário
Compartilhar em outros sites

  • 0

jose.rob.jr, obrigado pela resposta, porém quando fui testar no servidor que uso para testes, ocorreu o seguinte erro:

Warning: Cannot modify header information - headers already sent by (output started at /var/www/virtual/codigoonline.byethost11.com/htdocs/teste_detecta.php:11) in /var/www/virtual/codigoonline.byethost11.com/htdocs/teste_detecta.php on line 13

o meu codigo e este:

<html>

<head>

<meta http-equiv="Content-Language" content="pt-br">

<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

<meta name="ProgId" content="FrontPage.Editor.Document">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

<title>TESTE</title>

</head>

<body>

<?php

if(!$_GET['pais']){

if ($_SERVER['HTTP_ACCEPT_LANGUAGE']==pt-br"){ header("Location: brasil.php");}

elseif (substr($_SERVER['HTTP_ACCEPT_LANGUAGE],0,2)=="pt"){ header("Location: portugal.php");}

else{ header("Location: index.php?pais=".$_SERVER['HTTP_ACCEPT_LANGUAGE']); }

}

?>

</body>

</html>

Também, até agora só consegui resposta para minha pirmeira duvida. E quanto a segunda alguém saberia responder?

Até mais!

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, tu não pode usar a função header() se tu tiveres alguma saída para o navegador antes... seja em php (echo, print...) ou em html... por isso que está ocorrendo esse Warning.

Bom, quanto a tua dúvida, cara, se tu queres que o teu site sejá iniciado já com a query string(?pais=(nome do pais)) isso só é possível se teu site for acessado através de link, onde tu configure assim... derrepente com alguma configuração de alias de domínio no servidor tu consegue, eu nunca tentei.

Agora, pra interpretar a linguagem e setar a página correspondente tu já sabe ;)

Abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

oi taniamariamom,

o que ele quis dizer é que header, como ele mesmo diz, é um cabeçalho, e todo o cabeçalho deve vim antes do texto.

Como no computador 1 bit faz muita diferença, você não pode mandar um "a" pro cliente. por exemplo:

a<?php header("Location: asd.php"); ?>
ou
 <?php header("Location: asd.php");?>

repare que tem um espaço antes de <?php

estes código vai dar o erro descrito porque o cabeçalho já foi enviado e já está enviando a página. entendeu?

ps: o scriptbrasil apago o espaço do exemplo sozinhp <_<

Link para o comentário
Compartilhar em outros sites

  • 0

depende, você pode reorganizar o começo pra mandar algo só depois.

exemplo:

<html><head><title>Teste</title></head><body>
Bom dia <?php echo $nomedousuario; 
//codigo
//fonte
if ($logado) header("Location: entrar.php");
?>
</body></html>
==========
Resultado: Warning: Headers alread send (um trosso assim  :D )

vamo arruma?
========
<?php 
//codigo
//fonte
if (!$logado) header("Location: entrar.php");
?>
<html><head><title>Teste</title></head><body>
Bom dia <?php echo $nomedousuario;?>
</body></html>
============
ou se preferir:
===========
<?php 
if (!$logado) header("Location: entrar.php");
$html="<html><head><title>Teste</title></head><body>
Bom dia $nomedousuario";
//codigo
//fonte
$html.="</body></html>";
$echo $html;
?>

é tipo isso.....

se ainda não entendeu fala....

eu acho que eu compliquei d + :P

Link para o comentário
Compartilhar em outros sites

  • 0

jose.rob.jr, não foi complicada sua resposta não. fiz o seguinte: peguei o codigo php e no final dele coloquei o codigo html com as tags head e body. funcionou perfeitamente. muito obrigado.

porem, ainda não consegui resposta para minha segunda pergunta que é:

Gostaria de saber o que devo inserir na index.php para criar as paginas index.php?pais=(idioma do pais) e como devo criar estas paginas. Também gostaria de saber se teria como eu criar uma pagina unica para todos os outros paises mas na hora em que fossem acessadas por determinado pais exibisse o nome do pais a partir do idioma que é informado em index.php?pais=(idioma), tipo assim: "Detectamos que seu pais é (nome do pais), porem não suportamos este pais. Selecione um pais abaixo:"

se algum membro souber a resposta poste aqui por gentileza

até mais!

Link para o comentário
Compartilhar em outros sites

  • 0

você pode pegar a idéia do phpbb

assim, você cria um arquivo com tudo o que você vai falar.

por ex: /idiomas/idioma_pt-br.php

ai você pode por:

<?php

$pais=(isset($_GET['pais'])?false:$_GET['pais']);


switch ($pais){
case "pt-br":
$pais_nome="Brasil";
break;
case "pt-pt":
$pais_nome="Portugal";
break;
case "en":
$pais_nome="U.S.A.";
break;
}
/**********************************************/
/******não tenho certeza das siglas!!!***************/
/**********************************************/
if($pais){
if(file_exists("idiomas/idioma_$pais.php")){
include("idiomas/idioma_$pais.php");
}
else{
include(include("idiomas/idioma_padrao.php");)
}
}
?>
<html>
<head>
<title><?=$fala['titulo']?></title>
<body>
<p><?=$fala['bem_vindo'].$fala['pais']?></p>
</body>
</html>
no arquivo "idiomas/idioma_pt-br.php" pode ter por ex.:
<?php
$fala['titulo']="Página de teste";
$fala['bem_vindo']="Bem vindo a minha página!";
$fala['pais']="Você mora n".(substr($pais_nome,strlen($pais_nome),1)=="a"?"a":"o")." $pais_nome.";
?>
no arquivo "idiomas/idioma_en.php" pode ter por ex.:
<?php
$fala['titulo']="Test Page";
$fala['bem_vindo']="Welcome to my page!";
$fala['pais']="You live in $pais_nome.";
?>
e no arquivo "idiomas/idioma_padrao.php" o redirecionamento:
<?php include("idiomas/idioma_en.php"); /*o idioma + conhecido é inglês*/?>

isso é um exemplo, com certeza tem alguém com uma idéia melhor :)

Link para o comentário
Compartilhar em outros sites

  • 0

jose.rob.jr, tenho algumas duvidas:

1 - O primeiro codigo deve ser inserido na index.php, junto com o codigo de detecção do pais (que voce já me passou) ou tenho que inserir somente esse codigo e apagar o codigo de detecção do pais que inseri no inicio da página e que redireciona a mesma?

2 - No caso voce usou os endereços das páginas como "idioma_pt-br.php", ou seja, seguindo o padrão idioma_(sigla do idioma).php. Eu gostaria de saber se posso fazer seguindo esse padrão: index.php?pais=(sigla do idioma) e como faço para criar páginas com esse padrão?

Aguardo resposta,

Até Logo!

Link para o comentário
Compartilhar em outros sites

  • 0

ai, jose, gostei do seu exemplo de traducao com variaveis, eu fiz um esquema mas era com imagens, onde so trocava o diretorio das imagens, como era apenas texto, as imagens ficaram pequenas e rodavam normalmente. esse metodo é bem mais pratico e ate acho mais correto.

mas minha duvida é o seguinte, conforme o volume de variaveis na pagina, isso não demoraria mais pra o server processar a pagina?

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...