0

假设我有这种 URL:

example.com/en/
example.com/en/login
example.com/fr/login

我想使用中间件来设置语言,然后在没有语言部分的情况下返回要处理的路由。所以路由器会得到/or /login,没有任何语言的东西。

public function handle(Request $request, Closure $next) {
        app()->setLocale($request->segment(1));
        // $request->server->set('REQUEST_URI', substr($_SERVER['REQUEST_URI'], 4));// not working

        return $next($request);
    }
4

1 回答 1

0

我建议将语言存储在会话中并使用中间件来设置区域设置。

工作示例

SetLocale.php 中间件

public function handle($request, Closure $next)
{
    if (Session::has('language'))
    {
        App::setLocale(strtolower(Session::get('language')));
    }
    return $next($request);
}

将语言设置为会话的控制器功能

 public function setLanguage(string $language)
{
    if (Session::has('language'))
    {
        Session::forget('language');
    }
    Session::put('language', $language);

    return redirect()->back();
}

所以现在在网站上发生的所有事情上,中间件都会检查语言并将其设置为会话中的内容。

也不要忘记在 app\Http\Kernel.php 的 $middlewareGroups 中指定中间件

您可以在网站上的任何地方创建一个表单,供用户选择他的语言偏好,并带有到控制器功能的路由。

于 2020-09-24T12:51:46.977 回答