0

我正在将 PHP 应用程序从“自己的”“框架”移植到 Zend 框架(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)定义。

有什么想法吗?尖端?

4

1 回答 1

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>
    

注意路由配置中的@。这将导致它被翻译。然后我添加了一个无意义的(用于 ZF)标签“翻译”,以便 Poedit 将其拾取。

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

  • 然后我用 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),因为我希望所有路由都组装成小写等。

干杯!

于 2012-10-08T09:00:37.027 回答