如何更改 blade laravel 中的前缀语言环境?

How to change prefix locale in blade laravel?

我有中间件

    public static function getLocale()
    {
        $mainLanguage = config('translatable.locale');
        $languages = config('translatable.locales');
        $uri = Request::path();
        $segmentsURI = explode('/',$uri);
        if (!empty($segmentsURI[0]) && in_array($segmentsURI[0], $languages)) {

            return $segmentsURI[0];

        } else {
            return  $mainLanguage;
        }
    }

    public function handle($request, Closure $next)
    {
        $locale = self::getLocale();
        if($locale) {
            App::setLocale($locale);
        }
        return $next($request);
    }

这是我的 routes/web.php

Route::group(['middleware' => ['localize'], 
'prefix' => App\Http\Middleware\LocaleMiddleware::getLocale()], function () {
...routes...
});

这是我的 header.blade,我想在其中更改下拉选项的语言

<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
     @foreach(config('translatable.locales') as $locale)
              <a class="dropdown-item" href="#">{{strtoupper($locale)}}</a>
     @endforeach
</div>

我的页眉已连接到布局,并且在所有页面上都可用。 我希望我的路线看起来像这样(示例): .../en/news .../en/news/1

What should I write in a href so that I can change the language? I tried {{$locale . "/" . Request::segment(2)}} but i get .../es/news/ru/news

我解决了我的问题。我在路线

中添加了功能
Route::get('setlocale/{lang}', function ($lang) {

        $referer = Redirect::back()->getTargetUrl();
        $parse_url = parse_url($referer, PHP_URL_PATH);
        $segments = explode('/', $parse_url);
        if (in_array($segments[1], App\Http\Middleware\LocaleMiddleware::$languages)) {

            unset($segments[1]);
        }
        if ($lang != App\Http\Middleware\LocaleMiddleware::$mainLanguage){
            array_splice($segments, 1, 0, $lang);
        }
        $url = Request::root().implode("/", $segments);
        if(parse_url($referer, PHP_URL_QUERY)){
            $url = $url.'?'. parse_url($referer, PHP_URL_QUERY);
        }
        return redirect($url);

    })->name('setlocale');