Skip to content

Instantly share code, notes, and snippets.

@mercuryseries
Created December 1, 2016 23:22
Show Gist options
  • Save mercuryseries/ea2bd40ee19fbff00391d98637abae0f to your computer and use it in GitHub Desktop.
Save mercuryseries/ea2bd40ee19fbff00391d98637abae0f to your computer and use it in GitHub Desktop.
SetUserLanguage.php
<?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