【问题标题】:Routes translation with Symfony 3使用 Symfony 3 进行路由翻译
【发布时间】:2020-05-21 16:06:45
【问题描述】:

我正在尝试为现有 Symfony 3 Web 应用程序中定义的路由添加翻译。我看到 Symfony 4 已经实现了这个功能*,你可以:

foo:
  path:
    en: contact
    es: contacto
    cat: contacte

(来自https://symfony.com/blog/new-in-symfony-4-1-internationalized-routing

但是对于 Symfony 3,您似乎必须为每个语言环境配置不同的路由名称。如果可能,我需要保持路由名称相同,因为很多逻辑取决于路由名称。

我尝试使用JMSI18nRoutingBundle,但它似乎没有保持相同的路线名称。

有没有办法为不同的语言环境获取相同的路线名称并翻译它们?

【问题讨论】:

  • 你的意思是像使用语言环境参数({_locale})?您可以使用相同的路由名称,但最终会使用不同的路径。 symfony.com/doc/3.4/routing.html#advanced-routing-example
  • @Jeroen 但是如何使用这种方法翻译上例中的路线?
  • 有什么好的理由坚持使用 Symfony 3 而不是简单地更新到 Symfony 4?
  • @NicoHaase 是的,PHP 5

标签: symfony routes internationalization symfony-3.4


【解决方案1】:

终于,我得到了this JMSI18nRoutingBundle issue的答复。它没有记录在案,所以有人必须弄清楚:

您需要为翻译目录中的每个语言环境创建一个routes.<locale>.yml,并使用 route_name 和 locale_route 作为键值。例如

# routes.en.yml
contact: /contact
who_we_are: /who-we-are
# routes.es.yml
contact: /contacto
who_we_are: /quienes-somos

等等。

然后你只需要清除缓存来让这些路由正常工作。

您还可以为您的默认语言环境使用默认路由定义并避免使用这些文件之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 2015-02-22
    • 2013-11-29
    • 2023-01-28
    相关资源
    最近更新 更多