Un sito multilingua usando PHP

Utilizzando PHP con un po’ di accortezza è molto semplice realizzare un sito che supporti più lingue.

Scelta della lingua
Ad ogni lingua associamo un sigla univoca che useremo per differenziare le risorse. Per selezionare una lingua basterà passare il parametro LANG  a qualsiasi pagina impostata per il multilingua, ad esempio:

<a href="?LANG=EN">View english version</a>

 

Inizializzazione
Una volta che un visitatore ha scelto occorre visualizzare le pagine sempre in tale lingua, per fare ciò usiamo le sessioni che permettono di associare dei dati ad un particolare visitatore e di farli sopravvivere durante la navigazione tra le pagine.

session_start();
if(array_key_exists('LANG', $_GET))$_SESSION['LANG'] = $_GET['LANG'];
if(!array_key_exists('LANG', $_SESSION))$_SESSION['LANG'] = 'IT';
include "LANG/".$_SESSION['LANG'].".php";

In cima ad ogni pagina* che vogliamo rendere multilingua dovremo inizializzare la sessione, impostare la lingua se questa è stata selezionata oppure settare quella di default se necessario; infine la cosa più importante: includere il file con tutte le traduzioni.

*: Per avere una buona manutentibilità del codice è consigliabile creare un file ad hoc LANG.php da includere nelle varie pagine; per cambiare, ad esempio, la lingua di default è sufficiente modificare un solo file.

Definizione lingua
In ogni file di lingua sarà definita la traduzione di tutte le stringhe necessarie.

<?php
   //IT.php
   $LANG['title'] = 'Il mio bel sito';
   $LANG['stitle'] = 'Da oggi multilingua!';
   $LANG['contact'] = 'Contattami';
?>

 

Testi
Ogni stringa che vogliamo tradurre andrà sostituita con la variabile definita nel file di lingua che verrà opportunamente caricato in base alla lingua scelta.

<h1>Il mio bel sito</h1>
<h1><?=$LANG['title'];?></h1>

Nota: Nelle versioni di PHP precedenti alla 5.4.0 la forma breve <?= funziona solo se short_open_tag è abilitato, comunque è del tutto equivalente a <?php echo.

Altre risorse
Per tutte le risorse che non sono testuali ma necessitano comunque di essere differenziate in base alla lingua dovremo crearne varie versioni e salvarle col suffisso relativo, ad esempio: logo_IT.jpeg, logo_EN.jpeg.

A questo punto basterà richiamare i nomi dei file concatenato con la lingua selezionata.

<img src="logo_<?=$_SESSION['LANG'] ?>.jpeg" />

 
Conclusione
A livello di codice non c’è molto lavoro, la maggior parte del lavoro andrà nel tradurre i contenuti, testuali e non.
Comunque questo approccio si presta bene alla parte statica di un sito, per contenuti dinamici ci sono metodi molto più funzionali.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

Leave a Reply

Your email address will not be published. Required fields are marked *