@DocTypeMaster

Как сделать выбор языка в Laravel?

Делаю один сайтик и необходимо сделать мультиязычность, в официальной документации ларавел 8 нашел вот этот код:
use Illuminate\Support\Facades\App;

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

    App::setLocale($locale);
});

Я так понимаю это нужно запихнуть в web

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

Я в конечном итоге я понял что для "/" и "/ru" нужно 2 разных роута, и я это сделал вот так
Route::get('/', function () {
    return view('welcome');
});

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

    App::setLocale($locale);
});

Но, как я писал ранее, не работает вообще все кроме этих двух роутов. Как это правильно сделать, подскажите (оф документация вообще не разъяснила этот момент).
  • Вопрос задан
  • 176 просмотров
Пригласить эксперта
Ответы на вопрос 2
@MadridianFox
Web-программист, многостаночник
Я бы не пытался поддерживать пути с языком и без.
Думаю достаточно / редиректитить на /ru, как это делает тот же habr.com например, а все остальные ссылки всегда делать с языком.
Т.е. /ru/posts/1 это нормально, а /posts/1 это уже ошибка.

Далее, я бы все, вообще все роуты обернул бы в группу
Route::prefix('{lang}')->group(function () {
  //...
});


После этого я бы написал middleware, который берёт из запроса код языка, и выставляет локаль.

А ещё, т.к. язык это параметр в path, то для нусущетсвующего языка надо отдавать код 404, а не 400.
Ответ написан
Комментировать
@EDF
Век живи - век учись! Банально, но факт...
В свое время для этой цели в небольшом своем проекте использовал этот пакет:
https://github.com/mcamara/laravel-localization
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы