Sito multilingua in PHP

Mattepuffo's logo
Sito multilingua in PHP

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!


Condividi

1 Commenti

  • Tomas

    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

Commentami!