Search code examples
laraveltranslation

Laravel not changing language


Laravel is not changing the language I have tried these methods in controller

if ($request->lang === 'English') {
            config(['app.locale' => 'en']);
        } else {
            config(['app.locale' => 'ar']);
        }

and this method

App::setLocale('ar')

Or this method

\App::setLocale('ar')

What should I do?


Solution

  • You can create a middleware that puts the locale in the session and sets it.

    php artisan make:middleware SetLocale
    

    app\Http\Middleware\SetLocale.php

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\App;
    
    class SetLocale
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle(Request $request, Closure $next)
        {
            if ($request->input('lang') == 'English') {
                $request->session()->put('locale', 'en');
            } else {
                $request->session()->put('locale', 'ar');
            }
    
            App::setLocale($request->session()->get('locale'));
    
            return $next($request);
        }
    }
    

    Then, add it to your global middleware (or to a middleware group).

    app\Http\Kernel.php

    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        // other global middlewares
        \App\Http\Middleware\SetLocale::class,
    ];