1

我已经建立了一个多语言网站。可以通过单击站点上的标志来切换语言。单击其中任何一个时,请求将提交给具有以下代码的控制器:

<?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 框架组织项目结构的最有效方法是什么?谢谢你。

4

1 回答 1

1

使用自定义路由怎么样?例如,通过以下方式为英语定义一条路线:

routes.english.route = "en/:controller/:action"
routes.english.defaults.lang = en
于 2013-01-15T09:57:02.373 回答