【发布时间】:2022-11-13 07:25:20
【问题描述】:
我正在使用laravel-sluggable 并且我已经设置了translatable slugs。在我的数据库中,我创建了一个 Post,其中包含 3 个翻译,en、nl 和 es。帖子名称是test-locale,而蛞蝓也是test-locale,所以在我的数据库中它看起来像这样:
name: "{"en":"Test EN","es":"Test ES","nl":"Test NL"}",
slug: "{"en":"test-en","es":"test-es","nl":"test-nl"}",
问题是,当访问 url mydomain/posts/{post} 时,它仅适用于我的配置中设置的默认语言环境,即 en。因此,无论我将语言环境设置为什么,只有以下 url 有效:
mydomain.com/posts/test-en
但是,所有翻译都设置为正确的语言环境。将我的config.app 中的语言环境更改为nl 时,以下网址是唯一有效的网址:
mydomain.com/posts/test-nl
我在中间件中设置了我的语言环境,一切正常,除了上面提到的蛞蝓。即使在中间件中这样做:
use Illuminate\Support\Facades\App;
App::setLocale('nl');
它仍然只适用于在我的config.app 中设置的语言环境。但是,奇怪的是,在我的路由文件中设置上述内容时,它确实有效并且使用了正确的语言环境。因此,将以下代码放入我的路由文件时:
use Illuminate\Support\Facades\App;
App::setLocale('nl');
然后我可以使用mydomain.com/posts/test-nl。
那么,我在这里缺少什么?
PS。我已将我的语言环境中间件设置为内核中的 web 组:
\App\Http\Middleware\LocaleMiddleware::class,
【问题讨论】:
-
你检查过stackoverflow.com/q/60415715/3348994 看起来很相似的问题吗
-
不是一回事。现在我已经通过根据我的 RouteServiceProvider 中的 URL 参数设置我的语言环境来解决它,但我仍然不明白为什么它不能与中间件一起使用。