php - Laravel 5.8 全局设置区域设置
问题描述
我有一条路线:
Route::get('/setlocale/{locale}', function($locale) {
App::setLocale($locale);
return back();
})->name('setlocale');
当我去:example.com/setlocale/ro
我回到页面。但语言没有改变。为什么?我总是得到语言en
。我检查语言:
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::get('locale'));
return $next($request);
}
}
3.我们把这个中间件放在kernel.php routeMiddleware (app/Http/kernel.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
});
中间件中的逻辑
在每个请求的中间件中,我们检查当前会话中是否设置了语言环境。如果会话没有语言环境,那么对于当前请求,我们将语言环境设置为配置语言环境意味着在您的应用程序配置语言环境中
'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::get('locale')); // finally set this to App locale
否则,如果我们在当前会话中有语言环境,那么我们将其设置为 App 语言环境
App::setLocale(Session::get('locale')); // set this to App locale
完整的文章和源代码 - www.ultimateakash.com
推荐阅读
- web - 使 bulma 网站在移动设备和桌面设备中一样
- python - 用户输入列表,然后将数字相加计算ISBN校验位
- apache-spark - 如何在 Spark 中对数据进行最佳分区以实现最佳处理
- javascript - 从具有键和索引的对象中检索值作为字符串:'array[0].key'
- python - 每种产品的下“n”天销售
- tabindex - 锚点和标签索引
- javascript - Moment.js - 包含月、周和日的数组
- swift - 手动添加框架后缺少必需的模块
- javascript - 可能未定义的变量
- python - 无法将列表转换为集合,引发“unhashable type: 'list'”错误