public function handle(Request $request, Closure $next)
 {
     app('events')->listen('locale.changed', function ($locale) {
         app('xe.translator')->setLocale($locale);
     });
     // check locale at request & set locale
     $locale = $request->get('_l');
     if (!$locale) {
         $locale = $request->cookie('locale', app('xe.translator')->getLocale());
     }
     app()->setLocale($locale);
     app('cookie')->queue(cookie()->forever('locale', $locale));
     app('router')->matched(function ($route, $request) use($locale) {
         $key = self::class . '://' . $request->method() . '/' . $route->getPath() . '/' . $locale;
         app('xe.translator')->setCurrentCacheKey($key);
     });
     if ($request->has('xe_use_request_preprocessor') && $this->available()) {
         $this->prepare($request);
     }
     /** @var Response $response */
     $response = $next($request);
     if ($request->has('xe_use_request_preprocessor') && $this->available()) {
         $this->conduct($request);
     }
     return $response;
 }