Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

kendrick's avatar

Language Middleware, based on 'language_id' integer

Currently trying to check on a 'language_id' integer for my authenticated users/partners and then set the correct language parameters for their session?

Language.php middleware

class Language
{
    protected $default = 'en';

    protected $languages = [
         'en',
         'de', 
    ];

    public function handle($request, Closure $next)
    {
        if($request->has('lang')) {
            $lang = $request->lang;
            if(array_search($lang, $this->languages) === false) {
                $lang = $this->default;
            }
    
        // How can I check on the authenticated user (User.php or Partner.php, both with 'language_id' on their table, referring to Language.php)
    
           if(auth()->guard('partner')){
        
        if (auth()->user()->language_id == 1) {
                    $request->session()->put('lang', 'en');
                } elseif (auth()->user()->language_id == 2) {
                    $request->session()->put('lang', 'de');
                }
       } else{
        
        if (auth()->user()->language_id == 1) {
                    $request->session()->put('lang', 'en');
                } elseif (auth()->user()->language_id == 2) {
                    $request->session()->put('lang', 'de');
                }
       }

            $request->session()->put('lang', $request->lang);
        }

        \App::setLocale( $request->session()->get('lang') );

        return $next($request);
    }
}
0 likes
3 replies
komalbhatt's avatar

Yeah! I used the same method in my previous project and it worked for me .

kendrick's avatar

How am i able to trigger the language, without creating a form with a button, around the select? (Footer Dropdown)

<select>
<option value="{{ route('lang', ['lang' => 'en']) }}"><button type="submit"><a href="{{ route('lang', ['lang' => 'en']) }}">English</a></button></option>
<option value="{{ route('lang', ['lang' => 'de']) }}">German</option></a> 
</select>
36864's avatar
36864
Best Answer
Level 13

You'd need a bit of javascript for that, listening for the select's onchange event to redirect the user. Something like this:

<select onchange="changeLanguage(this.value);">
    {{-- options --}}
</select>

(...)

<script>
    function changeLanguage(val) {
        window.location = val;
    }
</script>
1 like

Please or to participate in this conversation.