Задать вопрос
@konchychp
fullstack developer; founder of IT solution

Мультиязычность laravel 8 с прафиксами в роуте?

Доброй ночи всем. Вопрос из той-же оперы.
Нужно реализовать мультиязычность. Собственно то я ее реализовал, но не могу понять как правильнее (а точнее вообще "как") задать локализацию с перенаправлениями на префиксы в заивисмости от пользовательского языкового предпочтения.

Web.php
Route::group(['namespace' => 'Site', 'middleware' => 'set locale', 'prefix' => '{locale}',
        'where' => ['locale' => '[a-zA-Z]{2}'],], function() {
        // Base websites Urls
        Route::get('/', 'HomeController@index')->name('home');
       
    });

// Site routes


SetLocale.php - Middleware
public function handle(Request $request, Closure $next)
    {
       
        app()->setLocale($request->segment(1));

        return $next($request);
    }


Как в ручную добавлять или без префиксов - я уже решил - нужно что бы в зависимости грубо говоря от $_SERVER['HTTP_ACCEPT_LANGUAGE'] я мог парсить это в роуты автоматически а не прописывать все в 100 контроллеров.
  • Вопрос задан
  • 1746 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@konchychp Автор вопроса
fullstack developer; founder of IT solution
Пока мне не дадут более лаконическое решени или скорее я сам его найду, просто не в 3 утра, то оставлю так пока для dev версии. Может и мой вариант кому то понадобится

web.php
Route::get('locale/{locale}', 'Site\HomeController@changeLocale')->name('locale');

Route::group(['middleware' => 'locale'], function(){
    Route::get('/', function () { return redirect (app()->getLocale(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2))); });
});

Route::group(['namespace' => 'Site', 'middleware' => 'locale', 'prefix' => '{locale}',
    'where' => ['locale' => '[a-zA-Z]{2}'],], function() {

    // Base websites Urls
    Route::get('/', 'HomeController@index')->name('home');
});

// Site routes

SetLocale.php - middleware
public function handle(Request $request, Closure $next)
    {
        App::setLocale(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
        return $next($request);
    }

Роуты в home.blade.php
href="{{ route('bonus', [app()->getLocale()])}}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Посмотри здесь
Там для 5-ой Лары, но работает и на 8-ой. Проверено.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы