【问题标题】:Laravel Locale not set properlyLaravel 语言环境设置不正确
【发布时间】: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 参数设置我的语言环境来解决它,但我仍然不明白为什么它不能与中间件一起使用。

标签: php laravel locale


【解决方案1】:

我通过在RouteServiceProvider 中设置我的语言环境解决了这个问题,在boot 方法中:

request()->segment(1)
    ? app()->setLocale(request()->segment(1))
    : app()->setLocale('en');

【讨论】:

    猜你喜欢
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2013-01-10
    • 2020-04-05
    • 2010-09-09
    相关资源
    最近更新 更多