Laravel 5 在 API 条路线上应用用户本地化

Laravel 5 Apply user localization on API routes

我按照 link 中的教程进行操作。 是的,它与我的网络路线配合得很好。我有 2 个受支持的语言环境,它们是英语 (en) 和瑞典语 (sv)。我将用户的语言环境选择保存到 Session 但是,我的应用程序主要由对 API 路由的 ajax 请求组成;所以我的 API 路由不受用户语言环境选择的影响。如何在 API 路线上设置本地化?

我在我的控制器上做了类似的事情解决了问题(不确定这样做是否好),但我不认为我这样做是对的,因为我将添加这段代码我的每一个控制器。

class UserController extends Controller
{
  function __construct() {
    $user = Auth::guard('api')->user();

    if ($user && $user->lang != "") {
        \App::setLocale($user->lang);
    }
} ...

我不知道我做的对还是错。如何改进这个解决方案?提前致谢!

您可以将用户的区域设置存储在数据库中。然后,用户 object 将在每个经过身份验证的请求中获取,然后您可以使用它的语言环境。如果 api 中没有身份验证或者您需要将语言环境应用于非身份验证路由,则必须在每个请求中提供语言环境。这可以通过查询字符串或 headers.

编辑:根据您的评论,您的做法是正确的。但是您需要使用基于闭包的中间件来访问经过身份验证的用户。

https://laravel.com/docs/5.3/upgrade#session-in-the-constructor

public function __construct()
{
    $this->middleware(function ($request, $next) {
        $user = auth()->guard('api')->user();

        if($user && $user->lang != "" ){
            app()->setLocale($user->lang);
        }

        return $next($request);
    });
}