Last active
October 19, 2015 02:32
-
-
Save sanmai/71b540d2aa50e35d2026 to your computer and use it in GitHub Desktop.
Определялка языков
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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