0

A simple scenario when we want to setup the Locale Language settings (App::setLocale()) depending on a $_GET parameter as in following URL:

http://aboutlaravel.com/?language_code=en

Possible Solution: Create a middleware and register it in app/Http/Kernel.php

protected $middlewareGroups = [
    'web' => [
        ...
        \App\Http\Middleware\Localization::class
    ],

The Localization middleware will look like this:

public function handle($request, Closure $next)
{
    if(isset($_GET['language_code'])) {
        if ($_GET['language_code'] == "en") {
            App::setLocale("en");
        } else if ($_GET['language_code'] == "de") {
            App::setLocale("de");
        }
    }
    return $next($request);
}
Ardit
  • 98
  • 1
  • 3
  • 16

2 Answers2

3

I don't see the question, but I think you need it.

   if(empty($request->input('language_code'))) {
        // set "en" as default language
        App::setLocale("en");
    } else {
        App::setLocale($request->input('language_code'));
    }
Vahe Shak
  • 957
  • 7
  • 19
  • The mark for checking the empty string is correct! The question is how can you do it in a better aproach :) – Ardit Nov 09 '17 at 12:27
  • One line case `App::setLocale(empty($request->input('language_code')) ? 'en' : $request->input('language_code'))` – Vahe Shak Nov 09 '17 at 14:30
2

With PHP >= 7.0 you can use a very nice one liner.

Just use this:

App::setLocale(request('langauge_code', 'en'));

// en is the default if request has no language_code

Voilà :)

Matz
  • 1,006
  • 10
  • 27