Sito multilingua in PHP
Oggi vi propongo un modo per gestire il multilingua usando il PHP.
Non è detto che sia la migliore, ma mi ci trovo bene e la trovo abbastanza facile da gestire.
Prima di tutto creiamo una directory apposita (ad esempio lingue) con dentro un file che chiameremo gestore.php:
if (!isset($_COOKIE['LANG'])) {
setcookie("LANG", 1, time() + 2592000, '/');
}$lingua = $_COOKIE['LANG'];
switch ($lingua) {
case 1:
include_once "it.php";
break;
case 2:
include_once "en.php";
break;
default :
include_once "it.php";
break;
}
Per memorizzare qual'è l'ultima lingua scelta useremo i cookies.
Prima controlliamo che non sia settato, e in caso lo settiamo con un valore di default (l'italiano).
Sotto abbiamo uno switch che controlla il valore del cookie e richiama il file della lingua che ci serve.
A questo punto creiamo i file delle lingue; ad esempio it.php:
$COPYRIGHT = "© Copyright ..........";
Qua metteremo tutti i valori che vanno tradotti; ovviamente dovremmo farlo in ogni file di lingua.
A questo punto dobbiamo solo impostare un modo per cambiare lingua; può essere un link, un form, che richiama una pagina per cambiare valore del cookie.
Un modo banale può essere questo:
<a href="set_lang.php?l=1">
<img src="images/ita.png" alt="Italiano">
</a>
<a href="set_lang.php?l=2">
<img src="images/eng.png" alt="English">
</a>
E la pagina richiamata non fa altro che cambiare valore del cookie e ritronare alla pagina precedente:
setcookie("LANG", $_GET['l'], time() + 2592000, '/');
header('Location: ' . $_SERVER['HTTP_REFERER']);
Direi che abbastanza semplice.
Enjoy!
php cookie $_COOKIE
1 Commenti
Alquanto simile a quello utilizzato da phpnuke. Comunuqe non è ottimale in quanto se venissero aggiunti altri pacchetti linguistici saresti costretto a modificare continuamente il codice. Una soluzione più ideale sarebbe qualcosa di simile: [...] $langFile = basename($_COOKIE[\"language\"]); // basename to prevent lfi attack if (!file_exists(dirname(__FILE__).\"/languages/{$langFile}.php\")) { $langFile = \"italian\"; } require_once(dirname(__FILE__).\"/languages/{$langFile}.php\");
02/04/2014