使用Zend Framework以两种语言提供路由

时间:2012-09-17 15:12:04

标签: zend-framework routing

我正在将一个PHP应用程序从一个'自己的''框架'移植到Zend Framework(1.11.11)和Doctrine2。这一切都很好,除了该应用程序有两种语言,荷兰语和德语。我正在寻找一种方法来使两个URL可访问:

我用Regex路线尝试了这个但是不太好,因为现在必须总是在组装时给出'page'参数:

resources.router.routes.viewreviews.type = "Zend_Controller_Router_Route_Regex"
resources.router.routes.viewreviews.route = "(klantbeoordelingen|kundenbewertung)[/]?([0-9]*)"
resources.router.routes.viewreviews.reverse = "%s/%d"
resources.router.routes.viewreviews.defaults.module = "default"
resources.router.routes.viewreviews.defaults.controller = "review"
resources.router.routes.viewreviews.defaults.action = "index"
resources.router.routes.viewreviews.map.name = 1
resources.router.routes.viewreviews.map.page = 2

关键是我需要提供现在不可能的页面参数。我可以制作两条正则表达式路线,但这不是一个好方法。因为我会得到很多路线,所有这些路线几乎都是一样的。

我认为我不会查找链接路由,因为该语言未包含在URL中。该语言由您正在访问的域名(.nl或.de)定义。

有什么想法吗?提示?

1 个答案:

答案 0 :(得分:1)

经过一些研究,有一个解决方案。我做的是以下内容:

  • 我在routes.xml文件中重写了我的路由。例如:

    <viewreviews>
        <type>BestBuy_Router_Route</type>
        <route>@klantbeoordelingen/:page</route>
        <translate>klantbeoordelingen</translate>
        <defaults>
            <module>default</module>
            <controller>review</controller>
            <action>index</action>
            <page>0</page>
        </defaults>
    </viewreviews>
    

注意路线配置中的@。这将导致它被翻译。然后我添加一个mengless(用于ZF)标签'translate',这样它就会被Poedit选中。

  • 我编辑我的.po文件并在poedit中执行以下操作:poedit and xml files

  • 然后我用poedit抓取我的XML文件,它会找到标签,并会质疑你翻译它们。

  • 翻译完这些内容后,请确保在路由器中设置了正确的翻译器。我在自己编写的前控制器插件中的routeStartup循环中执行此操作:

        Zend_Controller_Router_Route::setDefaultLocale($translate->getLocale());
        Zend_Controller_Router_Route::setDefaultTranslator($translate);
    

$ translate是一个Zend_Translate对象。

这对你有用。翻译的路线与Zend_Controller_Router_Route一起使用。我扩展了这个类并改进了(BestBuy_Router_Route),因为我希望所有的路由都能组装得更低等等。

干杯!