我需要知道.为用户存储Locale的正确方法是什么.如果每个用户的请求我改变语言
App::setLocale($newLocale);
Run Code Online (Sandbox Code Playgroud)
它不会改变我的整个项目和其他请求的语言吗?我的意思是当一个用户更改语言时,它将被用作其他用户的默认语言.
提前致谢
Dee*_*ens 11
App::setLocale()例如,如果您在自己中设置AppServiceProvider.php,则会为所有用户更改.
你可以为此创建一个中间件.就像是:
<?php
namespace App\Http\Middleware;
use Closure;
class SetLocale
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
app()->setLocale($request->user()->getLocale());
return $next($request);
}
}
Run Code Online (Sandbox Code Playgroud)
(您需要getLocale()在User模型上创建一个方法才能使其工作.)
然后在您Kernel.php创建一个中间件组auth:
'auth' => [
\Illuminate\Auth\Middleware\Authenticate::class,
\App\Http\Middleware\SetLocale::class,
],
Run Code Online (Sandbox Code Playgroud)
并auth从$routeMiddleware数组中删除(在你的Kernel.php).
现在,在使用auth中间件的每条路径上,您将为每个用户设置Laravel应用程序的区域设置.
我用控制器、中间件和会话解决了这个问题。这对我来说效果很好,希望对你有帮助。
通过控制器处理用户请求:
只需将语言设置为用户会话即可。
/**
* Locale switcher
*
* @param Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function switchLocale(Request $request)
{
if (!empty($request->userLocale)) {
Session::put('locale', $request->userLocale);
}
return redirect($request->header("referer"));
}
Run Code Online (Sandbox Code Playgroud)
切换区域设置的路线:
Route::post('translations/switchLocale}', ['as' => 'translations.switch', 'uses' => 'Translation\TranslationController@switchLocale']);
Run Code Online (Sandbox Code Playgroud)
处理所需设置的中间件:
在中间件中检查用户会话的语言设置(如果其 pereset 设置了)。
/**
* @param $request
* @param Closure $next
* @param null $guard
* @return mixed
*/
public function handle(Request $request, Closure $next, $guard = null)
{
if (Session::has('locale')) {
App::setLocale(Session::get('locale'));
}
}
Run Code Online (Sandbox Code Playgroud)
最后是切换形式:
{!! Form::open(["route" => "translations.switch", "id" => "sideBarLocaleSelectorForm"]) !!}
{!! Form::select("userLocale", $languages, Session::get("locale")) !!}
{!! Form::close() !!}
<script>
$(document).on("change", "select", function (e) {
e.preventDefault();
$(this).closest("form").submit();
})
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15835 次 |
| 最近记录: |