Reputation: 103
I have middleware
public static function getLocale()
{
$mainLanguage = config('translatable.locale');
$languages = config('translatable.locales');
$uri = Request::path();
$segmentsURI = explode('/',$uri);
if (!empty($segmentsURI[0]) && in_array($segmentsURI[0], $languages)) {
return $segmentsURI[0];
} else {
return $mainLanguage;
}
}
public function handle($request, Closure $next)
{
$locale = self::getLocale();
if($locale) {
App::setLocale($locale);
}
return $next($request);
}
This is my routes/web.php
Route::group(['middleware' => ['localize'],
'prefix' => App\Http\Middleware\LocaleMiddleware::getLocale()], function () {
...routes...
});
This is my header.blade, where I want to change the language of my dropdown choice
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
@foreach(config('translatable.locales') as $locale)
<a class="dropdown-item" href="#">{{strtoupper($locale)}}</a>
@endforeach
</div>
My header is connected to layout and is available on all pages. I want my routes to look like this (example): .../en/news .../en/news/1
What should I write in
a href
so that I can change the language? I tried{{$locale . "/" . Request::segment(2)}}
but i get .../es/news/ru/news
Upvotes: 0
Views: 639
Reputation: 103
I resolved my issue. I added function in route
Route::get('setlocale/{lang}', function ($lang) {
$referer = Redirect::back()->getTargetUrl();
$parse_url = parse_url($referer, PHP_URL_PATH);
$segments = explode('/', $parse_url);
if (in_array($segments[1], App\Http\Middleware\LocaleMiddleware::$languages)) {
unset($segments[1]);
}
if ($lang != App\Http\Middleware\LocaleMiddleware::$mainLanguage){
array_splice($segments, 1, 0, $lang);
}
$url = Request::root().implode("/", $segments);
if(parse_url($referer, PHP_URL_QUERY)){
$url = $url.'?'. parse_url($referer, PHP_URL_QUERY);
}
return redirect($url);
})->name('setlocale');
Upvotes: 1