Laravel 10 Localization Guide Example

Localization in Laravel is a powerful feature that allows you to create multilingual applications with ease. In this guide, I'll walk you through the steps to enable and use localization in Laravel.

Step 1: Install Laravel App

composer create-project laravel/laravel example-Localization

Step 2: Create Lang Files

We need to run following commands for lang files: 

php artisan lang:publish

Create Below list file for English languge(en), French(fr) and etc ,

resources/lang/en/messages.php

<?php
  
    return [
      
        'title' => 'This is English Language Title.',
      
    ];

resources/lang/fr/messages.php

<?php
   
    return [
      
        'title' => 'Ceci est le titre fr langue anglaise.',
      
    ];

resources/lang/sp/messages.php

<?php
  
    return [
      
        'title' => "Il s'agit du titre en langue espagnole.",
      
    ];
    

Step 3: Create Routes

routes/web.php 

<?php
  
    use Illuminate\Support\Facades\Route;
      
    use App\Http\Controllers\LangController;
      
    /*
    |--------------------------------------------------------------------------
    | Web Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register web routes for your application. These
    | routes are loaded by the RouteServiceProvider within a group which
    | contains the "web" middleware group. Now create something great!
    |
    */
      
    Route::get('lang/home', [LangController::class, 'index']);
    Route::get('lang/change', [LangController::class, 'change'])->name('changeLang');

Step 4: Create LangController Controller

app/Http/Controllers/LangController.php 

<?php
  
    namespace App\Http\Controllers;
      
    use Illuminate\Http\Request;
    use Illuminate\View\View;
    use Illuminate\Http\RedirectResponse;
    use App;
      
    class LangController extends Controller
    {
        /**
         * Display a listing of the resource.
         *
         * @return \Illuminate\Http\Response
        */
        public function index(): View
        {
            return view('lang');
        }
      
        /**
         * Display a listing of the resource.
         *
         * @return \Illuminate\Http\Response
        */
        public function change(Request $request): RedirectResponse
        {
            App::setLocale($request->lang);
            session()->put('locale', $request->lang);
      
            return redirect()->back();
        }
    }

Step 5: Create View

resources/views/lang.blade.php 

<!DOCTYPE html>
    <html>
    <head>
        <title>How to Create Multi Language Website in Laravel - webthestuff.com</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    </head>
    <body>
        <div class="container">
      
            <h1>How to Create Multi Language Website in Laravel - webthestuff.com</h1>
      
            <div class="row">
                <div class="col-md-2 col-md-offset-6 text-right">
                    <strong>Select Language: </strong>
                </div>
                <div class="col-md-4">
                    <select class="form-control changeLang">
                        <option value="en" {{ session()->get('locale') == 'en' ? 'selected' : '' }}>English</option>
                        <option value="fr" {{ session()->get('locale') == 'fr' ? 'selected' : '' }}>France</option>
                        <option value="sp" {{ session()->get('locale') == 'sp' ? 'selected' : '' }}>Spanish</option>
                    </select>
                </div>
            </div>
        
            <h1>{{ __('messages.title') }}</h1>
         
        </div>
    </body>
      
    <script type="text/javascript">
      
        var url = "{{ route('changeLang') }}";
      
        $(".changeLang").change(function(){
            window.location.href = url + "?lang="+ $(this).val();
        });
      
    </script>
    </html>

Step 6: Create Middleware

php artisan make:middleware LanguageManager

app/Http/Middleware/LanguageManager.php

<?php
  
    namespace App\Http\Middleware;
      
    use Closure;
    use Illuminate\Http\Request;
    use Symfony\Component\HttpFoundation\Response;
    use App;
      
    class LanguageManager
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
         */
        public function handle(Request $request, Closure $next): Response
        {
            if (session()->has('locale')) {
                App::setLocale(session()->get('locale'));
            }
              
            return $next($request);
        }
    }

 

Now we need to register it to kernel file. so let's add it as bellow:

app/Http/Kernel.php

<?php
  
    namespace App\Http;
      
    use Illuminate\Foundation\Http\Kernel as HttpKernel;
      
    class Kernel extends HttpKernel
    {
        ....
      
        /**
         * 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\LanguageManager::class,
            ],
      
            'api' => [
                'throttle:60,1',
                \Illuminate\Routing\Middleware\SubstituteBindings::class,
            ],
        ];
      
        ...

Run Laravel Project:

php artisan serve

Now, Go to web browser, type the given URL and see the output:

http://localhost:8000/lang/home