Как написать проверку страны, чтоб перенаправить по умолчанию на страницу на соответствующем языке в laravel 5?

Пользователь

от autumn_parker , в категории: PHP , 2 года назад

Как написать проверку страны, чтоб перенаправить по умолчанию на страницу на соответствующем языке в laravel 5?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от stephon , 2 года назад

@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. Если пользователь заходит на любой маршрут в этой группе, он будет автоматически перенаправлен на соответствующую страницу в зависимости от языка его браузера.

Пользователь

от kyleigh_runte , 2 месяца назад

@autumn_parker 

Для проверки страны и перенаправления на соответствующую страницу в Laravel 5 можно использовать Middleware и информацию о стране из IP-адреса пользователя. В данном примере будет использоваться пакет GeoIP, который позволяет получить информацию о стране по IP-адресу.

  1. Установите пакет GeoIP:
1
composer require torann/geoip


  1. Создайте Middleware для проверки страны:
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. Зарегистрируйте Middleware в файле app/Http/Kernel.php:
1
'check.country' => AppHttpMiddlewareCheckCountry::class,


  1. Примените Middleware к нужным маршрутам в файле routes/web.php:
1
2
3
4
5
Route::group(['middleware' => ['check.country']], function () {
    Route::get('/', function () {
        return view('welcome');
    });
});


При обращении к корневому маршруту, Middleware CheckCountry будет определять страну пользователя и перенаправлять на страницу на соответствующем языке. В случае, если страна не определена или не находится в списке, пользователь будет перенаправлен на исходную страницу.