Creare un sito multilingua in PHP

Per gestire un sito multilingua nei CMS spesso ci vengono in aiuto i plugin ma nel caso di siti molto semplici e con poche pagine potremmo anche pensare di non avere la necessità di creare un pannello back-end e quindi di ritrovarci a dover gestire più lingue.
Creare molti files separati probabilmente è la prima idea che potrebbe venirci in mente ma, francamente, non è certo la migliore!
Il concetto alla base è molto semplice: sfruttare un array in PHP che contenga le varie parole o i testi che dovranno essere inseriti all’interno del sito; ciascuna lingua avrà un array con lo stesso nome che conterrà i testi localizzati e includeremo solo quello della lingua desiderata.
Vediamo come:

<?php
// la lingua può essere selezionata passando un valore in GET all'attributo 'lang'
// rileviamo se esiste un parametro get per 'lang' e lo assegniamo alla variabile $lang
if(isSet($_GET['lang'])) {
    $lang = $_GET['lang'];
// in caso contrario rileviamo la lingua preferita del browser dell'utente
// e la assegniamo alla variabile
} else {
    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}

// Verifichiamo se il valore di $lang corrisponde ad una delle lingue
// di cui il nostro sito dispone e assegnamo il valore corretto alla varibile
// impostando come default l'inglese per far si che internazionalmente
// venga visualizzato l'inglese
switch ($lang){
    case 'it':
        $lang = 'it';
        break;
    case 'en':
        $lang = 'en';
        break;        
    default:
        $lang = 'en';
        break;
}
// includiamo il file contenente l'array con le traduzioni corrispondente
// alla lingua ricavata qui sopra
require_once 'lang/lang.'.htmlspecialchars($lang).'.php';

Com’è facile intuire dal codice nella nostra ‘index.php’ ora abbiamo a disposizione un codice identificativo di una lingua non solamente scelta dall’utente ma persino rilevata in automatico dalle preferenze del browser; ora non ci resta che creare gli array contenenti le traduzioni e poi integrarle nell’HTML, iniziamo con l’italiano:

<?php
/*
------------------
Language: Italian
------------------
*/

 
$lang = array();

$lang['PAGE_TITLE'] = "Sito Multilingua";
$lang['PAGE_HEADER'] = "Questo &egrave; un sito multilingua!";

Salviamo il file all’interno della cartella “lang” nominandolo “lang.it.php” e creaiamo quello per l’inglese:

<?php
/*
------------------
Language: English
------------------
*/

 
$lang = array();

$lang['PAGE_TITLE'] = "Multilanguage Website";
$lang['PAGE_HEADER'] = "This is a multilanguage website!";

Salviamo anche questo file all’interno della cartella “lang” nominandolo “lang.en.php” e procediamo infine ad inserire le variabili nell’index (sotto al codice PHP mostrato all’inizio dell’articolo)

<!-- codice all'inizio dell'articolo -->
<!DOCTYPE html>
<html>
<head>
    <title><?php echo $lang['PAGE_TITLE']; ?></title>
    <meta charset="utf-8">
    <meta name="robots" content="index, follow" />
</head>
<body>
    <h1><?php echo $lang['PAGE_HEADER']; ?>
</body>

</html>

Come avete visto nel sorgente dell’index è possibile tradurre anche i vari tag all’interno dell’head permettendoci così di ottimizzare anche la SEO del nostro sito, lo step successivo potrebbe essere quello di ottimizzare l’URL per renderlo più user-friendly utilizzando il la mod_rewrite del file .htaccess.
Ed ecco concluso il nostro sito multi-lingua!
Possiamo ovviamente gestire quanti testi e lingue desideriamo (nel limite del buon senso) ed aggiungerli agli array.
Ci sono molte strade per sviluppare un sito multi-lingua questa è sicuramente tra le più immediate anche se probabilmente ce ne sarebbero di più corrette come ad esempio l’utilizzo dell’estensione PHP gettext che utilizza i files .po e .mo oppure, banalmente, l’utilizzo di un database per archiviare le varie lingue ma per siti di piccole dimensioni la soluzione sopra spiegata funziona egregiamente!

Matteo Currò

Autore: Mi chiamo , ho 29 anni e lavoro come freelance Web designer e Front-end developer aiutando startups e aziende a migliorare o a rivoluzionare la loro immagine nel web.