Избегание нескольких маршрутов для разных языков - PullRequest
0 голосов
/ 03 августа 2020

Я перевожу свой сайт на разные языки. По умолчанию языком будет английский sh, который я использую следующий маршрут для возврата «приветствия»:

Route::get('welcome', function ()
{
    return view('welcome');
});

Для других языков я использую этот другой маршрут :

Route::get('welcome/{locale}', function ($locale)
{
    App::setLocale($locale);
    return view('welcome');
});

Есть ли способ объединить эти два маршрута в один? Например, если маршрут «welcome» или «welcome / en», вернуть вид «welcome» на английском языке sh, языке по умолчанию.

Однако, если маршрут «welcome / fr» , "приветствие" должно быть возвращено на французском языке.

У меня будут сотни маршрутов, поэтому я хотел бы иметь возможность комбинировать свои маршруты.

1 Ответ

1 голос
/ 03 августа 2020

Язык по умолчанию для вашего приложения хранится в файле конфигурации config/app.php. Вы можете изменить это значение в соответствии с потребностями вашего приложения. Вы также можете изменить активный язык во время выполнения, используя метод setLocale на фасаде App:

Route::get('welcome/{locale}', function ($locale) {
    if (! in_array($locale, ['en', 'es', 'fr'])) {
        abort(400);
    }

    App::setLocale($locale);

    //
});

Вы можете настроить «запасной язык», , который будет использоваться, когда активный language не содержит заданной строки перевода . Как и язык по умолчанию, резервный язык также настраивается в файле конфигурации config/app.php:

'fallback_locale' => 'en',

Иногда вам может потребоваться указать параметр маршрута, но сделать присутствие этого параметра маршрута необязательным. Вы можете сделать это, поставив отметку ? после имени параметра. Не забудьте присвоить соответствующей переменной маршрута значение по умолчанию:

Route::get('welcome/{locale?}', function ($locale = null) {
    //
});
...