Я создал приложение Laravel на нескольких языках на английском и немецком языках.
Итак, у меня есть «my-domain.com/en» и «my-domain.com/de», если ни один языковой сегмент не былустановить, и кто-то непосредственно посещает my-domain.com. Я обнаружу HTTP_ACCEPT_LANGUAGE
и установлю его, если он находится в моих предопределенных локалях.
Мой язык возврата - немецкий. Для обычных пользователей он отлично работает, но большинство веб-инструментов SEO для анализа моего веб-сайта выдает ошибку, когда я набираю «my-domain.com», и они возвращают ошибку 500
, поэтому я использовал http://redirectcheck.com/ чтобы узнать, что происходит, когда бот заходит на мой сайт, и он также возвращает: HTTP/2 500
Промежуточное программное обеспечение Language.php Код:
public function handle($request, Closure $next)
{
//All predefined Languages [Array]
$locales = config('app.locales');
// Check if the first segment matches a language code
if (!array_key_exists($request->segment(1), $locales)) {
//Detect Browser Lang
$detectedLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
// Store segments in array
$segments = $request->segments();
if(array_key_exists($detectedLang, $locales)) {
$segments = Arr::prepend($segments, $detectedLang);
}else {
$segments = Arr::prepend($segments, config('app.fallback_locale'));
}
// Redirect to the correct url
return redirect()->to(implode('/', $segments));
}
// The request already contains the language code
return $next($request);
}