Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 08.08.2021 14:30:36

Настройка локализации (мультиязычности) на сайте

Всем привет!
Ни как не могу докрутить локализацию на сайте.
Для локализации использую этот пакет.
Произвел настройки в соответствии с описанием. В шапке сайта поместил переключатель, который должен переключать язык.
Создал отдельный контролер для смены языка. При выборе языка происходит редирект на главную страницу и язык сайта не меняется. Можете подсказать где я чего упустил. Когда изменяю название маршрута для смены языка ('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>

Не в сети

#2 11.09.2021 13:09:55

Re: Настройка локализации (мультиязычности) на сайте

Навскидку.
Почему в роуте

Route::get('locale/{locale}', [MainController::class, 'changeLocale'])->name('locale');

не указан '/' вначале?

Изменено Androbim (11.09.2021 13:10:58)

Не в сети

Подвал раздела