2013-03-17 146 views
1

我在CakePHP中創建一個頁面,我試圖翻譯網址。我想要的是翻譯控制器的名稱,所以讓我說我有這個網址domain/da/product那麼它應該把它翻譯成丹麥語,所以它成爲domain/da/produkt翻譯網址cakephp

我已經在AppHelper中編寫了自己的url方法,但是我在訪問翻譯模型時遇到了問題。當我搜索幫助者訪問模型時,人們反對這樣做。

那麼這將是一個適當的方式來做到這一點。當用戶使用鏈接時,我需要進行查找,然後將其翻譯回domain/da/product

這裏是Apphelper代碼

App::uses('Helper', 'View'); 
App::import("Model", "ControllerTranslation"); 

class AppHelper extends Helper { 

public function url($url = null, $full = false) { 

     $Model = new ControllerTranslation();   
     $lang = Configure::read('Config.language'); 
     $controller = $Model->find("first",array("conditions"=> array("ControllerTranslation.translation = "=> $url['controller'],"ControllerTranslation.language" => $lang))); 
     if (count($controller)) 
     { 
      $url['controller'] = $controller["ControllerTranslation"]["translation"]; 
     }   
    return parent::url($url, $full); 
} 
+0

喜我用代碼更新了這個問題,現在的代碼工作正常。我剛剛讀到,從助手類調用模型是不好的MVC風格。 – 2013-03-17 15:04:01

+0

我必須在路由器中再次創建反向查找,是否可以使用__()方法? – 2013-03-17 15:14:44

+0

是的,問題出在我需要非翻譯價值的路由器上。因此,在我的示例中,它應該將產品翻譯回產品,因此它會自動找到productController – 2013-03-17 15:25:34

回答

0

,如果你想有翻譯= $網址[ '控制']和語言URL = $ LANG,那麼你應該使用語法:

$controller = $Model->find("first", 
    array("conditions"=> 
    array(
      "ControllerTranslation.translation" => $url['controller'],     
      "ControllerTranslation.language" => $lang 
     ) 
     ) 
);