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

  • Fatal error: Call-time pass-by-reference has been removed

    Каждое новое обновление серверного программного обеспечения — это упражнение из области «и хочется, и колется…». Так и я решил…

  • fpdf (ufpdf) «fatal error: allowed memory size of…»

    В текущем проекте появилась необходимость делать экспорт некоторых документов в PDF. Один из лучших классов, существующих на сегодняшний день…

  • Автоматическое создание субдоменов в Apache2

    Мне приходится работать с движками многих сайтов, постоянно появляются для обслуживания новые, и уходят в архивное забвение старые. Поэтому часто…

  • 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