the browser-facing portion of osu!
at master 1.4 kB view raw
1<?php 2 3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 4// See the LICENCE file in the repository root for full licence text. 5 6namespace App\Http\Middleware; 7 8use App; 9use App\Libraries\AcceptHttpLanguage\Parser; 10use Auth; 11use Carbon\Carbon; 12use Closure; 13use Illuminate\Http\Request; 14 15class SetLocale 16{ 17 /** 18 * Handle an incoming request. 19 * 20 * @param \Illuminate\Http\Request $request 21 * @param \Closure $next 22 * 23 * @return mixed 24 */ 25 public function handle(Request $request, Closure $next) 26 { 27 $this->setLocale( 28 Auth::user()?->user_lang ?? presence($request->cookie('locale')), 29 $request, 30 ); 31 32 return $next($request); 33 } 34 35 protected function setLocale(?string $locale, Request $request): void 36 { 37 if ($locale !== null) { 38 $locale = get_valid_locale($locale); 39 } 40 $locale ??= $this->localeFromHeader($request); 41 42 App::setLocale($locale); 43 // Carbon setLocale normalizes the locale 44 Carbon::setLocale($locale === 'sr' ? 'sr_Cyrl' : $locale); 45 } 46 47 private function localeFromHeader(Request $request): string 48 { 49 return (new Parser())->languageRegionCompatibleFor($request->server('HTTP_ACCEPT_LANGUAGE')) 50 ?? $GLOBALS['cfg']['app']['fallback_locale']; 51 } 52}