Laravel 5 Применение пользовательской локализации на маршрутах API

Я следовал учебнику из этого ссылка на сайт.
И да, он отлично работает с моими веб-маршрутами. У меня есть 2 поддерживаемых языка: английский (en) и шведский (sv). Я сохраняю выбор языка пользователя в Session тем не менее, мое приложение в основном состоит из запросов Ajax к маршрутам API; Таким образом, мои маршруты API не зависят от выбора локали пользователя. Как я могу установить локализацию на маршрутах API?

Я сделал что-то подобное на своем контроллере, что решило проблему (не уверен, хорошо ли это делать таким образом), но я не думаю, что я делаю это правильно, так как я буду добавлять этот код на каждый мой контроллер.

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

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

Я не знаю, правильно ли я поступаю или нет. Как можно улучшить это решение? Заранее спасибо!

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]