#php #laravel #authentication #routes
#php #laravel #аутентификация #маршруты
Вопрос:
Я надеюсь, что вы лучший. Я пытаюсь создать многоязычную функцию в моем приложении Laravel. но я не знаю, как вставить Auth::routes в мой файл веб-маршрутов для поддержки моего многоязычия. этот код работает для меня, но ссылки Auth::routes установлены неправильно. приложение может определить целевой язык, но ссылки в Auth::routes() неверны. например, вся страница основана на целевом языке, но ссылки на локальном языке. (цель — en_us, но ссылки в fa_IR)
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;
}
Ответ №1:
Вы могли бы сгруппировать все свои маршруты, чтобы все они получали locale в качестве префикса:
Route::group(['prefix' => '{locale}'], function() {
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
})->middleware(CheckLanguage::class);
Этот пост в блоге, похоже, решает то, что вы пытаетесь сделать:
https://laraveldaily.com/multi-language-routes-and-locales-with-auth/