我正在将一个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)定义。
有什么想法吗?提示?
答案 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),因为我希望所有的路由都能组装得更低等等。
干杯!