@Yadalay
Php, Mysql, Html, Css, Js/Jquery/Ajax, Laravel

Почему не работает cookie/session выбранного языка?

Добрый вечер!
Использую пакет Mcamara - laravel-localization.
Оставил два доступных языка: russian и hebrew. По умолчанию в конфиге выставлен русский язык. Если перейду по адресу site.ru/ru , то главная страница будет на русском. Если перейду по sire.ru/he - на иврите.
Но дело в том, что когда я перехожу на sire.ru или, например, sire.ru/search, то автоматически подставляется язык, который указан по умолчанию (ru). Пример: sire.ru/ru/search
Route.php:
Route::group([
        'prefix' => LaravelLocalization::setLocale(),
        'middleware' => ['localeCookieRedirect', 'localizationRedirect']
    ], function() {
    Route::group(['middleware' => 'guest'], function() {
        Route::get('/authorization', 'UserController@auth');
        Route::post('/authorization', 'UserController@enter');
    });

    Route::get('/language/{lang}', 'UserController@setLocale'); // Сам переключатель.
});

Kernel.php:
protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'active' => \App\Http\Middleware\LastActive::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'localize' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRoutes::class,
    'localizationRedirect' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRedirectFilter::class,
    'localeCookieRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleCookieRedirect::class
];

Код переключателя:
public function setLocale($lang)
{
    $locale = ($lang == 'hebrew') ? 'he' : 'ru';
    $supported = LaravelLocalization::getSupportedLocales();

    if (array_key_exists($locale, $supported)) {
        $cookie = Cookie::forever('locale', $locale);
    }

    return redirect()->to(LaravelLocalization::getNonLocalizedURL(url()->previous()))->withCookie($cookie);
}

Это последний способ задания cookie.
Подскажите, пожалуйста, как реализовать смену языка сайта с использованием cookie или session с данным пакетом?
  • Вопрос задан
  • 453 просмотра
Решения вопроса 1
@Yadalay Автор вопроса
Php, Mysql, Html, Css, Js/Jquery/Ajax, Laravel
В общем, решил этот вопрос так:
1. Воспользовался этим - https://github.com/mcamara/laravel-localization/co...
2. LocaleCookieRedirect.php:

<?php namespace Mcamara\LaravelLocalization\Middleware;

use Illuminate\Http\RedirectResponse;
use Closure;
use Cookie;

class LocaleCookieRedirect {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle( $request, Closure $next )
    {
        $params = explode('/', $request->path());
        $locale = $request->cookie('locale', false);

        if (count($params) > 0 && app('laravellocalization')->checkLocaleInSupportedLocales($params[0])){
            Cookie::forever('locale', $params[0]);
            
            return $next($request);
        }

        if ( $locale && !(app('laravellocalization')->getDefaultLocale() === $locale && app('laravellocalization')->hideDefaultLocaleInURL())) {
            app('session')->reflash();
            $redirection = app('laravellocalization')->getLocalizedURL($locale);

            return new RedirectResponse($redirection, 302, [ 'Vary' => 'Accept-Language' ]);
        }

        return $next($request);
    }
}

Функция переключателя:

public function setLocale($lang)
{
    $locale = ($lang == 'hebrew') ? 'he' : 'ru';
    $supported = LaravelLocalization::getSupportedLocales();

    if (array_key_exists($locale, $supported)) {
        LaravelLocalization::setLocale($locale);
        $cookie = Cookie::forever('locale', $locale);
    }

    return redirect()->to(LaravelLocalization::getNonLocalizedURL(url()->previous()))->withCookie($cookie);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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