tomassantos Posted February 18, 2009 at 09:28 PM Report Share #245432 Posted February 18, 2009 at 09:28 PM Queria saber em que é que se baseia para redireccionar, ao idioma do browser, Sistema Operativo? Qual dos dois é melhor ou recomendam-me outro mais fiável? E queria saber como é que funciona aos olhos dos bots dos motores de busca, eles vão indexar como primeira página o pt ou en? Se estivesse no Brasil ou em Portugal enviava para a página em português, se estivesse noutro país enviava para a página em português. Link to comment Share on other sites More sharing options...
scorch Posted February 18, 2009 at 09:36 PM Report Share #245433 Posted February 18, 2009 at 09:36 PM Se estivesse no Brasil ou em Portugal enviava para a página em português, se estivesse noutro país enviava para a página em português. Repetiste o Português. $_SERVER['HTTP_USER_AGENT']; Este código retorna informações sobre o browser, entre elas a linguagem do browser. http://pt2.php.net/manual/pt_BR/reserved.variables.server.php 😛 PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
scorch Posted February 18, 2009 at 10:49 PM Report Share #245451 Posted February 18, 2009 at 10:49 PM Deve ficar: O array $_LANG és tu que crias para identificares se essa linguagem existe no teu site. Depois tens de criares os ficheiros (Ex: pt.php, en.php) $explode_um = explode('[', $_SERVER['HTTP_USER_AGENT']); $explode_dois = explode(']', $explode_um['1']); $lang = $explode_dois['0']; $_LANG['pt'] = 'portuguese'; $_LANG['en'] = 'english'; if ($_LANG[$lang] != null){ header('Location: '.$lang.'.php'); } else { header('Location: default.php'); } Não testei, mas em principio funciona. PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
infopc Posted February 18, 2009 at 11:17 PM Report Share #245462 Posted February 18, 2009 at 11:17 PM o explode divide uma string em index de array sempre que ocorre um determinado caracter (ou varios) imagina a string $str = "olá mundo, viva o php"; executando a função $arr = explode(",",$str); ficas com um array com dois index $arr[0] = "olá mundo" e $arr[1] = "viva o php" . no teu caso em particular vai dividir a strin sempre que ocorrer um "[" e depois um "]" O que não tem solução, solucionado esta... Link to comment Share on other sites More sharing options...
softklin Posted February 19, 2009 at 09:52 AM Report Share #245496 Posted February 19, 2009 at 09:52 AM Fica aqui de referência outro snippet que recolhe o primeiro idioma definido na lista $idioma = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) Depois é só fazer utilizar os métodos já descritos. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
softklin Posted February 19, 2009 at 01:03 PM Report Share #245532 Posted February 19, 2009 at 01:03 PM Esse código serve para caso não tenhas o idioma disponível, mostras uma página por omissão. Essa página deve ser preferencialmente numa língua acessível à maioria, por exemplo, o inglês. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
scorch Posted February 19, 2009 at 09:33 PM Report Share #245656 Posted February 19, 2009 at 09:33 PM Depois diz se funcionou. 😛 PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
scorch Posted February 19, 2009 at 09:44 PM Report Share #245664 Posted February 19, 2009 at 09:44 PM <?php $explode_um = explode(';', $_SERVER['HTTP_USER_AGENT']); $explode_dois = explode(';', $explode_um['3']); $lang = $explode_dois['0']; $_LANG['pt-PT'] = 'pt-PT'; $_LANG['en'] = 'en'; if ($_LANG[$lang] != null){ header('Location: '.$lang.'.html'); } else { header('Location: en.html'); } ?> Tenta isto. 😛 PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
scorch Posted February 19, 2009 at 10:05 PM Report Share #245671 Posted February 19, 2009 at 10:05 PM Funcionou? PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
scorch Posted February 19, 2009 at 10:21 PM Report Share #245679 Posted February 19, 2009 at 10:21 PM Não percebo porquê <?php $explode_um = explode(';', $_SERVER['HTTP_USER_AGENT']); $explode_dois = explode(';', $explode_um['3']); $lang = $explode_dois['0']; $language['pt-PT'] = 'pt-PT'; $language['en'] = 'en'; print_r ($_SERVER['HTTP_USER_AGENT']);echo '<br />'; print_r ($explode_um);echo '<br />'; print_r ($explode_dois);echo '<br />'; echo ''.$lang.'<br />'; echo $language[$lang]; /*if ($language[$lang] != null){ header('Location: '.$lang.'.html'); } else { header('Location: en.html'); } */ ?> Ele retorna isto : Mozilla/5.0 (Windows; U; Windows NT 6.0; pt-PT; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 Array ( [0] => Mozilla/5.0 (Windows [1] => U [2] => Windows NT 6.0 [3] => pt-PT [4] => rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 ) Array ( [0] => pt-PT ) pt-PT Devia funcionar. 😛 PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
softklin Posted February 20, 2009 at 10:00 AM Report Share #245718 Posted February 20, 2009 at 10:00 AM Tenta lá com este código: // idomas suportados $paginas = array( "pt" => "portugues.html" , "fr" => "frances.html" , "es" => "espanhol.html" ); // obter as suas letras correspondentes ao idioma $idioma = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); if (array_key_exists($idioma, $paginas)) { // o idioma existe na nossa lista de paginas header("Location: ".$paginas[$idioma]); } else { // nao existe, vamos mandar para uma paginas por omissao // ou em opção para uma pagina em ingles... // ... dependendo do publico alvo header("Location: default.php"); } Atenção, que este código não faz distinção entre variantes da mesma língua, por exemplo, Português de Portugal e Português do Brasil, pelo que vão para a mesma página. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
psiico Posted February 20, 2009 at 06:25 PM Report Share #245845 Posted February 20, 2009 at 06:25 PM com um switch nao resolvias isso? Psiico // Portfolio Link to comment Share on other sites More sharing options...
softklin Posted February 20, 2009 at 08:25 PM Report Share #245873 Posted February 20, 2009 at 08:25 PM Sim, dá. No entanto, tens aí coisas a mais, talvez assim: <?php $explode_um = explode(';', $_SERVER['HTTP_USER_AGENT']); $explode_dois = explode(';', $explode_um['3']); $lang = trim($explode_dois['0']); var_dump($explode_dois, $lang); if ($lang == "pt-PT" or $lang == "pt-BR"){ header('Location: pt.html'); } else { header('Location: en.html'); } ?> Testado. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
mjamado Posted March 31, 2010 at 02:47 PM Report Share #319127 Posted March 31, 2010 at 02:47 PM Queria saber em que é que se baseia para redireccionar, ao idioma do browser, Sistema Operativo? O script que puseste está a usar o do browser, que pode ser, ou não, igual ao do sistema. Qual dos dois é melhor ou recomendam-me outro mais fiável? Por IP é bastante melhor. E queria saber como é que funciona aos olhos dos bots dos motores de busca, eles vão indexar como primeira página o pt ou en? O motor de busca vai indexar as páginas consoante a linguagem servida ao spider. Só nessa, a menos que tenhas links para mudar de idioma - o que devias ter, visto que o utilizador pode não ficar satisfeito com a detecção automática. "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web. Link to comment Share on other sites More sharing options...
mjamado Posted March 31, 2010 at 03:22 PM Report Share #319134 Posted March 31, 2010 at 03:22 PM Isso do motor de busca, qual é então a linguagem servida ao spider? Por IP eles "apanham" a portuguesa? Eu tenho um link para as duas páginas, e a tradução não é automática. Ele não "traduz", simplesmente, com link, vai buscar as duas. Por IP apanham a linguagem correspondente ao IP deles. O spider do Google vem de Mountain View, California, pelo que deverá ir buscar a linguagem que tiveres definida para os Estados Unidos (tipo, sei lá, inglês). "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web. Link to comment Share on other sites More sharing options...
mjamado Posted March 31, 2010 at 05:22 PM Report Share #319161 Posted March 31, 2010 at 05:22 PM Mas depois o google vai-me indexar a página inglesa como a de raiz, ou seja www.site.com a página inglesa, e a página portuguesa vai ser como uma página normal dentro do site. Com um .htaccess, apanhas os vários spiders e redireccionas sempre para a página que queres. Os spiders são fáceis de identificar, o user-agent é distinto do dos browsers. Tem a noção que, se a Google der conta que estás a fazer isso, o teu site é banido dos resultados, porque é contra os termos de serviço deles. Este script, por ip, é bom?:http://forum.imasters.uol.com.br/index.php?/topic/257626-redirecionamento-por-ip/page__s__dc63b08dc1222df19668aff182b966f8 Não, é do mais sapateiro que existe. Os IP's atribuídos aos países não são os mesmos para sempre. Para ser bem feito, tens que ir buscar os dados de IP por país, destes tipos, por exemplo, regularmente (uma vez por semana deve chegar) e construir uma classe que faça acontecer a coisa. P.S.: olha aqui uma classe no PEAR. "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web. Link to comment Share on other sites More sharing options...
softklin Posted April 6, 2010 at 07:19 PM Report Share #320101 Posted April 6, 2010 at 07:19 PM Tenta o seguinte: <?php $explode_um = explode(';', $_SERVER['HTTP_USER_AGENT']); $explode_dois = explode(';', $explode_um['3']); $lang = trim($explode_dois['0']); if ($lang == "pt-PT" or $lang == "pt-BR"){ header('Location: pt.html'); } else { header('Location: en.html'); } ?> Acabei de testar e funcionou aqui. O erro que indicavas era uma instrução var_dump que servia apenas para debug. Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now