如何使用us / en代替en_US和JMSI18nRoutingBundle

时间:2015-07-19 12:21:19

标签: symfony

我在新网站上使用JMSI18nRoutingBundle进行区域设置路由,但我们现有的网站使用以下格式的语言+国家/地区,我需要保持网址的相同。

  • example.com/us/en/hello(zh_CN)
  • example.com/be/fr/bonjour(fr_BE)

有没有办法使用配置?如果没有,开始定制的最佳位置在哪里?

1 个答案:

答案 0 :(得分:1)

它看起来不可能通过配置完成,但可以通过您自己的实现替换PatternGenerationStrategyInterface的默认实现来完成。

您可以查看捆绑包使用here的默认实施。

创建自己的实现后,只需通过设置config参数使bundle使用您自己的实现。如果您正在使用YAML,例如:

parameters:
    jms_i18n_routing.pattern_generation_strategy.class: YourBundle\YourImplementationClass

提示:您基本上可以从默认实施中复制/粘贴,并将line 69更改为使用str_replace('_', '/', $locale)而不仅仅是$locale。这样,如果语言环境包含/,则新生成的路由模式将包含_

不是很优雅的解决方案,但很遗憾,捆绑包不能提供足够的配置以使其更漂亮。