2010-04-04 75 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的行動。