Zend framework 用模块实现Zend_语言环境和Zend_翻译

Zend framework 用模块实现Zend_语言环境和Zend_翻译,zend-framework,zend-translate,zend-locale,Zend Framework,Zend Translate,Zend Locale,我在互联网上搜索了一个将Zend_语言环境和Zend_翻译集成为模块化结构的好解决方案。这是我想要的结束路径: 这里的第一个问题是,当使用路由时,您需要有非常特定的约束,以便将规则与这么多变量相匹配 我建议不要同时接受//url/:lang/:module/:controller/:action和//url/:module/:controller/:action,而是只使用第一个结构。通过这种方式,可以更容易地将第一个规则与这个//url/:lang/:controller/:action隔

我在互联网上搜索了一个将Zend_语言环境和Zend_翻译集成为模块化结构的好解决方案。这是我想要的结束路径:




这里的第一个问题是,当使用路由时,您需要有非常特定的约束,以便将规则与这么多变量相匹配

我建议不要同时接受//url/:lang/:module/:controller/:action和//url/:module/:controller/:action,而是只使用第一个结构。通过这种方式,可以更容易地将第一个规则与这个//url/:lang/:controller/:action隔离开来,其中只有两个规则,每个规则都有不同的“单词”(url部分)

在第一个路由中,您没有指定任何默认值,因此它与第二个路由的URL不匹配,而在第二个路由中,您默认模块(因为ZF需要该信息)

至于第三条规则,我建议使用基本祖先控制器,类似于MyLib_控制器,并在其init()方法中验证是否接收到语言参数,如下例所示:

if(!$this->_getParam('lang')) {
    //this should cover the 3rd use case
    $this->_redirect('/en/' + $this->view->url(), array('exit' => true, 'prependBase' => false));
} else {
    //setup Zend_Translate
}

另一种可能是将:lang变量限制为只有2个字母的单词,但这会产生问题,我宁愿避免它。

这里的第一个问题是,当使用路由时,您需要有非常具体的约束,以便将规则与这么多的变量相匹配

我建议不要同时接受//url/:lang/:module/:controller/:action和//url/:module/:controller/:action,而是只使用第一个结构。通过这种方式,可以更容易地将第一个规则与这个//url/:lang/:controller/:action隔离开来,其中只有两个规则,每个规则都有不同的“单词”(url部分)

在第一个路由中,您没有指定任何默认值,因此它与第二个路由的URL不匹配,而在第二个路由中,您默认模块(因为ZF需要该信息)

至于第三条规则,我建议使用基本祖先控制器,类似于MyLib_控制器,并在其init()方法中验证是否接收到语言参数,如下例所示:

if(!$this->_getParam('lang')) {
    //this should cover the 3rd use case
    $this->_redirect('/en/' + $this->view->url(), array('exit' => true, 'prependBase' => false));
} else {
    //setup Zend_Translate
}
另一种可能是将:lang变量限制为只有两个字母的单词,但这会产生问题,我宁愿避免使用它