Где проверить, существует ли перевод на язык Laravel? - PullRequest
1 голос
/ 20 апреля 2019

Я переводю свой веб-сайт Laravel, который использует для перевода пакет mcamara / laravel-localization. Я обнаружил, что если кто-то печатает несуществующий язык (например, http://localhost/de/test), на странице есть некоторые ошибки. Поскольку я не хочу проверять и исправлять все страницы на предмет этих ошибок, мне нужно какое-то промежуточное программное обеспечение или обработчик, чтобы проверить, находится ли выбранный язык в массиве с переводами, и если нет, перенаправить на страницу 404.

К сожалению, я не уверен, где сделать эту проверку?

if(!in_array($lang, $languages)) {
    App::abort(404);
}
return true;

Большое спасибо!

1 Ответ

1 голос
/ 20 апреля 2019

считали ли вы, что язык должен быть в строке запроса вместо части конечной точки? например http://localhost/test?lang=de Я видел, как многие разработчики используют этот подход, и я считаю, что он более чистый.

Что касается вашего вопроса, то, похоже, у вас уже есть правильная идея в промежуточном программном обеспечении, поэтому создайте новое и проверьте Illuminate\Translation\Translator там есть несколько методов, которые могут помочь вам определить, существует ли перевод.

Пример:

public function handle($request, Closure $next)
{
    if (Illuminate\Support\Facades\Lang::hasForLocale($someKey,$request->lang)) {
        abort(404);
    }

    return $next($request);
}

$ someKey может быть строкой, которую вы всегда настраиваете на перевод, $ request-> lang может быть сегментом запроса, если вы используете (/de/test).

Другим подходом может быть проверка (!file_exists($path)) $ path в качестве файла перевода, а затем перенаправление.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...