php - 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 并且仍然有同样的问题。
解决方案
这不是你要找的吗?
# 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(){...}
推荐阅读
- spring - 如何使用 Spring Data REST 防止保存现有实体
- json - 将 LinkedHashmap 列表的 JSON 响应转换为自定义 Java 响应对象
- java - 提取具有非零值的连续数组元素
- python - 将 ax.text 从数据点移开一点
- java - 在 React to Java Backend 中发送带有参数的 get 请求,但在请求的资源上显示 No 'Access-Control-Allow-Origin' 标头
- angular - 如何将一个 Observable 的附加值添加到另一个 Observable?
- react-native - 反应生命周期和 AsyncStorage
- c# - 传递大量参数(ajax、asp.net)
- python - 从 rrule Django / Python 获取重复日期
- scripting - 尝试在 Google Suite 中构建内部工作流引擎