我建立了一个多语言网站。单击站点上的标志可以切换语言。单击任何一个时,请求将提交给具有以下代码的控制器:
<?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
(假设页面以英语显示,因为它是用户浏览器的默认语言 - 该站点自动检测浏览器的默认语言)并将决定要通过单击相应的标记将其转换为俄语,该网站将以俄语显示,但URL将保持不变:http://mysite.com/mycontroller/myaction
。例如,以这种方式,我无法通过Google对其进行适当的索引。如果没有每种语言的每个页面的唯一URL,我将只能为一种语言(我相信默认的一种语言)编制索引。
是否有可能以某种方式调整项目或我是否必须彻底改变网站的结构?一般来说,当用几种语言翻译网站时,基于Zend Framework组织项目结构的最有效方法是什么?
谢谢。
答案 0 :(得分:1)
如何使用自定义路线?例如,通过以下方式定义英语路线:
routes.english.route = "en/:controller/:action"
routes.english.defaults.lang = en