многоязычный переключатель laravel и изменение локали при загрузке - PullRequest
0 голосов
/ 10 апреля 2019

Я реализовал функцию переключения языка, следуя этой записи , и она отлично работает, но только когда вы нажимаете на переключатель языка, хотя я хотел бы изменить locale и сохранить его в приложении когда страница загружена.

Моя функция немного отличается от той, что была в посте, я добавил else if только для того, чтобы убедиться, что локаль на приемлемых языках

App/Middleware/Localization.php

public function handle($request, Closure $next)
{
    $availableLangs  = array('en', 'hu', 'pt', 'ro', 'sv');
    $userLangs = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2);

    if (\Session::has('locale'))
    {
        \App::setlocale(\Session::get('locale'));
    }
    else if (in_array($userLangs, $availableLangs))
    {
        \App::setLocale($userLangs);
      // Session::push('locale', $userLangs);
    }
    return $next($request);
}

Как я могу повторно использовать эту функцию или создать новую функцию для достижения того же результата, но при загрузке веб-сайта?

У меня много маршрутов, поэтому я думаю, что мне понадобится функция, чтобы не повторять один и тот же код снова и снова.

Я не использую locale в URL-адресе и не хочу его использовать, поэтому, пожалуйста, не предлагайте решение, включающее эту опцию.

Пример моих URL (каждый URL можно просмотреть на всех доступных языках)

domain/city1/
domain/city1/dashboard/
domain/city2/
domain/city2/dashboard/
domain/admin/

Я не хочу:

domain/city1/en/...
domain/city1/pt/...

1 Ответ

2 голосов
/ 10 апреля 2019

Вероятно, вам нужно что-то вроде этого, всякий раз, когда страница загружается изначально, не будет никакого серверного значения, поэтому она не может установить значение для переменной $userLangs. Таким образом, согласно вашему коду, оператор if не выполняется, так как нет значения сеанса, и условие elseif также не выполняется, поскольку для $userLangs не задано значение, которое нельзя найти в $ availableLangs. Просто добавьте еще одно условие, чтобы установить язык веб-сайта по умолчанию, когда нет предпочтительного языка пользователя.

public function handle($request, Closure $next) 
{
    $availableLangs  = array('en', 'hu', 'pt', 'ro', 'sv');
    $userLangs = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2);

    if (\Session::has('locale'))
    {
        \App::setlocale(\Session::get('locale'));
    }
    else if (in_array($userLangs, $availableLangs))
    {
        \App::setLocale($userLangs);
        Session::put('locale', $userLangs);
    }
    else {
        \App::setLocale('en');
        Session::put('locale', 'en');
    }
    return $next($request);
}
...