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

时间:2017-05-19 12:12:28

标签: php localization laravel-5.4 laravel-localization

我遵循了这个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);
    }
} ...

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

1 个答案:

答案 0 :(得分:1)

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

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

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);
    });
}