2013-01-14 53 views
1

我已經建立了一個多語言網站。語言可以通過點擊網站上的標誌來切換。當點擊它的任何,該請求被提交到控制器,其與下面的代碼:如何組織多語言zend項目

<?php 

class LanguageSwitchController extends Zend_Controller_Action 
{ 
    protected $_redirector = null; 
    public function init(){ 
     $this->_helper->layout->disableLayout; 
     $this->_helper->viewRenderer->setNoRender(); 

     $this->_redirector = $this->_helper->getHelper('Redirector'); 
/*  $this->_redirector->setGotoUrl($this->getInvokeArg('referer')); 
*/ 
    } 
    public function switchAction(){ 
     $session = new Zend_Session_Namespace('language'); 
     $session->language = $this->_getParam('lang'); 

     $this->_redirector->gotoUrl($_SERVER['HTTP_REFERER']); 
    } 
} 

所有相關給Zend_Session,一個Zend_Translate和從Zend_Locale的參數在Bootstripe文件中定義。基本上一切工作正常。我正在使用陣列適配器。所有翻譯都存儲在3個php文件(ro,ru,en)中,並且根據所選語言,頁面以相應語言顯示。 問題是每個頁面沒有每種語言的唯一URL。例如,如果用戶位於頁面http://mysite.com/mycontroller/myaction(假設頁面以英文顯示,因爲它是用戶瀏覽器的默認語言 - 該站點會自動檢測瀏覽器的默認語言),並決定將其轉爲俄羅斯通過點擊respecive標誌,該網站將以俄文顯示,但網址將保持不變:http://mysite.com/mycontroller/myaction。例如,以這種方式,我無法通過Google適當地對其進行索引。對於每種語言中的每個頁面,如果沒有唯一的URL,我將只能爲一種語言(我相信默認的一種)編制索引。 有沒有可能以某種方式調整項目或我必須完全改變網站的結構?一般來說,當站點翻譯成幾種語言時,基於Zend Framework的項目結構合併的最有效方式是什麼? 謝謝。

+0

是的,有一種方法,請查看自定義路線。從控制器的邏輯你可以移動到引導,所以你將只有一個請求。只需詢問(isset($ _ GET ['lang'])){...}以及引導程序函數中的其他代碼即可。 – tasmaniski

回答

1

如何使用自定義路線?例如,通過以下方式定義英語路線:

routes.english.route = "en/:controller/:action" 
routes.english.defaults.lang = en