2010-04-04 41 views
4

我试图将语言添加到URL具有以下语法: http://www.example.com/en/site/page/view/about在URL的Yii urlManager语言

我至今与短网址的工作原理是:一旦 http://www.example.com/en/site/contact 但不能与你一直在我第一个例子

这是我到目前为止有:

/config/main.php

'urlManager'=>array(
    'class'=>'application.components.MyCUrlManager', 
    'urlFormat'=>'path', 'showScriptName'=>false, 
    'rules'=>array(
     '<language:\w+>/<controller:\w+>/<id:\d+>'=>'<controller>/view', 
     '<language:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
     '<language:\w+>/<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
    ), 
), 

<?php // components/MyCUrlManager.php 

class MyCUrlManager extends CUrlManager 
{ 
    public function createUrl($route,$params=array(),$ampersand='&') 
    { 
     if(isset($_POST['_lang'])) 
     { 
      Yii::app()->setLanguage($_POST['_lang']); 
      $route['language']=Yii::app()->language; 
     } 
     elseif (!isset($route['language'])) 
     { 
      $route['language']=Yii::app()->language; 
     } 
     else 
     { 
      Yii::app()->setLanguage($route['language']); 
     } 
     return parent::createUrl($route, $params, $ampersand); 
    } 
} 
?> 

class LangBox extends CWidget { 

    public function run() { 

     $currentLang = Yii::app()->language; 
     require_once 'Zend/Locale.php'; 
     $locale = new Zend_Locale(); 
     //$siteLanguages = $this->getLang(); 
     $siteLanguages = array('en','de','tr'); 
     foreach($siteLanguages as $value){ 
       $list[$value] = $locale->getTranslation($value, 'Language', $value); 
     } 
     asort($list); 
     $this->render('langBox', array('currentLang' => $currentLang, 'list'=>$list)); 
    } 
} 
+0

你期望'http://www.example.com/en/site/page/view/about'去哪儿?哪个控制器,动作等? – 2010-04-07 16:14:52

+0

静态页面: 网站=控制器, 页=静态页面, 视图=目录, 页=约=> abaut.php, 非静态页面:, EN =语言, 分段2 =控制器, 段3 =行动, – RoboTamer 2010-04-08 19:11:06

回答

5

我有同样的问题,下面的规则对我的工作也与子模块和任意数量则params的:

    '<lang:[a-z]{2}>/<_m>/<_c>' => '<_m>/<_c>', 
       '<lang:[a-z]{2}>/<_m>/<_c>/<_a>*' => '<_m>/<_c>/<_a>', 
       '<lang:[a-z]{2}>/<_m>/<_a>' => '<_m>/<_a>', 
       '<lang:[a-z]{2}>/<_c>' => '<_c>', 
       '<lang:[a-z]{2}>/<_c>/<_a>' => '<_c>/<_a>', 

_M是模块的特殊价值,_c为控制器和_a的行动。