Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Всем привет!
Ни как не могу докрутить локализацию на сайте.
Для локализации использую этот пакет.
Произвел настройки в соответствии с описанием. В шапке сайта поместил переключатель, который должен переключать язык.
Создал отдельный контролер для смены языка. При выборе языка происходит редирект на главную страницу и язык сайта не меняется. Можете подсказать где я чего упустил. Когда изменяю название маршрута для смены языка ('locale/{locale}' => '/{locale}' язык переключается, но при переходе на другую страницу и там пытаюсь переключить язык, происходит редирект на главную страницу. Как можно настроить так, чтобы я оставался на той же странице.
Настройка маршрутов:
// маршрут для смены языка
Route::get('locale/{locale}', [MainController::class, 'changeLocale'])->name('locale');
Route::group(
[
'prefix' => LaravelLocalization::setLocale(),
'middleware' => ['localeSessionRedirect', 'localizationRedirect', 'localeViewPath']
],
function () {
Route::get('/', [MainController::class, 'index'])->name('index');
Route::get('/about', [AboutController::class, 'index'])->name('about');
Route::get('/contacts', [ContactController::class, 'index'])->name('contacts');
// auth
Auth::routes();
// admin
Route::group([
'middleware' => 'auth',
// 'namespace' => 'Admin',
'prefix' => 'admin'
], function () {
Route::get('/home', [HomeController::class, 'index'])->name('home');
Route::resource('/categories', CategoryController::class);
});
}
);
Код метода changeLocale
public function changeLocale($locale)
{
$availableLocales = getArrayLang();
if (!in_array($locale, $availableLocales)) {
$locale = config('app.locale');
}
$test = session(['locale' => $locale]);
App::setlocale($locale);
return redirect()->back();
}
Код middleware setlocale
public function handle(Request $request, Closure $next)
{
$locale = session('locale');
App::setlocale($locale);
return $next($request);
}
Код для переключения языка на сайте:
<ul id="lang-list" class="header__lang-list d-none">
@foreach (getArrayLang() as $lang)
@if(getCurrentLang() !== $lang)
<li>
<a href="{{ route('locale', $lang) }}">
{{ $lang }}
</a>
</li>
@endif
@endforeach
</ul>
Не в сети
Навскидку.
Почему в роуте
Route::get('locale/{locale}', [MainController::class, 'changeLocale'])->name('locale');
не указан '/' вначале?
Изменено Androbim (11.09.2021 13:10:58)
Не в сети