I hope you are the best. I’m trying to create a multi-language feature in my Laravel app. but I don’t know how to insert Auth::routes in my web routes file to support my multi-language. this code works for me but Auth::routes links don’t set correctly. the app can identify target language but in Auth::routes() links arent’ correctly. for example, all the page is based on target language but links in the local language. (target is en_us but links in fa_IR)
JavaScript
x
Route::get('/', function ()
{
// echo "befpreRpikte".$request->cookie('language').'<br/>';
// return ('CookieInRoute'/''.request()->cookie('language'));
return redirect(App::getLocale().'/welcome');
})->middleware(CheckLanguage::class);
Route::get('/{locale}',function($locale)
{
return redirect($locale.'/welcome');
});
Route::get('{locale}/welcome',function($locale)
{
//echo('CookieInRoute'/''.request()->cookie('language'));
//die(App::getLocale());
return view('welcome');
})->middleware(CheckLanguage::class);
Route::group(['prefix' =>App::getLocale()], function () {
Auth::routes();
// Route::get(App::getLocale().'/login','HomeController@login');
//Route::get('{locale}/home','HomeController@index');
});
and my middle ware is:
public function handle($request, Closure $next)
{
//echo(var_dump(request()->cookie('language')));
//if(empty(request()->cookie('language')))
cookie()->queue('language',$this->checkUserIsoCode($request->path()),60);
App::setLocale($this->checkUserIsoCode($request->path()));
// dd(request()->cookie('language'));
return $next($request);
}
private function checkUserIsoCode($path)
{
// echo '<br/> <c> c</c></br>';
$available_locales=config('app.all_locales');
if($path==null || $path=="/")// => "/" in addressbar
{
try
{
$userLocale=Location::get(request()->ip())->countryCode;
}
catch(Exception $e)
{
$userLocale="fa_IR";
}
}
else
$userLocale=$path[0];//locale =>/locale/address
foreach($available_locales as $locale)
{
if(strpos($locale,$userLocale)!==false)//if $locale contain userlocale
{
$userLocale=$locale;
break;
}
}
if(!in_array($userLocale,$available_locales,TRUE))
$userLocale=config('app.fallback_locale');
return $userLocale;
}
Advertisement
Answer
You could group all your routes so all of them get locale as prefix:
JavaScript
Route::group(['prefix' => '{locale}'], function() {
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
})->middleware(CheckLanguage::class);
This blog post seems to solve what you are trying to do:
https://laraveldaily.com/multi-language-routes-and-locales-with-auth/