Я бы не пытался поддерживать пути с языком и без.
Думаю достаточно / редиректитить на /ru, как это делает тот же habr.com например, а все остальные ссылки всегда делать с языком.
Т.е. /ru/posts/1 это нормально, а /posts/1 это уже ошибка.
Далее, я бы все, вообще все роуты обернул бы в группу
Route::prefix('{lang}')->group(function () {
//...
});
После этого я бы написал middleware, который берёт из запроса код языка, и выставляет локаль.
А ещё, т.к. язык это параметр в path, то для нусущетсвующего языка надо отдавать код 404, а не 400.