Gestine multilingua su CakePHP

Marco Pegoraro, 30 Gennaio 2008

Ho già affrontato in un'altro articolo il problema di implementare un sistema multilingua su CakePHP.

Questa nuova soluzione evita l'utilizzo del file .htaccess andando solamente ad aggiungere poche righe di codice al file di configurazione bootstrap.php.

if ( strlen( substr( $_GET['url'], 0, strpos( $_GET['url'], '/' ) ) ) == 2 ) {
if(!defined('__RQL__'))
define('__RQL__', substr( $_GET['url'], 0, strpos( $_GET['url'], '/' ) ) );
$_GET['url'] = substr( $_GET['url'], 3, 255 );
}

Cosa fa questo codice?

Utilizzando nel browser una url del tipo:

http://www.miosito.it/it/controller/action/
http://www.miosito.it/en/plugin/controller/action/

lo script intercetta la presenza di un primo parametro di 2 caratteri e lo elimina dall'url fornendo al Dispatcher di CakePHP l'url convenzionale a partire dal nome del controller o del plugin richiesto.

In secondo luogo viene definita la variabile "__RQL__" (ReQuested Language) in cui viene memorizzato il flag di lingua richiesto. Questo flag di lingua dovrà poi essere utilizzato in qualche modo nel resto dell'applicazione.

Perchè questa soluzione è efficiente?

Questa soluzione è efficiente in quanto tutte le risorse appartenenti ad una data lingua vengono accorpate all'interno della cartella (virtuale) avente come nome il flag di lingua stesso.

Questo accorgimento è un vantaggio sia dal punto di vista di usabilità del sito (facile lettura della url) che in un'ottica di programmare una campagna di posizionamento nei motori di ricerca in quanto ogni pagina di ogni lingua potrà essere direttamente accessibile senza utilizzare variabili di sessione o parametri da accodare alla url.

Come utilizzo il flag di lingua memorizzato?

L'utilizzo più semplice è quello di impostare un filtro nell'estrazione dei dati:

$this->MyModel->findAll(
Array(
'MyModel.lang_flag' => __RQL__
)
);

ovviamente dovremo tenere in considerazione l'utilizzo di url con flag di lingua anche nel backend delle nostre applicazioni in modo di poter facilmente gestire i dati profilandoli in base alla lingua momentaneamente utilizzata.

NOTA: il vantaggio maggiore offerto da questo sistema è la modalità di modifica della lingua.

Per cambiare la lingua utilizzata o la lingua da amministrare è sufficiente fornire un link con un differente flag di lingua!

Commenti all'articolo:

Sì credo sia la soluzione migliore, migliore intendo snella, non spreca risorse, non sporca con le sessioni.
Le cose semplici sono sempre le migliori, 1 legge del buon programmatore ;).
15/08/2008 22:38

Categorie: CakePHP; JuniorCMS; Usabilità;


Aggiungi il Tuo Commento:

Inviando questa risposta dichiaro di aver letto ed approvato le condizioni di utilizzo di questo sito web.

(*) = campo obbligatorio.


Condizioni di Utilizzo:

1 - Tutte le risposte inviate a questo sito saranno sottoposte a moderazione manuale da parte dell'amministratore al fine di evitare il fenomeno detto "SPAM".

2 - Tutti i dati inseriti nel modulo di risposta verranno pubblicati in questa pagina ad eccezione dell'e-mail. Tale informazione viene richiesta ed archiviata dagli amministratori al fine di scoraggiare un utilizzo non consono del blog.

3 - Non utilizzare le risposte per pubblicizzare il tuo sito web. Tale tentativo verrà cancellato dall'amministratore. In ogni caso ai link inseriti nelle risposte viene applicato il "nofollow" per cui non ti portano vantaggi.
Se vuoi possiamo discutere uno scambio link: Srivimi!