Newsgroup: it.comp.www.php
Titolo: Sito multilingua

Ciao
Da sempre gestisco il multilinguaggio del mio sito con uno script, che per 
chi potesse interessare pubblico qui sotto, ed ogni tanto lo aggiorno
Ora ho inserito il controllo sull'IP, c'è qualcuno che non si collega 
dall'Italia, magari con un browser non settato con italiano come lingua 
predefinita che può visionare la pagina:
http://195.234.171.215:2180/inserzionisti/web/temp.php
In teoria dovrebbe comparire 'uk' (il mio sito è in due lingue: o parli 
italiano oppure ti propino la versione inglese)
Ciao e grazie,
Edoardo
Per la cronaca lo script è il seguente, lo commento così se qualcuno vuole 
prenderlo ha un aiuto:
<?
if (@isset($_GET[lingua])  && ($lingua == 'it' || $lingua == 'uk') )
 {
  $lingua = $_GET["lingua"]; //primo controllo se, tramite GET, l'utente 
sceglie di cambiare lingua. specifico che la lingua sia o it o uk perchè dai 
logs c'è chi si inventa lingue strane, oppure bookmarks di quando avevo la 
versione tedesca, oppure usa la cache di google
 }
elseif  (isset($_COOKIE[lingua])  && ($lingua == 'it' || $lingua == 'uk'))
 {
  $lingua = $_COOKIE["lingua"]; //controllo se ha già settato un COOKIE con 
la lingua; stesso controllo che sia inglese o italiano perchè magari c'è chi 
ha ancora cookie con al vecchia lingua
 }
elseif ($_SERVER[HTTP_ACCEPT_LANGUAGE] == 'it') // se non ha il cookie 
controllo se il browser indica la preferenza della lingua italiana (non per 
tutti i browser è scontato)
 {
  $lingua = "it";
 }
else //l'ultima spiaggia è risalire alla provenienza dell'IP; lo faccio 
tramite 
http://hot-things.net/ip2c.php
 [basta scaricare e scompattare il DB 
e indicare il percorso (anche assoluto, non come dicono loro) della 
directory col DB]
 {
$crdr='ip2c';
function set_path($cc){return "$cc";}
$default="it";
$pv=phpversion();$pv=substr($pv,0,1);if($pv>3){$REMOTE_ADDR=$HTTP_SERVER_VARS['REMOTE_ADDR'];}
$v=0;$f=0;$n=array();$ip=$REMOTE_ADDR;
$ip=sprintf("%u",ip2long($ip));
while(strlen($ip)<10){$ip='0'.$ip;}
$h=opendir($crdr);
while($e=readdir($h)){
$o=(int)$e;if(strlen($o)>5){
$n[$f]=$e;$f++;}}closedir($h);
sort($n);
$o=count($n)-1;$d=$n[$o];
for($j=0;$j<$o;$j++){if($ip>=$n[$j]&&$ip<$n[$j+1]){$d=$n[$j];break;}}
$d=$crdr.'/'.$d;$q=fopen($d,"r");
while(!feof($q)){$r=fgets($q,32);
$a=substr($r,0,9);$b=substr($r,10,19);$c=substr($r,20);
if($ip>=$a&&$ip<=$b){$v=1;break;}}
fclose($q);
if($v==0) //se non risolvo l'IP per me è italiano (vista l'utenza del sito è 
più probabile che sia italiano)
{
 $lingua = "it";
}
else
{
 $cc=strtolower($c);$cc=str_replace("\n","",$cc);
 $path=set_path($cc);
 if($path=='it')
  {
   $lingua = "it";
  }
  else //se il sito è in due sole lingue va bene così
  {
   $lingua = "uk";
  }
}
 }
//questo scriptino serve nel caso in cui l'utonto si inventi una variabile 
GET tipo ?lingua=uz
if (($lingua != 'it') && ($lingua != 'uk'))
{
 if ($_SERVER[HTTP_ACCEPT_LANGUAGE] == 'it')
 {
 $lingua = "it";
 }
 else
 {
 $lingua = "uk";
 }
}
setcookie("lingua", $lingua, time()+(60*60*24*730));
if (!isset($_COOKIE[provenienza]))
{
setcookie("provenienza", $HTTP_SERVER_VARS[HTTP_REFERER], 
time()+(60*60*24*730));
}
?>
Io immagazzino la lingua in una variabile perchè custodisco in DB i testi; 
se invece avete due distinti files per ogni pagina, con testo statico, 
potete usare javascript per un redirect 

 setcookie("provenienza", $HTTP_SERVER_VARS[HTTP_REFERER], 
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Non usare $HTTP_SERVER_VARS, Notice: Undefined constant, HTTP_REFERER
non e' sempre valorizzato.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

Io aggiungerei di creare una sessione e propagare il SID nel caso il
browser non abbia abilitato i cookies, che ne dite?
-- 
Gian Marco Tedaldi
Amministratore 
http://www.amiciamici.com
Parma, la provincia e la Valtaro nel mondo

 
LOL! Glielo hai distrutto... Concedimelo, Setec, sei veramente spietato ;)
-- 
Stéphane Bisinger
Webmas... well...

 LOL! Glielo hai distrutto... Concedimelo, Setec, sei veramente spietato ;)
Io apprezzo ogni suggerimento ed ho appuntato tutte le correzioni, ringrazio 
Setec per il tempo dedicatomi
Non è che mi abbia distrutto, lo script funziona egregiamente, sono appunti 
di forma
Register global è su On (i servers sono tutti miei quindi li setto ad hoc)
Ciao e grazie,
Edoardo 

 appunti di forma
Appunti di forma?
Prova ad eseguire il tuo script con register_globals = off
(configurazione di default da anni), con error_reporting = E_ALL e
display_errors = on e poi riparliamo della forma.
-- 
I am what I am, I do what I can



Non č la mia configurazione di default
Edoardo 

 Non h la mia configurazione di default
Scusa, hai ragione, e' quella del resto del mondo ...
