如何在 Laravel 中创建切换语言?
how to create a switch language in Laravel?
我在构建翻译切换器时遇到了问题,这是我已经做过的:
第 1 步 : 我已经为所有路由添加了语言环境参数 {languge}
Route::redirect('/', '/en');
Route::group(['prefix' => '{language}'], function () {
//products routes
Route::get('/', 'ProductController@index' )->name('acceuil');
Route::get('/boutique/{slug}', 'ProductController@show' )->name('product.show');
Route::get('/search', 'ProductController@search' )->name('product.search');
});
步骤 2: 然后我创建了一个中间件,用于根据请求设置应用程序的语言
public function handle($request, Closure $next)
{
App::setLocale($request->language);
return $next($request);
}
第 3 步:这里我将区域设置参数 {languge} 添加到所有现有链接,如下所示:
<form method="POST" action="{{ route('register', app()->getLocale()) }}">
在这里一切都很好但是:
这里我想创建一个语言切换器,我是这样做的:
第 4 步:这里我将区域设置参数 {languge} 添加到所有现有链接,如下所示:
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ _('language') }}<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{{ route( Route::currentRouteName(), 'fr' ) }}">{{ _('Francais') }}</a></li>
<li role="separator" class="divider"></li>
<li><a href="{{ route( Route::currentRouteName(), 'en' ) }}">{{ _('anglais') }}</a></li>
</ul>
</li>
</ul>
问题是我有不同的路由,其中一些需要参数,然后第 4 步不起作用:
有什么想法吗?
这似乎对我有用:
{{ route(Route::currentRouteName(), array_merge(['fr'], array_slice(($rp = Route::current()->parameters()), 1, count($rp)))) }}
首先我们需要array_slice
参数中的旧语言然后我们可以将它们与新语言合并。由于我们将语言与当前参数合并,因此顺序将始终首先为我们提供语言,然后是当前参数的后续排序。
我在构建翻译切换器时遇到了问题,这是我已经做过的:
第 1 步 : 我已经为所有路由添加了语言环境参数 {languge}
Route::redirect('/', '/en');
Route::group(['prefix' => '{language}'], function () {
//products routes
Route::get('/', 'ProductController@index' )->name('acceuil');
Route::get('/boutique/{slug}', 'ProductController@show' )->name('product.show');
Route::get('/search', 'ProductController@search' )->name('product.search');
});
步骤 2: 然后我创建了一个中间件,用于根据请求设置应用程序的语言
public function handle($request, Closure $next)
{
App::setLocale($request->language);
return $next($request);
}
第 3 步:这里我将区域设置参数 {languge} 添加到所有现有链接,如下所示:
<form method="POST" action="{{ route('register', app()->getLocale()) }}">
在这里一切都很好但是:
这里我想创建一个语言切换器,我是这样做的:
第 4 步:这里我将区域设置参数 {languge} 添加到所有现有链接,如下所示:
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ _('language') }}<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="{{ route( Route::currentRouteName(), 'fr' ) }}">{{ _('Francais') }}</a></li>
<li role="separator" class="divider"></li>
<li><a href="{{ route( Route::currentRouteName(), 'en' ) }}">{{ _('anglais') }}</a></li>
</ul>
</li>
</ul>
问题是我有不同的路由,其中一些需要参数,然后第 4 步不起作用:
有什么想法吗?
这似乎对我有用:
{{ route(Route::currentRouteName(), array_merge(['fr'], array_slice(($rp = Route::current()->parameters()), 1, count($rp)))) }}
首先我们需要array_slice
参数中的旧语言然后我们可以将它们与新语言合并。由于我们将语言与当前参数合并,因此顺序将始终首先为我们提供语言,然后是当前参数的后续排序。