Skip to content

Instantly share code, notes, and snippets.

@sanmai
Last active October 19, 2015 02:32
Show Gist options
  • Save sanmai/71b540d2aa50e35d2026 to your computer and use it in GitHub Desktop.
Save sanmai/71b540d2aa50e35d2026 to your computer and use it in GitHub Desktop.
Определялка языков
<?php
const LANGUAGE_ENGLISH = 'en';
const LANGUAGE_RUSSIAN = 'ru';
// языки какие мы поддерживаем в порядке приоритета
$languages = [LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH];
// зададим язык из куки если она есть
if (isset($_COOKIE['lang']) && in_array($_COOKIE['lang'], $languages)) {
$curr_lang = $_COOKIE['lang'];
}
// если язык был установлен явно из адресной строки
if (isset($_GET['lang']) && in_array($_GET['lang'], $languages)) {
$curr_lang = $_REQUEST['lang'];
// запомним выбор пользователя в куки (на год)
setcookie('lang', $curr_lang, time() + 31557600, '/');
// здесь можно было бы сделать переадресацию, но мы её не
// делаем чтобы поисковики смогли посмотреть страницу
// header("Location: {$_SERVER['PHP_SELF']}");
// exit();
}
// язык всё ещё не известен, значит получим его из браузера
if (empty($curr_lang) && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
// описание формата здесь http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4
// Пример: ja, en;q=0.7, ru;q=0.5
$user_langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ($user_langs as $key => $lang) {
// используем только два символа из кода языка
$user_langs[$key] = substr($lang, 0, 2);
}
foreach ($user_langs as $lang) {
if (in_array($lang, $languages)) {
$curr_lang = $lang;
break;
}
}
}
// язык по-умолчанию
if (empty($curr_lang)) {
$curr_lang = LANGUAGE_RUSSIAN;
}
?>
<?php if ($curr_lang == LANGUAGE_RUSSIAN): ?>
<p>Говорим по-русски</p>
<p><a href="lang.php?lang=en">Switch to English</a></p>
<?php endif; ?>
<?php if ($curr_lang == LANGUAGE_ENGLISH): ?>
<p>Speak English</p>
<p><a href="lang.php?lang=ru">Переключиться на русский</a></p>
<?php endif; ?>
<?php if (isset($_GET['lang'])): ?>
<p><a href="lang.php">Убрать явное указание языка</a></p>
<?php endif; ?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment