• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

tomassantos

.

17 mensagens neste tópico

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 "]"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

<?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.  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebo porquê :wallbash:

<?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. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora