我已經建立了一個多語言網站。語言可以通過點擊網站上的標誌來切換。當點擊它的任何,該請求被提交到控制器,其與下面的代碼:如何組織多語言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的項目結構合併的最有效方式是什麼? 謝謝。
是的,有一種方法,請查看自定義路線。從控制器的邏輯你可以移動到引導,所以你將只有一個請求。只需詢問(isset($ _ GET ['lang'])){...}以及引導程序函數中的其他代碼即可。 – tasmaniski