使用 Symfony 3 进行路由翻译
Routes translation with Symfony 3
我正在尝试为现有 Symfony 3 网络应用程序中定义的路由添加翻译。我看到 Symfony 4 已经实现了这个功能*,你可以:
foo:
path:
en: contact
es: contacto
cat: contacte
(来自 https://symfony.com/blog/new-in-symfony-4-1-internationalized-routing)
但是对于 Symfony 3,您似乎必须为每个语言环境配置不同的路由名称。如果可能的话,我需要保持路由名称相同,因为很多逻辑都取决于路由名称。
我试过 JMSI18nRoutingBundle 但它似乎没有保持相同的路线名称。
有没有想法为不同的语言环境获取相同的路由名称并进行翻译?
终于从this JMSI18nRoutingBundle issue那里得到了答案。它没有记录,所以有人必须弄清楚:
您需要在 translations 目录中为每个语言环境创建一个 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
等等。
然后您只需清除缓存即可使这些路由正常工作。
您还可以为默认区域设置使用默认路由定义,并避免使用其中一个文件。
我正在尝试为现有 Symfony 3 网络应用程序中定义的路由添加翻译。我看到 Symfony 4 已经实现了这个功能*,你可以:
foo:
path:
en: contact
es: contacto
cat: contacte
(来自 https://symfony.com/blog/new-in-symfony-4-1-internationalized-routing)
但是对于 Symfony 3,您似乎必须为每个语言环境配置不同的路由名称。如果可能的话,我需要保持路由名称相同,因为很多逻辑都取决于路由名称。
我试过 JMSI18nRoutingBundle 但它似乎没有保持相同的路线名称。
有没有想法为不同的语言环境获取相同的路由名称并进行翻译?
终于从this JMSI18nRoutingBundle issue那里得到了答案。它没有记录,所以有人必须弄清楚:
您需要在 translations 目录中为每个语言环境创建一个 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
等等。
然后您只需清除缓存即可使这些路由正常工作。
您还可以为默认区域设置使用默认路由定义,并避免使用其中一个文件。