Здравствуйте. Вопрос интересует - как задать мультиязычность для своего сайта в зависимости от языка пользователя предпочтительного?
Переключение я уже реализовал - и базовый перевод для теста. Всегда базовое значение указывается 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();
}