@autumn_parker
Для реализации перенаправления на страницу на соответствующем языке в Laravel 5 можно использовать Middleware, который будет проверять язык браузера пользователя и перенаправлять на соответствующую страницу.
Вот пример Middleware для проверки языка браузера и перенаправления на соответствующую страницу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php namespace AppHttpMiddleware; use Closure; use IlluminateHttpRequest; use IlluminateSupportFacadesRedirect; class CheckLanguage { public function handle(Request $request, Closure $next) { $supportedLanguages = ['en', 'fr', 'es']; // список поддерживаемых языков $language = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2); // получаем язык браузера пользователя if (!in_array($language, $supportedLanguages)) { // если язык не поддерживается, перенаправляем на страницу по умолчанию return Redirect::to('/en'); } // иначе перенаправляем на соответствующую страницу return Redirect::to('/' . $language); } } |
Затем, чтобы использовать Middleware в Laravel 5, нужно зарегистрировать его в файле app/Http/Kernel.php
:
1 2 3 4 |
protected $routeMiddleware = [ // ... 'check.language' => AppHttpMiddlewareCheckLanguage::class, ]; |
И наконец, чтобы применить Middleware к нужным маршрутам, можно использовать следующий код:
1 2 3 |
Route::group(['middleware' => ['check.language']], function () { // здесь описываем маршруты для всех языков }); |
Это группа маршрутов, к которой будет применяться Middleware CheckLanguage
. Если пользователь заходит на любой маршрут в этой группе, он будет автоматически перенаправлен на соответствующую страницу в зависимости от языка его браузера.
@autumn_parker
Для проверки страны и перенаправления на соответствующую страницу в Laravel 5 можно использовать Middleware и информацию о стране из IP-адреса пользователя. В данном примере будет использоваться пакет GeoIP, который позволяет получить информацию о стране по IP-адресу.
1
|
composer require torann/geoip |
1
|
php artisan make:middleware CheckCountry |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php namespace AppHttpMiddleware; use Closure; use TorannGeoIPFacadesGeoIP; class CheckCountry { public function handle($request, Closure $next) { $country = GeoIP::getLocation()->country; switch($country) { case 'US': return redirect('/en'); break; case 'FR': return redirect('/fr'); break; case 'ES': return redirect('/es'); break; default: return $next($request); } } } |
1
|
'check.country' => AppHttpMiddlewareCheckCountry::class, |
1 2 3 4 5 |
Route::group(['middleware' => ['check.country']], function () { Route::get('/', function () { return view('welcome'); }); }); |
При обращении к корневому маршруту, Middleware CheckCountry
будет определять страну пользователя и перенаправлять на страницу на соответствующем языке. В случае, если страна не определена или не находится в списке, пользователь будет перенаправлен на исходную страницу.