2017-05-19 28 views
1

私はこのlinkからチュートリアルに従いました。 ええ、それは私のウェブルートでうまくいっています。私は英語とスウェーデン語の2つのロケールをサポートしています。私はユーザーのロケール選択をSessionに保存しますが、私のアプリは主にAPIルートへのajaxリクエストで構成されています。だから私のAPIルートは、ユーザーのロケールの選択に影響を受けません。 APIルートでローカリゼーションを設定するにはどうすればよいですか?Laravel 5.4 APIルートでのユーザーローカライズの適用

私はこの問題を解決したコントローラでこのようなことをしました(このようにするのが良いかどうかはわかりませんが)。私はこのコードを私のすべてのコントローラ。

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

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

私は正しいか悪いのか分かりません。このソリューションをどのように改善できますか?前もって感謝します!

+1

何ベースコントローラでそのコードを入れてはどうですか? – waterloomatt

+0

@waterloomattありがとう、ええ、あなたは正しい。提案に感謝します。 – dexterb

答えて

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

私はすでにデータベースにユーザーのロケールを格納しており、ユーザーがロケールを変更するたびに更新します。私は自分の質問を更新し、私が試したことを加えました。私の更新された質問の回答ベースを改善できますか? – dexterb

+1

@dexterbクロージャベースのミドルウェアを使用してコンストラクタで認証されたユーザーを取得する必要がある場合を除いて、うまくいくはずです。https://laravel.com/docs/5.3/upgrade#session-in-the-constructor – Sandeesh

+0

そうですか。ありがとうございました。ベースコントローラーにコードを追加しましたが、すべて正常に動作します。 – dexterb

関連する問題