Dro*_*nax 0 php localization laravel
我有一条路线:
Route::get('/setlocale/{locale}', function($locale) {
App::setLocale($locale);
return back();
})->name('setlocale');
Run Code Online (Sandbox Code Playgroud)
当我转到:example.com/setlocale/ro我返回页面。但是语言没有改变。为什么?我总会说语言en。我通过以下方式检查语言:
app()->getLocale();
Run Code Online (Sandbox Code Playgroud)
但是我需要全局设置语言才能应用。
试试这个
Route::get('setlocale/{locale}',function($lang){
\Session::put('locale',$lang);
return redirect()->back();
});
Run Code Online (Sandbox Code Playgroud)
<?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);
}
}
Run Code Online (Sandbox Code Playgroud)
<?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);
}
}
Run Code Online (Sandbox Code Playgroud)
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,
];
Run Code Online (Sandbox Code Playgroud)
'language' => \App\Http\Middleware\LanguageSwitcher::class,
Run Code Online (Sandbox Code Playgroud)
在中间件中,对于每个请求,我们都会检查在当前会话中是否设置了语言环境。如果会话没有语言环境,那么对于当前请求,我们在您的应用程序配置语言环境中将语言环境设置为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
Run Code Online (Sandbox Code Playgroud)
否则,如果我们在当前会话中具有语言环境,则将其设置为App locale
Route::group(['middleware'=>'language'],function ()
{
//your translation routes
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1506 次 |
| 最近记录: |