Язык браузера как посмотреть
У меня есть веб-сайт (Flash), локализованный на дюжину языков, и я хочу автоматически определить значение по умолчанию в зависимости от настроек браузера пользователя, чтобы минимизировать шаги для доступа к контенту.
FYI, я не могу использовать серверные скрипты из-за ограничений прокси, поэтому я думаю, что JavaScript или ActionScript будут подходящими для решения проблемы.
вопросы:
каков был бы лучший способ "угадать" пользователя локаль?
существуют ли какие-либо существующие простые классы/функции, которые могли бы мне помочь (без сложных пакетов локализации)? Специально, чтобы разбить все возможные языки на меньшее число (переводы, которые у меня есть) на умный способ.
в какой момент я могу доверять такому решению?
любые другие обходные пути или предложения?
к сожалению, этот заголовок недоступен для чтения внутри JavaScript; все, что вы получаете, это navigator.language , который сообщает вам, какая локализованная версия веб-браузера была установлена. Это не обязательно то же самое, что и предпочтительный язык(ы) пользователя. На IE вы вместо get systemLanguage (язык установленной ОС), browserLanguage (как и language ) и userLanguage (пользователь настроил область ОС), которые все одинаково бесполезны.
если бы мне пришлось выбирать между этими свойствами, я бы принюхиваться userLanguage во-первых, возвращаясь к language и только после этого (если они не соответствуют любому доступному языку), глядя на browserLanguage и наконец systemLanguage .
если вы можете поместить сценарий на стороне сервера где-то еще в сети, который просто читает заголовок Accept-Language и выплевывает его обратно как файл JavaScript со значением заголовка в строке, например.:
затем вы можете включить
в Chrome и Firefox 32+, навигатор.языки содержат массив локалей в порядке предпочтений пользователя и являются более точными, чем navigator.язык, однако, чтобы сделать его обратно совместимым (протестированный Chrome / IE / Firefox / Safari), используйте следующее:
С помощью данного сервиса вы можете узнать всю информацию о своем браузере. Она определяется автоматически и выводится чуть выше. Данные определяются на основе анализа специальных заголовков, которые обозреватель передает сайту при каждом открытии страницы. Сервис находит, обрабатывает и отображает следующие сведения о вашем браузере (в том же порядке):
- Название и версию браузера.
- Включены ли coolie и javascript.
- Наличие и версию Flash плеера.
- Язык браузера.
- Текущий размер окна браузера.
- Строку User-agent.
- Список установленных плагинов.
Узнать версию браузера.
В первую очередь на этой странице можно узнать, какой браузер у вас установлен. Название и версия браузера определяется в первую очередь. В самом верху списка отображается иконка обозревателя, его версия и релиз. Сервис способен определять и анализировать информацию о следующих браузерах: Google Chrome, Mozilla Firefox, Opera, Opera Mini, Yandex browser, Internet Explorer, Safari, Netscape, Konqueror, SeaMonkey, Minefield, Maxthon, K-Meleon, Iceweasel, Camino, а также целый ряд менее известных браузеров, многочисленные варианты сборок и модификаций.
Определить включены ли cookie и javascript.
Частенько, особенно при установке нового браузера, возникает проблема с работой какого-либо сайта или приложения. В качестве одной из причин некорректного отображения час то выступают неправильный настройки браузера, в частности кук и поддежки javascript. На этой странице, в числе прочего, вы можете проверить включены ли cookie и включен ли javascript. Проверка cookie происходит с помощью двойной переадресации страницы на саму себя, поэтому ваш антивирус может сообщить об этом. Не переживайте, все нормально :)
Узнать версию флеш плеера.
В диагностическом отчете нашего сервиса содержится информация о наличии флеш плеера. Если он установлен в вашем браузере, то отображается его версия (включая номер релиза и сборки). Если плагин флеш плеера не установлен или выключен, то приложение сообщит вам об этом красным шрифтом.
Определить язык браузера онлайн.
С помощью нашего сервиса можно также определить язык браузера. Данная опция не является самой востребованной, но может пригодиться при локализации и переводе различных онлайн продуктов, во время которых часто приходится переключать язык браузера туда и обратно. Чтобы не возникало путаницы, вы можете всегда посмотреть язык вашего обозревателя на этой странице.
Текущий размер окна браузера и строка User-agent.
Дополнительно определитель выводит информацию о размере окна браузера и строчку User-agent. Эти показатели помогут верстальщикам, программистам и веб мастерам при отладке сайтов и приложений. Во-первых, при верстке нужно смотреть отображение сайта на разных устройствах. А поскольку не всегда есть возможность протестировать верстку непосредственно на девайсе, то можно просто подобрать размер окна браузера один в один с размером экрана гаджета. Строчка User-agent, в свою очередь, содержит огромное количество информации о браузере клиента. Эту информацию полезно изучать при написании различных php и javascript кроссбраузерных скриптов.
Список плагинов, установленных в вашем браузере.
В числе прочего, вы можете определить и узнать полный список плагинов вашего браузера. Они выводятся в самом низу и представляют собой список, в котором имя каждого плагина находится на новой строке. Рядом с именем в скобках указывается название .dll файла плагина. Следует отметить, что в этом списке отображаются только включенные (активные) плагины и расширения.
Я использую следующий 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"
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
В поле Язык интерфейса выберите язык из списка.
Если в списке нет нужного языка, в блоке Язык отображения страниц нажмите Добавить язык и выберите его из полного списка.
Вы можете изменить язык интерфейса в настройках системы только для всех приложений одновременно:
В блоке Предпочитаемые языки перетащите нужный язык на самый верх списка. Если нужного языка нет, добавьте его в список, нажав .
","lang":>,"extra_meta":[>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>],"title":"Язык интерфейса - Яндекс.Браузер. Справка","canonical":"https://browser.yandex.ru/help/personalization/add-new.html","productName":"Яндекс.Браузер","extra_js":[[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>],[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>],[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>]],"extra_css":[[],[,"mods":,"__func69":true,"__func68":true,"bem":false,"tag":"link","attrs":>],[,"mods":,"__func69":true,"__func68":true,"bem":false,"tag":"link","attrs":>]],"csp":<"script-src":[]>,"lang":"ru">>>'>"current":"ru","available":["ru"]>
Если в списке нет нужного языка, в блоке Язык отображения страниц нажмите Добавить язык и выберите его из полного списка.
Вы можете изменить язык интерфейса в настройках системы только для всех приложений одновременно:
Читайте также: