首页 > 解决方案 > Symfony i18n 路由:部分语言支持

问题描述

我有几十条路线定义如下:

services:
    path:
        en: /en/services
        de: /de/dienstleistungen
    controller: App\Controller\SimplePageController::page

这是使用我相信在 Symfony 4.1 中引入的本地化路由。

这些路线都有英语和德语的路径。现在我想用其他语言翻译一些特定的页面。比如我的主页。问题是,如果我在主页的路径中添加另一种语言,它将无法加载,因为它无法创建指向没有以这种新语言定义的路径的其他页面的链接

如果我访问 /nl/homepage,Twig 中的以下链接生成失败

<link href="{{ path('services') }}">

有错误

无法为命名路由“服务”生成 URL,因为这样的路由不存在。

如果当前语言没有路由,我如何告诉 Symfony 创建指向英语路由的链接?或者更好的是,指定一些动态路径:

services:
    path:
        en: /en/services
        de: /de/dienstleistungen
        default: /$1/services
    controller: App\Controller\SimplePageController::page

编辑:我现在使用 Symfony 5.0.4 并且仍然有同样的问题。

标签: phpsymfonyroutingsymfony4symfony5

解决方案


这不是你要找的吗?

# config/packages/translation.yaml
framework:
    translator:
        fallbacks: ['en']

它会告诉您该语言是否未定义为使用“en”作为默认后备。

编辑:那么您可能会尝试使用某种解决方法,但不确定这是否是您正在寻找的

# config/services.yaml
parameters:
    app.localesForSpecificRouting: en|de
    app.localesForAnotherSpecificRouting: en|de|fr

然后在您的控制器中,您可以为特定路线加载特定语言

/**
 * @Route("/{_locale}/routing1", name="routing1", requirements={
 *     "_locale"="%app.localesForSpecificRouting%"
 * })
 */
 public function routing1(){...}

 /**
 * @Route("/{_locale}/routing2", name="routing2", requirements={
 *     "_locale"="%app.localesForAnotherSpecificRouting%"
 * })
 */
 public function routing2(){...}

推荐阅读