[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Определения языка браузера и последующий редирект
Страницы: 1, 2
Kiriill1
Цитата (killer8080 @ 21.08.2020 - 15:41)
Цитата (Kiriill1 @ 20.08.2020 - 22:37)
Да, на сайте есть выбор языка (красивая панелька)

в приведённом коде она не будет работать, ведь у тебя браузеры с русской локалью принудительно редиректятся на русскую версию. О чём я и говорил
Цитата (killer8080 @ 20.08.2020 - 21:33)
Нет механизма ручного выбора языка.

выбор языка должен как то фиксироваться и учитываться перед редиректом.
Цитата (Kiriill1 @ 20.08.2020 - 22:37)
А, как покрасивше написать код? "я пока ещё не волшебник, а только учусь"

красота понятие относительное, особенно в коде :)
Ну во первых регулярка вида '/^\w{2}/' делает тоже самое что и substr(), но ресурсов жрет больше, хоть это и мизер в данном случае.
Во вторых обращение к $_SERVER['HTTP_ACCEPT_LANGUAGE'] без проверки на существование переменной, зачем в коде лишний нотис?
вариант с куками

$available_langs = ['ru', 'en']; // массив поддерживаемых локалей
$selected_lang = isset($_COOKIE['lang']) && in_array($_COOKIE['lang'], $available_langs) ? $_COOKIE['lang'] : null;
$browser_lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) : null;
$current_page_lang = 'en'; // тут должен быть язык текущего урл, реализация будет зависеть от архитектуры приложения. Для примера присвоен en

if ($selected_lang && $selected_lang != $current_page_lang) {
lang_redirect($selected_lang);
}

if (!$selected_lang && in_array($browser_lang, $available_langs) && $browser_lang != $current_page_lang) {
lang_redirect($browser_lang);
}

function lang_redirect ($lang) {
// здесь прверяем доступность указанной локализации для текущего урл
if ('<если недоступно>') {
return;
}

$url = '/'. $lang .'/index.php'; // определяем урл для редиректа, зависит от архитектуры и вида урл
header("Location: $url");
die;
}


смена языка будет происходить установкой кук либо на клиенте, либо на сервере.
Недостаток метода
1 смена языка невозможна при отключенных куки
2 если вдруг поисковый бот выставит заголовок с английской локалью, то не сможет проиндексировать русскую версию (это лишь предположение, я не знаю какие заголовки они шлют, но потенциально такая ситуация возможна)

Супер! Спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.