Laravel 5.8 setLocale全局 [英] Laravel 5.8 setLocale globally

查看:150
本文介绍了Laravel 5.8 setLocale全局的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一条路线:

    Route::get('/setlocale/{locale}', function($locale) {
            App::setLocale($locale);

            return back();
    })->name('setlocale');

当我转到:example.com/setlocale/ro时,我返回页面.但是语言没有改变.为什么?我总是得到语言en.我通过以下方式检查语言:

When I go to: example.com/setlocale/ro I return back to page. But language is not changed. Why? I get always language en. I check language with:

    app()->getLocale();

但是我需要为应用程序全局设置语言.

But I need set language globally for application.

推荐答案

尝试这种方式


Route::get('setlocale/{locale}',function($lang){
       \Session::put('locale',$lang);
       return redirect()->back();   
});

2.其次,我们使用了一种中间件来根据我们的会话语言环境(用户选择)翻译页面

<?php

namespace App\Http\Middleware;

use Closure;
use Session;
use App;
use Config;
class LanguageSwitcher
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!Session::has('locale'))
         {
           Session::put('locale',Config::get('app.locale'));
        }
        App::setLocale(session('locale'));
        return $next($request);
    }
}

3.第三,我们将该中间件放入kernal.php routeMiddleware(app/Http/kernal.php)

protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'language' => \App\Http\Middleware\LanguageSwitcher::class,        
    ];

'language' => \App\Http\Middleware\LanguageSwitcher::class,

4.第四,服务于该中间件,我们需要路由组.因此每个请求都通过此中间件

Route::group(['middleware'=>'language'],function ()
{
    //your translation routes
});

中间件中的逻辑

在中间件中,对于每个请求,我们都会检查是否在当前会话中设置了语言环境. 如果会话没有语言环境,那么对于当前请求,我们在您的应用配置语言环境中将语言环境设置为配置语言环境

Logic in middleware

In middleware for every request we check if locale set in current session or not. if Session not having locale then for current request we set locale to config locale means in your app configuration locale

'locale' => 'en',  // config/app.php
 Session::put('locale',Config::get('app.locale')); // in middleware code we use Config method to get app configuration locale
App::setLocale(session('locale')); // finally set this to app locale

否则,如果当前会话中具有语言环境,则将其设置为应用语言环境"

else if we have locale in current session then we set that to App locale

App::setLocale(session('locale')); // set this to app locale

这篇关于Laravel 5.8 setLocale全局的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆