2

我最近一直在努力解决这个问题,我真的需要一些帮助。

所以我实现了这个教程:https ://youtu.be/KqzGKg8IxE4为我的项目添加本地化,​​它适用于除了语言之外不需要其他参数的路线。我想要做的只是将 url 的语言环境作为链接的第一段,所以它应该遵循这个模式:

  • example.com/en/shop
  • example.com/en/products/5/edit

但是参数较多的路由不应该受这个前缀的影响。

我已经找到了更多可能的修复方法,例如删除所有资源分组路由并手动键入它们,这将需要永远,或者覆盖所有路由以将参数用作语言切换器,例如' example.com/shop ?lang=en ' 然后实现一个 URL Generator 宏,正如这个问题中所回答的那样。

另外,我尝试在语言切换器组件中添加一个可选参数,直接在我的刀片文件中,就像这样

<language-switcher locale="{{ app()->getLocale() }}" 
     link-fr="{{ route(Route::currentRouteName(), ['locale' => 'fr', 'id' => '/{id?}']) }}" 
     link-en="{{ route(Route::currentRouteName(), ['locale' => 'en','id' => '/{id?}']) }}">
</language-switcher>

但这里发生的是它只是为没有其他参数的路由添加一个随机 id,并且只有那些需要正好 2 个参数的路由才能工作。

所有这些解决方案都很棒,但就我而言,它们都无法应用,因为正如我之前所说,我的要求是以链接的第一段应该是语言的方式实现本地化。

我觉得有一种优雅的方法可以解决这个问题,我将不胜感激任何建议,因为我不再对如何解决这个问题有任何想法。

谢谢 !

4

1 回答 1

1

您可以从路由对象中获取当前路由参数,例如:

<language-switcher locale="{{ app()->getLocale() }}" 
     link-fr="{{ route(Route::currentRouteName(), array_merge(request()->route()->parameters(), [ 'locale' => 'fr' ])) }}" 
     link-en="{{ route(Route::currentRouteName(), array_merge(request()->route()->parameters(), [ 'locale' => 'en' ])) }}">
</language-switcher>

请注意,这假设有一个匹配的路由,该路由通常是正确的,但在显示某些错误页面(如 404 页面)时,如果路由不匹配,则不会是正确的。所以需要注意的地方

于 2021-04-22T06:25:39.707 回答