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!

Le cose semplici sono sempre le migliori, 1 legge del buon programmatore ;).