Leggendo in giro ho capito che per i motori di ricerca è meglio mettere la lingua nell’url, quindi ho seguito questa guida che mi è sembrata la più recente,aggiornata e migliore:
Se cambi lingua www.miosito.com è indicizzato con un’altra lingua. Sinceramente non sono un seo, ma potendo metterei sempre la lingua nell’url, in caso di siti multilingua. Preferisco avere un pattern ben preciso e non un’eccezione di default.
In assenza di link, io creerei una splash page nella quale sia possibile selezionare la lingua che si vuole o eventualmente fare il redirect alla lingua del browser.
<?php
class UrlManager extends CUrlManager
{
public function createUrl($route,$params=array(),$ampersand='&')
{
if(!isset($params['language'])) {
if(Yii::app()->user->hasState('language'))
Yii::app()->language = Yii::app()->user->getState('language');
else if(isset(Yii::app()->session['language']))
Yii::app()->language = Yii::app()->session['language'];
$params['language']=Yii::app()->language;
}
return parent::createUrl($route, $params, $ampersand);
}
}
?>
components/Controller.php
public function __construct($id,$module=null){
parent::__construct($id,$module);
// If there is a post-request, redirect the application to the provided url of the selected language
if(isset($_POST['language'])) {
$lang = $_POST['language'];
$MultilangReturnUrl = $_POST[$lang];
$this->redirect($MultilangReturnUrl);
}
// Set the application language if provided by GET, session or cookie
if(isset($_GET['language'])) {
Yii::app()->language = $_GET['language'];
Yii::app()->user->setState('language', $_GET['language']);
Yii::app()->session['language'] = $_GET['language'];
}
else if (Yii::app()->user->hasState('language'))
Yii::app()->language = Yii::app()->user->getState('language');
else if(isset(Yii::app()->session['language']))
Yii::app()->language = Yii::app()->session['language'];
}