App::setLocale()
不是持久性的,它僅爲當前請求設置語言環境。你可以做的是:
Route::post('/locale', function(){
session(['my_locale' => Request::Input('locale')]);
return redirect()->back();
});
這將設置session key
當前用戶 後,我們將需要一個Middleware
檢測區域
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Foundation\Application;
class Language {
public function __construct(Application $app, Request $request) {
$this->app = $app;
$this->request = $request;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$this->app->setLocale(session('my_locale', config('app.locale')));
return $next($request);
}
}
這將讓會話,如果是空,將回退到您的應用配置中設置的默認語言環境。
打開app\Http\Kernel.php
並添加此行:
protected $middleware = [
\App\Http\Middleware\Language::class,
];
隨着全球middlware或者只是網絡。 希望它幫助你有一個想法,它是如何工作
方案№2 在您的網站應用程序配置
'available_locale' => ['fr', 'gr', 'ja'],
內創建一個所有可用的語言環境的array
中間件裏面,我們將查詢的網址第一段en fr gr cy
,如果這部分是available_locales_array
我們設置的地點
public function handle($request, Closure $next)
{
if(in_array($request->segment(1), config('app.available_locales_array'))){
$this->app->setLocale($request->segment(1));
}else{
$this->app->setLocale(config('app.locale'));
}
return $next($request);
}
您將東東d修改app\Providers\RouteServiceProvider
設置所有路線的前綴。這樣你就可以訪問它們domain.com
或domain.com/fr/
與French language
查找:mapWebRoutes
這添加到它:
if(in_array($request->segment(1), config('app.available_locales_array'))){
$locale = $request->segment(1);
}else{
$locale = null;
}
Route::group([
'middleware' => 'web',
'namespace' => $this->namespace,
'prefix' => $locale
], function ($router) {
require base_path('routes/web.php');
});
這將與國信的所有路線,如「FR克CY」前綴除EN非重複的內容,所以最好不添加到available_locales_array
setLocale不是持久的,所以改變它然後重定向會使其成爲默認值。期待使用會話(或數據庫)和中間件來爲用戶做出永久性更改。我應該注意到,如果這是一個面向公衆的網站,你應該爲不同的語言使用不同的網址。 – Devon