PHP программист (xyzya) wrote,
PHP программист
xyzya

Автоматический выбор необходимой пользователю языковой версии сайта на PHP

Сегодня появилась задача сделать для сайта, на котором используется интерфейс на двух языках, сделать автоматическое определение системного языка у пользователя. Чтобы пользователю сходу отдавать интерфейс на нужном ему языке.
В связи с этим набросал туториал с примером этого функционала.

Немного теории.

Я выбрал самый простой вариант определения языка у пользователя (есть и сложные), но не самый надежный (хотя абсолютно надежных вариантов не существует).
У каждого браузера есть поддержка локализаций (это то, на каком языке интерфейс браузера у вас). У FireFox локализация выставляется в меню «Инструменты->Дополнения->Локализации», в Opera в меню «Настройки->Общие настройки->Основные->Язык», в остальных ищите сами. Так вот наша задача узнать какой язык выставлен у пользователя, и согласно этому языку отдавать необходимую версию сайта.
У себя я сделал так, что если у пользователя выставлена русская, украинская или белорусская локализация, то отдавать ему русскую версию сайта, в противном случае отдавать английскую. Значение локализации браузера хранится в строке $_SERVER["HTTP_ACCEPT_LANGUAGE"], эту строку мы и будем проверять (учтите, что в этой строке через запятую могут быть указаны разные локализации, нам же важно только самое первое значение — оно имеет высший приоритет). Но проверять значение этой строки мало, могут быть ситуации, когда пользователю надо другую языковую версию сайта, например, он иностранец, сидящий в русском интернет кафе, и ему нужна англоязычная версия сайта, не смотря на русскую локализацию браузера. Этому пользователю при первой загрузке отдаем версию согласно его локализации, но далее, если он вручную на сайте выберет другую, более приемлемую ему версию сайта, то надо его выбор запомнить, и больше не навязывать ему то, от чего он ушел. Поэтому выбор пользователя мы будем сохранять в куках при помощи setcookie(); и далее проверять не сохранен ли выбор пользовательских языковых предпочтений в куках, если сохранен, то отдавать ему согласно его предпочтений до тех пор, пока эти предпочтения не поменяются.

А теперь практика.

Если теория ясна, то написать код не составит проблем, но для примера делюсь своим вариантом с комментариями.

// действие с проверкой языка и установкой куки языка проводим только на странице index.php
>if (strpos($_SERVER["REQUEST_URI"], "/index.php") or (substr($_SERVER["REQUEST_URI"], -1)  == "/")) {
	// если вход произведен без указания языка
	if (!$_GET['lang']) {
		// то проверяем, может язык указан в куках, если нет, то то смотрим локализацию браузера
		if (!$_COOKIE['lang']) {
			$b_lang = explode(",", $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
			// если локализация русская или украинская или белорусская, то считаем, что пользователю необходимо отдавать русскую версию сайта.
			if (($b_lang[0] == "ru") or ($b_lang[0] == "be") or ($b_lang[0] == "ru-UA")) $lang = "rus";
			// при всех остальных локализациях отдаем английскую версию
			else $lang = "eng";
		}
		// если язык уже указан в куках, то его и используем в системе
		else $lang = $_COOKIE['lang'];
	}
	// если страница запрошена с указанием языка, то этот язык и используем в системе, и запоминаем его в куку
	else {
		$lang = $_GET['lang'];
		setcookie("lang", $lang, time()+30758400, "/");
	}
}

На выходе в переменной $lang получаем рабочее значение языка – rus или eng.

Это сообщение опубликованно в моём основном блоге. Вы можете комментировать как и тут, так и напрямую под сообщением в блоге.
Tags: рабочие будни
Subscribe

  • сайт Crimea GP

    На прошлой неделе запустили новый проект. Это сайт крымской мото-трассы Crimea GP. Серверная часть: PHP, mySQL. Клиентская: XHTML, CSS,…

  • Ubuntu

    После недолгих колебаний решил снова вернуться на Ubuntu linux. Пользовался им несколько лет назад, когда не было безлимитного интерента, и тогда…

  • Христианская галерея

    На этой недели дошли руки до того, чтобы немного переписать движок для сайта c-gallery.org.ua Это сайт для галереи, которая сейчас работает в…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments