ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-Laravel 5.8 setLocale全球

2019-10-10 04:50:09  阅读:219  来源: 互联网

标签:php laravel localization


我有一条路线:

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

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

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

    app()->getLocale();

但是我需要全局设置语言才能应用.

解决方法:

试试这个

1.首先,当用户选择一种语言时,我们在会话中加入我们选择的语言环境(例如en,fr,hi)


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
});

中间件中的逻辑

在中间件中,对于每个请求,我们都会检查在当前会话中是否设置了语言环境.
如果会话没有语言环境,那么对于当前请求,我们在您的应用程序配置语言环境中将语言环境设置为config 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

否则,如果我们在当前会话中具有语言环境,则将其设置为App locale

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

标签:php,laravel,localization
来源: https://codeday.me/bug/20191010/1884344.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有