Lang фасад не обнаруживает изменения приложения Lang - PullRequest
2 голосов
/ 20 апреля 2020

Я пытаюсь изменить локаль приложения в Laravel 7 с помощью контроллера конфигурации:

class ConfigController extends Controller
{
    /**
     *
     * Set the App locale.
     *
     * @param  \SetLocaleRequest  $request
     * @return mixed
     */
    public function set_locale(SetLocaleRequest $request)
    {
        App::setLocale($request->locale);

        return response()->json([
            'message' => trans('config.set'),
        ], 200);
    }
}

Этот код на самом деле работает, потому что простой App:getLocale(); возвращает указанный язык. В любом случае, фасад Lang продолжает использовать локаль по умолчанию, предоставленную в config/app.php, которая является испанской sh. Итак, этот код:

Lang::get('auth.failed')

возвращает текст: "Estas credenciales no coinciden con nuestros registros.", хотя en в данный момент выбрано. Есть идеи почему?

1 Ответ

2 голосов
/ 20 апреля 2020

Динамически изменяемая локаль - 2 шага. Я вижу, вы сделали шаг 1. Шаг 2 должен сделать что-то подобное в вашем блейд-файле (скорее всего, базовый шаблон):

<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">

Обратите внимание, что, как только пользователь переходит на другую страницу, он переворачивает Локаль установить в конфиге. Если вам, однако, необходимо сохранить настройку локали для текущего пользователя, используйте сеанс. Например, в дополнение к моему предыдущему пункту, измените ваш метод контроллера на:

public function set_locale(SetLocaleRequest $request)
    {
        App::setLocale($request->locale);
        Session::put('locale', $request->locale);

        return response()->json([
            'message' => 'locale.set.success',
        ], 200);
    }

Таким образом, вы можете получить к нему непрерывный доступ в шаблоне блейда через: <html lang="{{ str_replace('_', '-', Session::get('locale')) }}">

...