Php как узнать язык браузера
Как работает WWW (всемирная паутина, веб) в двух словах:
- браузер пользователя (клиент) отправляет на сервер запрос с адресом сайта (URL);
- сервер получает этот запрос и отдаёт клиенту требуемый тому контент.
- Заголовков запроса/ответа;
- Тела запроса/ответа.
Сначала идёт список заголовков, затем пустая строка, а затем (если есть) тело запроса/ответа.
2. Сервер принимает запрос и отправляет ответ:
3. Браузер принимает ответ и показывает готовую страницу
- Метод, которым будет запрошен контент;
- Адрес страницы;
- Версию протокола.
GET — это метод (глагол), который мы применяем для доступа к указанной странице.
GET является самым часто используемым методом, потому что он говорит серверу о том, что клиент всего лишь хочет прочитать указанный документ. Но помимо GET есть и другие методы, один из них мы рассмотрим уже в следующем разделе.
После строки с указанием основных параметров всегда следует перечисление заголовков, которые передают серверу дополнительную полезную информацию: название и версию браузера, язык, кодировку, параметры кэширования и так далее.
Среди всех этих заголовков, которые передаются при каждом запросе, есть один обязательный и самый важный — это заголовок Host . Он определяет адрес домена, который запрашивает браузер клиента.
Больше всего здесь интересен именно код состояния, он же код ответа сервера.
В этом примере код ответа — 200, что означает: сервер работает, документ найден и будет передан клиенту. Но не всегда всё идет гладко.
Например, запрошенный документ может отсутствовать или сервер будет перегружен, в таком случае клиент не получит контент, а код ответа будет отличным от 200.
- 404 — если сервер доступен, но запрошённый документ не найден;
- 503 — если сервер не может обрабатывать запросы по техническим причинам.
После стартовой строки следуют заголовки, а затем тело ответа.
Работа с заголовками в PHP
- Получение тела запроса;
- Получение заголовков запроса;
- Добавление/изменение заголовков ответа;
- Управление телом ответа.
Разберём всё по порядку.
Получение тела запроса
Тело запроса — это информация, которую передал браузер при запросе страницы.
Но тело запроса присутствует только если браузер запросил страницу методом POST .
Дело в том, что POST — это метод, специально предназначенный для отправки данных на сайт. Чаще всего метод POST браузер задействует в момент отправки формы. В этом случае телом запроса будет содержимое формы.
В PHP-сценарии все данные отправленной формы будут доступны в специальном массиве $_POST . Более подробно об этом написано в следующей главе, посвящённой формам.
Получение заголовков запроса
Пример, как получить предыдущую страницу, с которой перешёл пользователь:
Добавление/изменение заголовков ответа
В PHP-сценарии можно управлять всеми заголовками ответа, которые попадут к пользователю вместе с контентом страницы. Это возможно, потому что PHP работает на стороне веб-сервера и имеет с ним очень тесную интеграцию.
Вот примеры сценариев, когда пригодится управление заголовками ответа:
Заголовки ответа нужны для выполнения множества важных задач.
В PHP есть функция для отправки или смены заголовков: header() .
Она принимает имя и значение заголовка и добавляет его в список из всех заголовков, которые уйдут в браузер пользователя после окончания работы сценария.
Например, так выполняется перенаправление пользователя на другую страницу:
За переадресацию отвечает заголовок с именем Location , а через двоеточие задаётся значение — адрес страницы для перехода.
Важное замечание по использованию заголовков
Есть одно ограничение: заголовки нельзя отправлять, если пользователю к этому моменту уже отправили любой контент. То есть, если показать что-то на экране, например, через функцию print() , то после этого заголовки поменять уже не получится.
Управление телом ответа
Всё, что PHP выводит на экран, является содержимым ответа. Иными словами, вызовы функций print , echo или показ текста через шорт-теги являются телом ответа, которое попадает в браузер пользователю.
Параметры запроса
На сайте дневника наблюдений за погодой мы сделали отдельную страницу, чтобы показывать на ней информацию о погоде из истории за один конкретный день. То есть страница одна, но показывает разные данные, в зависимости от выбранного дня.
Также пользователи хотят добавить в закладки адреса страниц с нужными им днями. Получается, что имея только один сценарий сделать страницу, способную показывать дневник погоды за любой день невозможно? Вовсе нет!
Из чего состоит URI
Параметры запроса — это как бы дополнительные атрибуты адреса страницы. Они отделяются от имени страницы знаком запроса. В примере выше параметр запроса только один: date=2017-10-30.
Имя этого параметра: date , значение: 2017-10-15 .
Параметров запроса может быть несколько, тогда они разделяются знаком амперсанда: ?date=2017-10-15&tscale=celsius
В примере выше указывается два аргумента: дата и единица измерения температуры.
Параметры запроса как внешние переменные
Теперь в адресе страницы используются параметры запроса, но какая нам от этого польза? Она состоит в том, что если имя страницы вызывает к исполнению соответствующий PHP-сценарий, то параметры запроса превращаются в специальные внешние переменные в этом сценарии. То есть, если в адресе присутствуют такие параметры, то их легко получить внутри кода сценария и выполнить с ними какие-нибудь действия. Например, показать погоду за конкретный день в выбранных единицах измерения.
Получение параметров запроса
Если есть внешние переменные, то как их прочитать?
Все параметры запроса находятся в специальном, ассоциативном массиве $_GET , а значит сценарий, вызванный с таким адресом: day.php?date=2017-10-15&tscale=celsius будет иметь в этом массиве два значения с ключами date и scale .
Запрос на получение данных за выбранный день выглядит так:
В первой строчке примера выше мы получаем значение параметра date , а если он отсутствует, то используем текущую дату в качестве выбранного дня.
Никогда не полагайтесь на существование параметра в массиве $_GET и делайте проверку либо функцией isset() , либо как в этом примере.
В этом задании вы сможете потренироваться использовать $_GET .
Формирование URI с параметрами запроса
Иногда нужно совершить обратную операцию: сформировать адрес страницы, включив туда нужные параметры запроса из массива.
Скажем, на странице погодного дневника надо поставить ссылку на следующий и предыдущий день. Нужно также сохранить выбранную единицу измерений. То есть необходимо сохранить текущие параметры запроса, поменять значение одного из них (день), и сформировать новую ссылку.
Вот как это можно сделать:
Я использую следующий PHP-скрипт в качестве индекса для моего сайта. Этот скрипт должен включать определенную страницу в зависимости от языка браузера (определяется автоматически). Этот скрипт не работает хорошо со всеми браузерами, поэтому он всегда включает index_en.php для любого обнаруженного языка (причина проблемы, скорее всего, в том, что какой-то заголовок Accept-Language не учитывается). Не могли бы вы предложить мне более надежное решение?
<?php
// открыть сессию
session_start();
// views: 1 = first visit; >1 = second visit
// Определить язык по агенту пользователя браузера
function lixlpixel_get_env_var($Var)
if(empty($GLOBALS[$Var]))
$GLOBALS[$Var]=(!empty($GLOBALS['_SERVER'][$Var]))?
$GLOBALS['_SERVER'][$Var] : (!empty($GLOBALS['HTTP_SERVER_VARS'][$Var])) ? $GLOBALS['HTTP_SERVER_VARS'][$Var]:'';
>
>
function lixlpixel_detect_lang()
// определение HTTP_ACCEPT_LANGUAGE & HTTP_USER_AGENT.
lixlpixel_get_env_var('HTTP_ACCEPT_LANGUAGE');
lixlpixel_get_env_var('HTTP_USER_AGENT');
$_AL=strtolower($GLOBALS['HTTP_ACCEPT_LANGUAGE']);
$_UA=strtolower($GLOBALS['HTTP_USER_AGENT']);
// Попытка определить основной язык, если принято несколько языков.
foreach($GLOBALS['_LANG'] as $K)
if(strpos($_AL, $K)===0)
return $K;
>
// Попытка обнаружить любой язык, если он еще не обнаружен.
foreach($GLOBALS['_LANG'] as $K)
if(strpos($_AL, $K)!==false)
return $K;
>
foreach($GLOBALS['_LANG'] as $K)
//if(preg_match("/[[( ][;,_-)]/",$_UA)) // сопоставление различных букв (создать ошибку для seo spyder)
return $K;
>
// Вернуть язык по умолчанию, если язык еще не определен.
return $GLOBALS['_DLANG'];
>
// Определите язык по умолчанию.
$GLOBALS['_DLANG']='en';
// Определите все доступные языки.
// ПРЕДУПРЕЖДЕНИЕ: не комментировать все доступные языки
$GLOBALS['_LANG'] = array(
'af', // afrikaans.
'ar', // arabic.
'bg', // bulgarian.
'ca', // catalan.
'cs', // czech.
'da', // danish.
'de', // german.
'el', // greek.
'en', // english.
'es', // spanish.
'et', // estonian.
'fi', // finnish.
'fr', // french.
'gl', // galician.
'he', // hebrew.
'hi', // hindi.
'hr', // croatian.
'hu', // hungarian.
'id', // indonesian.
'it', // italian.
'ja', // japanese.
'ko', // korean.
'ka', // georgian.
'lt', // lithuanian.
'lv', // latvian.
'ms', // malay.
'nl', // dutch.
'no', // norwegian.
'pl', // polish.
'pt', // portuguese.
'ro', // romanian.
'ru', // russian.
'sk', // slovak.
'sl', // slovenian.
'sq', // albanian.
'sr', // serbian.
'sv', // swedish.
'th', // thai.
'tr', // turkish.
'uk', // ukrainian.
'zh' // chinese.
);
// Перенаправление на нужное место.
// Пример реализации aff var lang для имени файла
/*
echo ' Обнаружен язык: '.lixlpixel_detect_lang(); // Для демонстрации
echo "<br />";
*/
$lang_var = lixlpixel_detect_lang();//вставьте систему lang var в новую переменную для условного оператора
/*
echo "<br />";
echo $lang_var; // выведите var для отслеживания
echo "<br />";
*/
// Вставьте нужную страницу в соответствии с языком в браузере
switch ($lang_var)
case "fr":
//echo "PAGE DE";
include("index_fr.php");//включить проверку сеанса DE
break;
case "it":
//echo "PAGE IT";
include("index_it.php");
break;
case "en":
//echo "PAGE EN";
include("index_en.php");
break;
default:
//echo "PAGE EN - Setting Default";
include("index_en.php");//включите EN во всех остальных случаях обнаружения разных lang
break;
>
?>
Ответ 1
Например, такой способ:
<?php
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$acceptLang = ['fr', 'it', 'en'];
$lang = in_array($lang, $acceptLang) ? $lang : 'en';
require_once "index_.php";
?>
Ответ 2
Ответ 3
', strtolower($http_accept_language), $matches, PREG_SET_ORDER);
foreach($matches as $match)
list($a, $b) = explode('-', $match[1]) + array('', '');
$value = isset($match[2]) ? (float) $match[2] : 1.0;
if(isset($available_languages[$match[1]]))
$langs[$match[1]] = $value;
continue;
>
if(isset($available_languages[$a]))
$langs[$a] = $value - 0.1;
>
>
arsort($langs);
return $langs;
>
И пример использования:
//$_SERVER["HTTP_ACCEPT_LANGUAGE"] = 'en-us,en;q=0.8,es-cl;q=0.5,zh-cn;q=0.3';
// языки, которые мы поддерживаем
$available_languages = array("en", "zh-cn", "es");
$langs = prefered_language($available_languages, $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
/* результат
Array (
[en] => 0.8
[es] => 0.4
[zh-cn] => 0.3
)*/
Ответ 4
Это очень простое решение, которое работает лучше всего. Браузеры возвращают языки в порядке предпочтения, поэтому это упрощает проблему. Хотя обозначение языка может состоять более чем из двух символов (например, "EN-US"), обычно достаточно первых двух. В следующем примере кода я ищу совпадение из списка известных языков, о которых знает моя программа.
$known_langs = array('en','fr','de','es');
$user_pref_langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach($user_pref_langs as $idx => $lang)
$lang = substr($lang, 0, 2);
if (in_array($lang, $known_langs))
echo " Предпочитаемый язык - $lang ";
break;
>
>
Я надеюсь, что вы найдете это быстрое и простое решение, которое вы сможете легко использовать в своем коде. Я использую это решение в производстве уже довольно долгое время.
Ответ 5
Следующий сценарий представляет собой версию кода, который возвращается к языковым настройкам по умолчанию, если ни один язык не соответствует поддерживаемым, ил и е сли соответствие найдено, он заменяет языковые настройки по умолчанию на новые в соответствии с приоритетом языка. В данном сценарии браузер пользователя установлен в порядке приоритета на испанский, голландский, и английский языки, а приложение поддерживает только английский и голландский языки без региональных вариаций, и английский является языком по умолчанию. Порядок значений в строке "HTTP_ACCEPT_LANGUAGE" не важен, если по какой-то причине браузер не упорядочивает значения правильно.
$supported_languages = array("en","nl");
$supported_languages = array_flip($supported_languages);
var_dump($supported_languages); // array(2)
$http_accept_language = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; // es,nl;q=0.8,en-us;q=0.5,en;q=0.3
preg_match_all('
', strtolower($http_accept_language), $matches, PREG_SET_ORDER);
$available_languages = array();
foreach ($matches as $match)
list($language_code,$language_region) = explode('-', $match[1]) + array('', '');
$priority = isset($match[2]) ? (float) $match[2] : 1.0;
$available_languages[][$language_code] = $priority;
>
var_dump($available_languages);
/*
array(4)
[0]=> array(1)
["es"]=>
float(1)
>
[1]=> array(1)
["nl"]=>
float(0.8)
>
[2]=> array(1)
["en"]=>
float(0.5)
>
[3]=> array(1)
["en"]=>
float(0.3)
>
>
*/
$default_priority = (float) 0;
$default_language_code = 'en';
foreach ($available_languages as $key => $value)
$language_code = key($value);
$priority = $value[$language_code];
if ($priority > $default_priority && array_key_exists($language_code,$supported_languages))
$default_priority = $priority;
$default_language_code = $language_code;
var_dump($default_priority); // float(0.8)
var_dump($default_language_code); // string(2) "nl"
>
>
var_dump($default_language_code); // string(2) "nl"
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Сайты, которые рассчитаны на множество стран мира, как правило, имеют несколько языков. Безусловно, на всех страницах сайта там можно переключиться с одного языка на другой. Однако, Вы, наверняка, замечали, что в большинстве случаев сайты каким-то образом определяют Ваш язык и устанавливают сразу для Вас наиболее подходяющий. Вот о том, как определяется язык пользователя на PHP, я и расскажу в данной статье.
В основе лежит константа $_SERVER["HTTP_ACCEPT_LANGUAGE"], которая как раз и содержит сведения о предпочитаемых языках пользователя. Выглядит она примерно так: "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3". Здесь перечисляются языки и регионы, а также приоритет q. Чем больше q, тем больше пользователь предпочитает данный язык. Если q нет, значит, оно равно 1. Например, у ru-RU нет q, значит, оно равно 1, и данный язык наиболее подходящий.
Чтобы определить язык пользователя на PHP, надо воспользоваться следующим кодом:
<?php
preg_match_all('/([a-z](?:-[a-z])?)(?:;q=([0-9.]+))?/', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]), $matches); // Получаем массив $matches с соответствиями
$langs = array_combine($matches[1], $matches[2]); // Создаём массив с ключами $matches[1] и значениями $matches[2]
foreach ($langs as $n => $v)
$langs[$n] = $v ? $v : 1; // Если нет q, то ставим значение 1
arsort($langs); // Сортируем по убыванию q
$default_lang = key($langs); // Берём 1-й ключ первого (текущего) элемента (он же максимальный по q)
echo $default_lang; // Выводим язык по умолчанию
?>
Получив язык по умолчанию, мы можем сразу же установить его и на сайте, тем самым, выводя контент для пользователя на том языке, который он предпочитает.
Таким образом определяется язык пользователя на PHP, что очень пригодится мультиязычным сайтам.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 7 ):
приятного вам отдыха. можно ли применить этот код на сайте ,с переключениями "en","ru"? Это для меня сложновато,но хотелось бы потестировать.там нужны какие-то изменения в коде,можно узнать подробнее?
Это полученное значение нужно предавать в движок Вашего сайта, чтобы он знал на каком языке все шаблоны выводить.
В вашем коде 2 ошибки. Поправьте
Ошибочка в коде! В конце $langs[0] не работает! Это же ассоциативный массив и для сайта важно не значение первого элемента, а ключ! echo key($langs);
А вы проверяли,работает или нет,о великий гуру?)
Да. Я прям этот код у себя на денвере запустил и получил пустую страницу. Порылся в интернете - у некоторых тоже не работает обращение к нулевому элементу ассоциативного массива.
может,перепутали чего?)или забыли? синтаксических ошибок точно нет.
Я использую следующий PHP-скрипт как индекс для своего сайта.
Этот скрипт должен содержать определенную страницу в зависимости от языка браузера (автоматически определяется).
Этот скрипт не работает со всеми браузерами, поэтому он всегда включает index_en.php для любого обнаруженного языка (причина проблемы, скорее всего, index_en.php с отсутствием рассмотрения заголовка Accept-Language).
Не могли бы вы предложить мне более надежное решение?
почему бы вам не сделать это простым и чистым
Accept-Language – это список взвешенных значений (см. Параметр q ). Это означает, что просто смотреть на первый язык не означает, что он также является самым предпочтительным; фактически, значение q 0 означает, что оно вообще неприемлемо.
Поэтому вместо того, чтобы просто смотреть на первый язык, проанализируйте список принятых языков и доступных языков и найдите наилучшее соответствие:
Если findMatches возвращает пустой массив, совпадение не найдено, и вы можете вернуться к языку по умолчанию.
Существующие ответы немного слишком подробные, поэтому я создал эту меньшую, автосогласованную версию.
И пример использования:
Полный источник источника
Проблема с выбранным ответом выше заключается в том, что пользователь может выбрать свой первый выбор в качестве языка, который не относится к структуре случая, но один из их вариантов выбора другого языка. Вы должны зацикливаться до тех пор, пока не найдете совпадение.
Это супер простое решение, которое работает лучше. Браузеры возвращают языки в порядке предпочтения, что упрощает проблему. Хотя обозначение языка может содержать более двух символов (например, «EN-US»), обычно достаточно первых двух. В следующем примере кода я ищу соответствие из списка известных языков, о которых знает моя программа.
Надеюсь, вы найдете это быстрое и простое решение, которое вы можете легко использовать в своем коде. Я использую это в производстве довольно долгое время.
Я думаю, что это самый чистый путь!
Следующий скрипт – это модифицированная версия кода Xeoncross (спасибо за этот Xeoncross), который возвращается к языку по умолчанию, если языки не соответствуют поддерживаемым, или если найдено совпадение, он заменяет настройку языка по умолчанию новой в соответствии с приоритетом языка.
все вышеперечисленное с отступлением от «en»:
или с репутацией по умолчанию и известным языковым массивом:
У меня есть этот, который устанавливает cookie. И, как вы можете видеть, он сначала проверяет, опубликован ли пользователь пользователем. Потому что язык браузера не всегда говорит о пользователе.
Определение языка пользователя на PHP
Сайты, которые рассчитаны на множество стран мира, как правило, имеют несколько языков. Безусловно, на всех страницах сайта там можно переключиться с одного языка на другой. Однако, Вы, наверняка, замечали, что в большинстве случаев сайты каким-то образом определяют Ваш язык и устанавливают сразу для Вас наиболее подходяющий. Вот о том, как определяется язык пользователя на PHP, я и расскажу в данной статье.
Чтобы определить язык пользователя на PHP, надо воспользоваться следующим кодом:
Получив язык по умолчанию, мы можем сразу же установить его и на сайте, тем самым, выводя контент для пользователя на том языке, который он предпочитает.
Таким образом определяется язык пользователя на PHP, что очень пригодится мультиязычным сайтам.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 7 ):
Это полученное значение нужно предавать в движок Вашего сайта, чтобы он знал на каком языке все шаблоны выводить.
В вашем коде 2 ошибки. Поправьте
А вы проверяли,работает или нет,о великий гуру?)
может,перепутали чего?)или забыли? синтаксических ошибок точно нет.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
Определить язык браузера на PHP
Я использую следующий PHP-скрипт в качестве индекса для моего сайта.
этот скрипт должен включать в себя определенную страницу в зависимости от языка браузера (автоматически).
этот скрипт не работает хорошо со всеми браузерами, поэтому он всегда включает index_en.php для любого обнаруженного языка (причиной проблемы, скорее всего, является проблема с некоторым заголовком Accept-Language, который не рассматривается).
не могли бы вы предложить мне более надежный решение?
почему бы вам не сохранить его простым и чистым
существующие ответы немного слишком многословны, поэтому я создал эту меньшую, автоматически соответствующую версию.
и пример использования:
проблема с выбранным ответом выше заключается в том, что пользователь может иметь свой первый выбор в качестве языка, который не входит в структуру case, но один из их других вариантов языка установлен. Вы должны цикл, пока не найдете совпадение.
Я надеюсь, что вы найдете это быстрое и простое решение, которое вы можете легко использовать в своем коде. Я использую это в течение довольно долгое время.
следующий скрипт-это модифицированная версия кода Xeoncross (спасибо за этот Xeoncross), которая возвращается к настройкам языка по умолчанию, если ни один язык не соответствует поддерживаемым, или если найдено совпадение, он заменяет настройку языка по умолчанию на новую в соответствии с приоритетом языка.
Я думаю, что самый чистый способ-это!
Определяем язык пользователя на PHP
Этот код выведет список значений всех элементов данного массива. Пример такого вывода я привел чуть ниже:
if (!in_array($lang, array_keys($sites)))
Как видишь, код проще некуда и поставленная задача выполнена. А как подобную задачу решаешь ты?
Сам перечитал тону мануалов, но рабочей версии не нашёл. Например, в режиме инкогнито google chrome на MacOS всегда показывает английский язык, а Safari русский
Сложно ли сделать редирект по языку?
Здравствуйте, подскажите пожалуйста, сложно ли сделать редирект по языку? Например, если у.
Дополнения к языку программирования для программиста. Что ещё, кроме языка, собственно, я должен знать?
Всем здрасте!Я начинающий программист и и недавно мне кроме языка программирования стало интересно.
Определения браузера
Можно ли с помощью пхп определить какой браузер его грузит? Если да, то скинте простенький пример.
Но это больше относится к настройкам отображения браузера, чем к его языку и языку системы,
выведите, посмотрите чем отличаются,
И браузер должен предоставлять возможность пользователю выбирать, как ему удобнее.
Добавлено через 23 минуты
Раритет : ) Opera 12.0 alpha
ru
undefined
ru
В остальных вроде только первое ru-RU или en-US
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Редирект только при закрытии вкладки браузера
Всем привет. Столкнулся с ужасной проблемой, нужно сделать редирект на другую страницу при.
Ошибка определения браузера IE и Опера
Не могу понять: NC = (parent.Frame1.document.layers); IE = (parent.Frame1.document.all); Opera.
Самый простой способ определения языка пользователя
Добрый день! Подскажите, пожалуйста, какой самый простой из качественных способов определить язык.
Как написать условие определения браузера на PHP?
Вопрос заключается в следующем. Необходимо выполнять код в зависимости от браузера пользователя.
Читайте также: