如何组织多语种zend项目

时间:2013-01-14 19:21:20

标签: zend-framework structure multilingual zend-translate

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

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

1 个答案:

答案 0 :(得分:1)

如何使用自定义路线?例如,通过以下方式定义英语路线:

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