красота понятие относительное, особенно в коде :)
Ну во первых регулярка вида '/^\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';
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 если вдруг поисковый бот выставит заголовок с английской локалью, то не сможет проиндексировать русскую версию (это лишь предположение, я не знаю какие заголовки они шлют, но потенциально такая ситуация возможна)