Chi possiede un sito web in diverse versioni, create per diverse lingue, troverà certamente un’ottima idea quella di reindirizzare automaticamente l’utente all’indirizzo relativo alla sua lingua.
Fa così Google, fa così Yahoo!, e si, ho fatto anch’io così per il mio lysergicstudio.com (so che il paragone non regge tranquilli
).
Nel mio caso l’obbiettivo era duplice e piuttosto semplice: volevo che l’utente restasse all’indirizzo www.lysergicstudio.com nel caso fosse italiano, mentre che fosse reindirizzato automaticamente all’indirizzo en.lysergicstudio.com nel caso fosse straniero (per godersi subito il mio orribile inglese).Viceversa ovviamente nel caso l’indirizzo digitato fosse en.lysergicstudio.com.
In questa maniera, per altro, anche gli spider (o crawler o bot o come vogliamo chiamarli) vengono indirizzati ad uno piuttosto che all’altro indirizzo, concentrandosi così sulla lingua più opportuna.
Sebbene questo risultato sia ottenibile con svariate tecniche (utilizzando il file htaccess, includendo un piccolo script javascript oppure usando php) ho prediletto l’utilizzo di PHP.
I motivi che mi hanno portato a scartare le altre soluzioni sono semplici: l’efficacia di javascript dipende dal browser in uso, nel caso l’esecuzione di javascript fosse disabilitata nel browser dell’utente lo script non funzionerebbe mentre non funzionerebbe certamente mai con i bot poichè questi utilizzano un browser testuale che non esegue javascript. Il file htaccess invece funziona sempre e su tutto il sito, per cui nel caso volessi ad esempio mettere a disposizione un file per il download nella cartella principale di www.lysergicstudio.com non potrei perchè un utente straniero verrebbe reindirizzato su en.lysergicstudio.com.
La soluzione in php dopo questa immagine culturalmente impegnata…

La soluzione php
Propongo subito la prima versione di codice che ho scritto per ottenere il risultato illustrato sopra. Questo codice andrebbe inserito in cima al file header.php (nel mio caso ho creato un header unico per tutte le pagine, e ho fatto bene visto che non ho dovuto modificare tanti header quante sono le pagine, no?
).
Ho messo qualche commento per facilitare la comprensione del codice:
<?php
if (!isset($Language)) { // verifica che la variabile Language non sia vuota
$Language = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); //recupera la stringa con le lingue supportate dal browser
$Language = strtolower(substr(chop($Language[0]),0,2)); //seleziona il codice relativo alla lingua di default
}
if ($Language == it){
// se lingua di default è italiana non fa nulla, rimanendo all'indirizzo digitato
}
else {
header("Location: http://en.lysergicstudio.com");
// se invece la lingua di default è diversa dall'italiano rimanda automaticamente all'indirizzo della versione inglese
}
?>
Ovviamente sulla versione inglese ho fatto il contrario, scambiando il contenuto di if con quello di else ed inserendo l’url della versione italiana. E’ possibile fare in modo anche che il reindirizzamento avvenga di volta in volta alla corrispondente pagina nell’altra lingua anzicchè sempre alla home, ma dipende da com’è strutturato il sito per cui avrebbe poco senso riportare come ho fatto io. Propongo invece una versione dello stesso codice utile a reindirizzare a più indirizzi, nel caso le versioni del sito siano più di due.
Prendiamo in considerazione per il seguente esempio un sito in 4 versioni: in italiano, francese, spagnolo ed inglese (tanto per dirne 4 frequenti). Il codice necessario è pressocchè identico fatto salvo l’operatore if che verrà sostituito da uno switch. Qui prendiamo in considerazione il codice da inserire nella pagina italiana, ovviamente andrà adattato di volta in volta rispetto alle diverse lingue.
<?php
if (!isset($Language)) { // verifica che la variabile Language non sia vuota
$Language = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); //recupera la stringa con le lingue supportate dal browser
$Language = strtolower(substr(chop($Language[0]),0,2)); //seleziona il codice relativo alla lingua di default
}
switch($Language){
case "it": // il browser è in italiano, questa è la pagina giusta per cui non faccio nulla
break;
// di seguito i vari casi per le differenti lingue ed il relativo redirect
case "fr":
header("Location: http://indirizzofrancese.com");
break;
case "es":
header("Location: http://indirizzospagnolo.com");
break;
case "en":
header("Location: http://indirizzoinglese.com");
break;
default: // il redirect predefinito nel caso il browser non fosse in nessuna delle lingue prese in considerazione
header("Location: http://indirizzoinglese.com");
break;
}?>
Ovviamente possono essere apportate ancora diverse migliorie e soluzioni più avanzate, ma come “soluzione pappa pronta” questa non è male, no?
Se avete dubbi o suggerimenti ovviamente a voi i commenti!
Se ti è piaciuto questo post
Rimani sempre aggiornato:






Commenti (6)
soluzione molto elegante !
Grazie mille. Visto che è stata una soluzione presa per un mio sito personale per me questa una conferma.
Ciao,
vorrei fare un test, non conosco php, ho provato a copiare la prima delle due parti di codice in una pagina vuota. Poi l’ho richiamata dal browser ma vedo una pagina bianca.
Se proprio non conosci php credo dovresti partire da qualcosa di più semplice, altrimenti rischieresti di fare le cose senza comprendere cosa accadrà.
Ottimo script
grazie