Doesn’t work with that rule…
Ok, here’s the CUrlManager of mine:
class ELangCUrlManager extends CUrlManager
{
public function createUrl($route,$params=array(),$ampersand='&')
{
if (!isset($params['lang'])) {
$lang = Yii::app()->GetLanguage();
} else {
$lang = $params['lang'];
unset($params['lang']);
}
if ($lang == 'en_us') $lang = 'en';
if (strpos($route, 'srbac') === false) {
return parent::createUrl('/'.$lang.'/'.$route, $params);
} else {
return parent::createUrl($route, $params);
}
}
}
Additional class Lang Manager:
class ELangHandler extends CApplicationComponent {
public $languages = array();
public function init() {
// Yii::app()->sourceLanguage = 'en';
$this->languages = array();
$lang = Languages::model()->findAll();
foreach($lang as $v) {
$this->languages[] = $v->xla_name;
}
$this->parseLanguage();
}
private function parseLanguage() {
Yii::app()->urlManager->parseUrl(Yii::app()->getRequest());
if(!isset($_GET['lang'])) {
$defaultLang = 'en';
Yii::app()->setLanguage($defaultLang);
}elseif($_GET['lang']!=Yii::app()->getLanguage() && in_array($_GET['lang'],$this->languages)) {
Yii::app()->setLanguage($_GET['lang']);
}
}
}
And the complete set of URL Rules I have:
'urlManager'=>array(
'class'=>'application.extensions.langhandler.ELangCUrlManager',
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
'<lang:\w{2}>/gii'=>'gii',
'<lang:\w{2}>/gii/<controller:\w+>'=>'gii/<controller>',
'<lang:\w{2}>/gii/<controller:\w+>/<action:\w+>'=>'gii/<controller>/<action>',
'<lang:\w{2}>/news/<action:\w+>/<id:\d+>/<title>/<page:\d+>' => 'news/<action>', // news pagination
'<lang:\w{2}>/news/<action:\w+>/<id>/<id2:\d+>/<page:\d+>' => 'news/<action>',
'<lang:\w{2}>/faq/<action:\w+>/<cid:\d+>' => 'faq/<action>',
'<lang:\w{2}>/faq/<action:\w+>/<cid:\d+>/<scid:\d+>' => 'faq/<action>',
'<lang:\w{2}>/register/<action:\w+>/<id:\w+>/<code:\w+>' => 'register/<action>',
'<lang:\w{2}>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<lang:\w{2}>/<controller:\w+>/<action:\w+>/<provider:\w{32}>' => '<controller>/<action>',
'<lang:\w{2}>/<controller:\w+>/<action:\w+>/<id>' => '<controller>/<action>',
'<lang:\w{2}>/<controller:\w+>/<action:\w+>/<id>/<id2:\d+>' => '<controller>/<action>',
'<lang:\w{2}>/<controller:\w+>/<action:\w+>/<id>/<id2:\d+>/<title2>' => '<controller>/<action>',
'<lang:\w{2}>/<controller:\w+>/<action:\w+>/<id:\d+>/<title>' => '<controller>/<action>',
'<lang:\w{2}>/<controller:\w+>/<action:\w+>/<id:\d+>/<title>/<id2:\d+>/<title2>' => '<controller>/<action>',
'<lang:\w{2}>/<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<lang:\w{2}>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<lang:\w{2}>/<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),