Created
December 1, 2016 23:22
-
-
Save mercuryseries/ea2bd40ee19fbff00391d98637abae0f to your computer and use it in GitHub Desktop.
SetUserLanguage.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Http\Middleware; | |
use Closure; | |
use Illuminate\Support\Facades\{App, Auth, Config, Cookie, Request, Session}; | |
class SetUserLanguage | |
{ | |
/** | |
* Handle an incoming request. | |
* | |
* @param \Illuminate\Http\Request $request | |
* @param \Closure $next | |
* @return mixed | |
*/ | |
public function handle($request, Closure $next) | |
{ | |
// Get the request language | |
$urlLanguage = Request::segment(1); | |
// Get Cookie langugage | |
$cookieLanguage = Cookie::get('language'); | |
// Get the Browser Request language | |
$browserLanguage = substr(Request::server('HTTP_ACCEPT_LANGUAGE'), 0, 2); | |
// Start by checking the request language | |
// Check if the request language is supported or not? | |
if(!empty($urlLanguage) && in_array($urlLanguage, array_keys(Config::get('owebo.supported_languages')))) | |
{ | |
// Check whether the request url language is not the same as the remembered language in cookies | |
if($urlLanguage != $cookieLanguage) | |
{ | |
Session::put('language', $urlLanguage); | |
} | |
// Set the App Locale | |
App::setLocale($urlLanguage); | |
} | |
// Grab the user language in settings if that exists | |
else if(Auth::check() && !is_null($userLanguage = Auth::user()->language)) { | |
// Set User Language | |
App::setLocale($userLanguage); | |
} | |
// Check if there is a language saved as forever cookie and is it supported or not? | |
else if(!empty($cookieLanguage) && in_array($cookieLanguage, array_keys(Config::get('owebo.supported_languages')))) | |
{ | |
// Set App Locale | |
App::setLocale($cookieLanguage); | |
} | |
// Check the browser request language is supported in our app? | |
else if(!empty($browserLanguage) && in_array($browserLanguage, array_keys(Config::get('owebo.supported_languages')))) | |
{ | |
// Check whether the request url language is not the same as the remembered language in cookies | |
if($browserLanguage != $cookieLanguage) | |
{ | |
Session::put('language', $browserLanguage); | |
} | |
// Set Browser Language | |
App::setLocale($browserLanguage); | |
} | |
else | |
{ | |
// Default Application Setting Language | |
App::setLocale(Config::get('app.locale')); | |
} | |
// Get response in order to set the correct language and return it | |
$response = $next($request); | |
$language = Session::get('language'); | |
if(!empty($language)) | |
{ | |
// Send the language cookie | |
return $response->withCookie(Cookie::forever('language', $language)); | |
} | |
return $response; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment