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).

Oggi vediamo come gestire i cookie attraverso il framework CodeIngiter.

In generale abbiamo tre funzioni:

  • get_cookie
  • set_cookie
  • delete_cookie

Nel mio caso sto usando i cookie per salvare la lingua scelta (Italiano o Inglese).

Per la gestione del cookie ho creato un model apposito da richiamare dove mi serve.

Fate attenzione che la funzione set_cookie è leggermente diversa dalla funzione setcookie nativa di PHP.

Ad esempio i parametri path e dominio sono invertiti, e in CI mancano alcuni parametri.

Vediamo questa classe che fa da model:

<?php

class Lang_model extends CI_Model {

    public function getLang() {
        if (get_cookie('LANG') == 'eng') {
            $lang = array(
                'allUtente' => 'User'
            );
        } else {
            $lang = array(
                'allUtente' => 'Utente'
            );
        }
        return $lang;
    }

    public function setDefaultLang() { // SETTA IL COOKIE LA PRIMA VOLTA CHE SI ACCEDE SE NON ESISTE
        if (!get_cookie('LANG')) {
            set_cookie("LANG", 'ita', time() + 2592000, 'www.sito.it', '/');
        }
    }

    public function setLang($lng) {
        set_cookie("LANG", $lng, time() + 2592000, 'www.sito.it', '/');
    }

}

Ho tre funzioni.

Nella prima reperisco il valore del cookie, e in base a quello imposto le parole/frasi/quello che vi serve, in una o nell'altra lingua.

Piccola premessa: a mio modo di vedere è sempre meglio gestire i cookie lato server (Asp.NET, PHP, Java,....).

Però a volte capita che si debba gestirli con Javascript (magari delegando solo informazioni meno importanti).

Vediamo tre funzioni da mettere nell'header.

La prima serve per settarli:

function setCookie(name, value, expiredays, path, domain, secure) {
    var expires = new Date();
    expires.setDate(expires.getDate() + expiredays);
    var cookieString = name + "=" + escape(value) + ((expires) ? ";expires=" + expires.toGMTString() : "") + ((path) ? ";path=" + path : "") + ((domain) ? ";domain=" + domain : "") + ((secure) ? ";secure" : "");
    document.cookie = cookieString;
}

Alla funzione passiamo un pò di parametri che con i quali costruiremo il cookie (var cookieString).