@konchychp
fullstack developer; founder of IT solution

Мультиязычность Laravel 8 в зависимости от ГЕО юзера?

Здравствуйте. Вопрос интересует - как задать мультиязычность для своего сайта в зависимости от языка пользователя предпочтительного?

Переключение я уже реализовал - и базовый перевод для теста. Всегда базовое значение указывается en - и я понимаю app config я могу поменять - но это не то, так как там есть базовый язык и язык который будет в качестве замены. Мне нужно что бы через мидльвар проверялся язык пользователя и устанавливался в качестве приоритетного!

SetLocale - Middleware

public function handle(Request $request, Closure $next)
    {
        $locale = session('locale');

        $defaultLocale = App::getLocale(); - вот тут я думаю ошибка где то, ну или вы мне подскажите :((

        App::setLocale($locale ?? $defaultLocale);

        return $next($request);
    }


web.php

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

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


karnel

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'admin' => \App\Http\Middleware\CheckIfAdmin::class,
        'set locale' => \App\Http\Middleware\SetLocale::class,


HomeController
public function changeLocale($locale)
    {

        session(['locale' => $locale]);
        App::setLocale($locale);
        return redirect()->back();
    }
  • Вопрос задан
  • 335 просмотров
Решения вопроса 1
@konchychp Автор вопроса
fullstack developer; founder of IT solution
Сделал по дубовому - но если кто предложит лучше - я не откажусь !

SetLocale.php (Middleware)

public function handle(Request $request, Closure $next)
    {
        $locale = session('locale');

        $defaultLocale = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);


        App::setLocale($locale ? $defaultLocale : $defaultLocale);

        return $next($request);
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы