Soiposervices Logo
Laravel 5.3 add multi-language functionality - Blog Post Image
18 September, 2025

Laravel 5.3 add multi-language functionality

Icon Writer

Luigi Laezza

Icon Time to read

3 minutes

Web Development

During a recent project, we faced the issue of adding a multi-language functionality to our application.

We store our Laravel applications on DigitalOcean, but this tutorial will work basically on any other hosting company.

Using Laravel middlewares we found a quite easy and straightforward solution.

In this tutorial, we will show you how to easily create your own.

ADD AVAILABLE LOCALES IN THE CONFIGURATIONS
In order to allow only certain locales to work, simply add right below the locale key  in config/app.php the following array:

'locales' => [
    'en' => 'English',
    'it' => 'Italiano'],

CREATE A CUSTOM MIDDLEWARE
First, let’s create a custom middleware running the following command.

php artisan make:middleware Language

This will create Language.php in App\Http\Middleware. Modify the handle method adding your own logic, in our example, we will use a query parameter _locale to modify the application locale and set a _locale session variable to store this choice and maintain the locale across various pages.

public function handle($request, Closure $next)
{
    $locales = config('app.locales');
    $locale = $request->get('_locale');
    if(!is_null($locale) && is_array($locales) && array_key_exists($locale, $locales)){
        app()->setLocale($locale);
        session(['_locale'=>$locale]);
    }elseif(!is_null(session('_locale'))){
        app()->setLocale(session('_locale'));
    }
    return $next($request);
}

MODIFY THE MIDDLEWARE WEB GROUP
Now we just need to tell Laravel how to use our class. We found that adding this middleware to the “web” middleware group was pretty comfortable so, open the App\Http\Kernel and insert your Language class declaration in the web array like the code below:

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \App\Http\Middleware\Language::class
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

That’s it, now you can change your app locale simply using ?_locale=it in the URL.

Related Articles

Get in touch with us!

We are here to help you get started with your next project

Get a free quote on your next project Arrow Icon

Subscribe to our newsletter

We are here to offer you our talent.

Our Partners

Github Icon LinkedIn Icon X Icon Facebook Icon Instagram Icon RSS Icon
Copyright © 2025 SoipoServices. | All Rights Reserved | Subscribe to our newsletter | Privacy Policy | Cookie Policy