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 }}">
编码愉快!
我实现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 }}">
编码愉快!