Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, já faz algum tempo que estou procurando uma forma de traduzir meu site.
Desta forma: http://meusite.com/?lang=en ele traduz normalmente, mas tem q inserir o ?lang=en no fim de todas as páginas. É muito chato para o usuário.
Este é o script responsável pela tradução:
<?PHP
switch ($_GET['lang'])
{
case 'pt':
require("portugues.php");
break;
case 'en':
require("ingles.php");
break;
default:
require("portugues.php");
}
?>
Como faço para deixar o idioma gravado? Não tem como traduzir automaticamente? (GeoIP?)
Abraços.
Pode me dar um exemplo de como salvar o cookie?
Você pode fazer assim:
if (isset($_GET['lang']))
{
setcookie('lang', $_GET['lang'], time()+108000, '/');
}Amigo, fiz mas não salvou o cookie. Apenas exibiu um warning (Warning: Cannot modify header information).
Fiz assim:
<?php
switch ($_GET['lang'])
{
case 'pt':
require("portugues.php");
break;
case 'en':
require("ingles.php");
break;
default:
require("portugues.php");
}
if (isset($_GET['lang']))
{
setcookie('lang', $_GET['lang'], time()+108000, '/');
}
?>
O que houve?nao seria assim?
if (!isset($_GET['lang'])) {
setcookie('lang', $_GET['lang'], time()+108000, '/');
}Foi assim que eu fiz, dá erro
você só pode setar cookie antes de enviar algum header para o navegador.
Ou seja coloque esse código antes de todos os headers( coloque antes da tag <html> )
Ok, não mais o Warning, mas não grava o cookie
você colocou o ! no if como mostrei?
Sim, veja você mesmo. Acesse http://theimageup.com?lang=en
Nas configurações do navegador, aparece gravado, mas ao acessar http://theimageup.com, tá em português
tenta assim
if (!isset($_GET['lang'])) {
//se ?lang=en não for definido, cria padrão PT
setcookie('lang', 'pt', time()+108000, '/');
} else {
//se ?lang=en estiver definido usa o valor
setcookie('lang', $_GET['lang'], time()+108000, '/');
}Continua em PT
você esta usando o cookie???
if (!isset($_GET['lang'])) {
echo 'cria padrão PT';
} else {
echo $_GET['lang'];
}
poste o codigo caso não apareca EN
Apareceu o EN, a página traduziu, mas não fica gravado. Cada vez q acesso o theimageup.com tenho q pôr o ?lang=en na URL
<?php
switch ($_GET['lang'])
{
case 'pt':
require("portugues.php");
break;
case 'en':
require("ingles.php");
break;
default:
require("portugues.php");
}
if (isset($_GET['lang']))
{
setcookie('lang', $_GET['lang'], time()+108000, '/');
}
?>
você precisa mudar esse switch ($_GET['lang']) pelo cookie
se você não mudou ainda, bastava mudar
Como? Assim: switch ($_COOKIE['$_GET['lang']']) ?
seria
switch ($_COOKIE['lang'])
Obrigado, amigo, consegui.
Abraços :)
http://forum.imasters.com.br/public/style_emoticons/default/joia.gif
mas isso foi o basicão
você precisa verificar antes se ja contem o cookie, senão cria
... e implementa qq verificação pertinente
abraços
Quando acesso a página pela primeira vez após gravar o cookie, está no idioma gravado (EN), mas quando acesso novamente já tá em PT :(
Sei que o problema é aqui:
if (!isset($_GET['lang'])) {
//se ?lang=en não for definido, cria padrão PT
setcookie('lang', 'pt', time()+108000, '/');
} else {
//se ?lang=en estiver definido usa o valor
setcookie('lang', $_GET['lang'], time()+108000, '/');
}eu disse isso acima
você precisa ver se ha valor em 'lang' e verificar se ja existe cookie para evitar de sobrescrever
Você me passou isso
if (!isset($_GET['lang'])) {
echo 'cria padrão PT';
} else {
echo $_GET['lang'];
}
Mas não sei como faço pra não sobrescrevernao estou conseguindo fazer o cookie assumir o valor de $_GET['lang'] <_<
espere alguem vir aqui pq eu nao estou conseguindo
sinto muito
Criatividade zero, se você se refere a esta parte aqui:
<?php
if (!isset($_GET['lang'])) {
//se ?lang=en não for definido, cria padrão PT
setcookie('lang', 'pt', time()+108000, '/');
} else {
//se ?lang=en estiver definido usa o valor
setcookie('lang', $_GET['lang'], time()+108000, '/');
}
?>
Tente atribuir o valor do $_GET a uma varivável e use esta variável para criar o cookie:
<?php
if (!isset($_GET['lang'])) {
//se ?lang=en não for definido, cria padrão PT
setcookie('lang', 'pt', time()+108000, '/');
} else {
//se ?lang=en estiver definido usa o valor
$lang = $_GET['lang'];
setcookie('lang', $lang, time()+108000, '/');
}
?>Gravou normalmente, como antes. O problema é q
Gravou normalmente, como antes. O problema é que o padrão (PT) sobrescreve o cookie gravado (EN) quando a página é recarregada.
Veja você mesmo: Acesse http://theimageup.com/?lang=en'>http://theimageup.com/?lang=en (isso é estranho, carregue a página duas vezes) e depois http://theimageup.com/ (duas vezes também)
Como o seu site só tem dois idiomas (Português e Inglês), e presumindo que o idioma Português é para ser exibido para usuários brasileiros, você pode fazer uma simples comparação para verificar se o IP do visitante é do Brasil.
Dê uma olhada nesse tópico: http://forum.imaster...nalidade-do-ip/
GeoIP também seria uma solução, mas ao meu ver não é necessário e você teria que pagar se quisesse ter um serviço confiável e estável para realizar as consultas.
Você também pode colocar uma opção no topo do site com um listmenu ou duas bandeirinhas (Brasil e EUA) para o visitante ter a possibilidade de alterar o idioma, daí você salva o idioma de preferência em um Cookie e sempre consulta esse Cookie para saber qual o idioma do usuário. Assim não precisa ficar passando via URL.
Um abraço!