Hello to all TJD followers,

Today we will learn how to make our laravel application support multi language.

What we need:

  1. Language controller
  2. Language middelware
  3. Language config file
  4. Route
  5. Language switcher


Let's begin:

First of all make LanguageController we will use terminal provided by laragon (read tutorial here)

php artisan make:controller LanguageController

Now copy codes below to your LanguageController


namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Config;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Session;

class LanguageController extends Controller
    public function index($lang)
      if (array_key_exists($lang, Config::get('languages'))) {
            Session::put('applocale', $lang);
        return Redirect::back();


Now let's make our middelware

php artisan make:middleware Language

Now copy codes below to your Language middelware and save it


namespace App\Http\Middleware;

use Closure;
use Illuminate\Foundation\Application;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Session;

class Language
     * Handle an incoming request.
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
    public function handle($request, Closure $next)
      if (Session::has('applocale') AND array_key_exists(Session::get('applocale'), Config::get('languages'))) {
      else { // This is optional as Laravel will automatically set the fallback language if there is none specified
      return $next($request);


As our third step open your config folder and create new file name it Languages.php , then copy codes below and save it.


return [
  'en' => [
      'name' => 'English',
      'flag' => 'images/flags/en.png'
  'id' => [
      'name' => 'Indonesian',
      'flag' => 'images/flags/indonesia.png'
  'fa' => [
      'name' => 'پارسی',
      'flag' => 'images/flags/iran.png'

note: here we provided 3 languages for our app you can change it, add into it, or make it less, all are optional depend on your needs.


Now in  step 4 we will making our route for languages, open your web.php file and all line below:

Route::get('lang/{lang}', ['as'=>'lang.switch', 'uses'=>'[email protected]']);


Step 5 is to making dropdown in our view so users can select their preferred language:

note: personally I add it in my navbar but you are free to use it wherever it suits you.

     {{ Config::get('languages')[App::getLocale()]['name'] }} 
    @foreach (Config::get('languages') as $lang => $language)
    @if ($lang != App::getLocale())
          {{ $language['name'] }}


Last thing you need to do is to add your language files in resources -> lang -> language name we made in our config file such as (en , fa , id ) and add your words,


Here is an example:

in en folder we have file named admindashboard.php and inside it is look like this:


  return [
    'welcome' => 'Welcome',

in our id folder we have same file and inside it is look like this:


  return [
    'welcome' => 'Selamat Datang',


now to show the line of word in our view we will use:

{{ trans('admindashboard.welcome') }}

first value is name of our file admindashboard and second value is line of translation welcome .



PS: in this tutorial I pulled the trigger and showed a trick that normally language packages will not provide and that's showing languages flag image, it took me a while till I understand how to show languages images and now you have it painless and free.


Please share your comment with us about this tutorial.

Share this article: