Laravel 更改语言环境后重定向回同一页面

Laravel Redirect back to same page after changing locale

我实现multilang的方式是通过中间件和路由。

中间件 Localization.php 看起来像这样:

public function handle(Request $request, Closure $next)
{
    $locale = $request->segment(1); 


    if(empty($locale)) { 
        return redirect()->to('/' . app()->getLocale());
    }

    if(in_array($locale, ['en','it'])) {
        App::setLocale($locale);
        $request->except(0); 
    }

    return $next($request);
}

在我的 web.php 中我有:

Route::get('locale/{locale}', function ($locale){

  \Session::put('locale', $locale);
  $path = Route::getCurrentRoute()->getPath();

  return redirect($path);

})->name('langroute');

在blade中我是这样使用的:

<a class="dropdown-item" href="{{ url('/en') }}">

如何在更改为另一种语言后重定向回同一页面?

我希望这个答案能对某人有所帮助,因为我知道很多人都为此苦苦挣扎。 感谢 @khaledw62,他在 laracasts 中回答了我:Link here

我在这里写下答案。

1- 您可以像这样在 blade 上管理它:

 @php
    $thisUrl = url()->current().'/';
    if (app()->getlocale() == 'en') {
        $newUrl  = str_replace('/en/', '/it/', $thisUrl);
    }else{
        $newUrl  = str_replace('/it/', '/en/', $thisUrl);
    }
 @endphp

您可以像这样重定向到 $newYrl

<a class="dropdown-item" href="{{ $newUrl }}">

2- 另一种方法是在您的 AppServiceProvider:

中为您的所有视图共享一个全局变量,如下所示
<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    //
}

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    $thisUrl = url()->current().'/';
    if (app()->getlocale() == 'en') {
        $newUrl  = str_replace('/en/', '/it/', $thisUrl);
    }else{
        $newUrl  = str_replace('/it/', '/en/', $thisUrl);
    }
    View::share('newUrl', $newUrl);
}
}

您可以像以前一样在 blade 中重定向:

<a class="dropdown-item" href="{{ $newUrl }}">

编码愉快!