Скрипт определения языка браузера

Подскажите пожалуйста рабочий пример, для «Определения языка браузера и последующий редирект на русскоязычную версию сайта для русской версия браузера, английский язык во всех других случаях»,

Сам перечитал тону мануалов, но рабочей версии не нашёл. Например, в режиме инкогнито google chrome на MacOS всегда показывает английский язык, а Safari русский

Вот например при заходе на сайт www.minecraft.net если у меня операционнка на русском языке во всех браузера, а также в инкогнито режимах перекидывает на русскоязычную версию сайта, как это реализовано?

Сложно ли сделать редирект по языку?
Здравствуйте, подскажите пожалуйста, сложно ли сделать редирект по языку? Например, если у.

Дополнения к языку программирования для программиста. Что ещё, кроме языка, собственно, я должен знать?
Всем здрасте!Я начинающий программист и и недавно мне кроме языка программирования стало интересно.

Скрипт определения языка браузера. Смотреть фото Скрипт определения языка браузера. Смотреть картинку Скрипт определения языка браузера. Картинка про Скрипт определения языка браузера. Фото Скрипт определения языка браузераОпределения браузера
Можно ли с помощью пхп определить какой браузер его грузит? Если да, то скинте простенький пример.

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

Иногда бразеры могут даже в HTTP_USER_AGENT могут какие-то раскладки о системее добавлять.
но ru_ru роде редко бывает
и есть ещё варианты с редиректами которые устраивает сам браузер.

Добавлено через 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?
Вопрос заключается в следующем. Необходимо выполнять код в зависимости от браузера пользователя.

Источник

Автоматическое определение языка произвольного текста на РНР — библиотека PHPLangautodetect

Скрипт определения языка браузера. Смотреть фото Скрипт определения языка браузера. Смотреть картинку Скрипт определения языка браузера. Картинка про Скрипт определения языка браузера. Фото Скрипт определения языка браузераЗнаете, работа с стартапе, который пытается создать что-то новое и уникальное на рынке очень захватывает. И не только открывающимися возможностями, но и часто нетривиальными задачами и вопросами, которые ставятся перед создателями и которые раньше никто не решал. Вот один из таких вопросов как раз вчера появился передо мной: дано нам произвольную строку текста, заведомо известно, что она может быть двух, а в некоторых случаях и трехъязычной, то есть там смешанный текст из нескольких языков. Необходимо прозрачно для пользователя определить язык, на котором написан текст.

На самом деле задача не такая и редкая — подобная функциональность есть и в текстовых редакторах, и в переключателе клавиатуры PuntoSwitcher, да и в системах машинного перевода такой функционал востребован, не говоря уже про системы поиска информации. Кстати, именно в контексте создания специализированного поисковика и классификатора текстов и появилась такая проблема. Необходимо было получить такую возможность в собственной программе на платформе РНР и при этом не задействовать сторонние сервисы — подобная возможность в виде веб-сервиса присутствует в Google Language API (в своём блоге я уже исследовал этот сервис), однако она выполняется удалённо и имеет некоторые существенные для нас ограничения, в частности, процедура опознания языка выполняется с существенной задержкой и асинхронна по своей природе. Кроме этого очень хотелось иметь полный контроль над процессом и иметь возможность его гибко настраивать, чего, увы, нет в сторонних сервисах. Поэтому пришлось подумать и попробовать реализовать собственными силами, результат же представляем вашему вниманию.

Сначала немного теории. Сразу следует сказать, что сам процесс автоматического определения языка неточен и принципиально является вероятностным. То есть всегда результат даётся с какой-либо вероятностью, особенно это касается языков, которые имеют очень схожий либо даже идентичный алфавит (в написании), однако различны. При этом мы ещё и зависим от длины строки исследуемого текста — чем меньше у нас материала для исследования, тем сложнее или даже невозможно является такое определение. Ведь для статистики необходимо иметь больше поле для подсчёта параметров, а в короткой строке мы не можем получить достаточно материала для идентификации, особенно при анализе языков, которые имеют в своей основе одинаковый алфавит. В таком тексте банально может просто не встречаться уникальных букв и оно будет определено как слово другого языка. Поэтому первым ограничением метода анализа используемого алфавита является длина текста — чем он больше, тем точнее анализ. Приведу пример: слово «rappel«. На каком оно языке? На английском? Оно означает «спускаться на верёвке». Но такое же слово есть и в немецком языке! И там оно означает «(внезапное) помешательство, приступ бешенства».

Этот метод имеет две разновидности. Вариант использования «процента использования алфавита» использует подсчёт количества использованных уникальных символов алфавита в тексте и расчёт % от общего объёма. Второй изменяет количество символов из текста, которое совпадает с алфавитом, при этом некоторые символы могут попадать в разные алфавиты и засчитываться обоим языкам.

Второй метод основан на использовании заранее сформированных правил, которые устанавливают идентичность текста при помощи уникальных или типичных для грамматики языка последовательностей букв (например, артикли в английском, буквы «ъ» и «ё» в русском или «є» в украинском). Такие правила для n-грамм могут разрабатываться лингвистами и позволяют быстрее и точнее определить язык текста, однако также не дают гарантированного результата. Их то сначала нужно создать, а значит владеть языком на достаточном уровне, да и не так много уникальных характерных последовательностей в разных языках. Хотя, если вы заранее знаете, какие языки вам надо определять, то между ними может быть больше уникальных сочетаний, чем если использовать все языки. Если у вас только русский и английский, то таких буквосочетаний явно больше, чем в паре немецкий-английский.

Отдельно следует остановиться на случае, когда в тексте смешиваются слова разных алфавитов. Например, имена или названия компаний и товаров могут быть написаны на оригинальном языке, чаще всего английском, однако все предложение сформулировано по-русски. Здесь поможет только вариант подсчёта общего количества символов, которые принадлежат алфавиту и на основе того, чьих символов больше, принимать решения. В будущей версии библиотека сможет распознавать такие варианты и выдавать массив из языков, которые встречаются в строке, сейчас она покажет только основной язык, тот, которого в строке больше всего символов.

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

Библиотека работает с текстами в кодировке UTF-8, поэтому требует модуля mb_strings и первым делом приводит полученную строку к стандартной форме, пытаясь её перекодировать, потом удаляет лишние знаки и проверяет длину. Минимальный объём текста 50 символов, максимальный — 1680, это примерно равно одной стандартной странице формата А4.

Вы можете задать различные варианты детектирования. Библиотека может использовать анализ алфавитов, при этом смотреть или на общий объем текста, или же на процент используемых букв каждого алфавита. Порог принятия решения также настраивается, по умолчанию это 75% (в зависимости от подсчёта, это или 75% букв алфавита или же в тексте общее количество символов этого языка больше 75%). Также есть возможность использовать эвристические правила для уточнения результата, при этом можно настроить приоритет — если правило не подтвердит результат анализа по статистике, то более верным считать результат работы правил или же следует довериться статистике. Для более быстрой работы, особенно на больших объёмах текста или большом количестве языков можно использовать только правила, их то обычно намного меньше, чем символов в алфавитах. Кстати, настраивается и использование правил — для получения результата можно использовать как совпадение с одним из правил, или же требовать совпадения со всеми правилами одного языка, однако это применимо только для длинных текстов и всегда будет вероятность ошибки.

Возвращает библиотека после детектирования или значение false, что означает невозможность определения или же то, что используемого языка нет в базе данных. В случае успеха мы получаем массив с двух буквенным кодом языка (для примера: «en», «ru» или «ua»), а также дополнительные сведения — полное название языка и, в качестве бонуса, ссылку на статью о языке в Wikipedia.org (конечно, на этом же языке).

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

Напоследок одно замечание о скорости. Самым быстрым вариантом будет использовать только правила, так как их всегда меньше, чем букв и внутри библиотеки мы будем использовать более короткие циклы. В частности, чем длиннее текст и чем больше языков мы определили в базе для поиска, тем быстрее будет вариант только с правилами. Поэтому, для оптимизации вам лучше всего заранее ограничить набор языков самыми вероятными и удалить те, что вам не нужны — так сократится значительное число циклов и алгоритм будет работать быстрее. Также можно убрать проверку и декодирование строки, если вы уверены, что у вас в системе на вход алгоритма будет подаваться только гарантировано уже преобразованные к кодировке UTF-8 строки.

Официальный сайт проекта: http://code.google.com/p/phplangautodetect/
Лицензия: GNU General Public License v3
Автор: Александр Лозовюк (aleks_raiden, aleks.raiden@gmail.com)
Язык/платформа: PHP 5 (требует модуль mb_strings)
В дистрибутив включён простейший скрипт для экспериментов, он-лайн последняя версия здесь.

Ниже исходный код с комментариями и замечаниями по реализации описанных выше алгоритмов.

Источник

Определение языка браузера в PHP

Я использую следующий PHP-скрипт как индекс для своего сайта.

Этот скрипт должен содержать определенную страницу в зависимости от языка браузера (автоматически определяется).

Этот скрипт не работает со всеми браузерами, поэтому он всегда включает index_en.php для любого обнаруженного языка (причина проблемы, скорее всего, index_en.php с отсутствием рассмотрения заголовка Accept-Language).

Не могли бы вы предложить мне более надежное решение?

почему бы вам не сделать это простым и чистым

Accept-Language – это список взвешенных значений (см. Параметр q ). Это означает, что просто смотреть на первый язык не означает, что он также является самым предпочтительным; фактически, значение q 0 означает, что оно вообще неприемлемо.

Поэтому вместо того, чтобы просто смотреть на первый язык, проанализируйте список принятых языков и доступных языков и найдите наилучшее соответствие:

Если findMatches возвращает пустой массив, совпадение не найдено, и вы можете вернуться к языку по умолчанию.

Существующие ответы немного слишком подробные, поэтому я создал эту меньшую, автосогласованную версию.

И пример использования:

Полный источник источника

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

Это супер простое решение, которое работает лучше. Браузеры возвращают языки в порядке предпочтения, что упрощает проблему. Хотя обозначение языка может содержать более двух символов (например, «EN-US»), обычно достаточно первых двух. В следующем примере кода я ищу соответствие из списка известных языков, о которых знает моя программа.

Надеюсь, вы найдете это быстрое и простое решение, которое вы можете легко использовать в своем коде. Я использую это в производстве довольно долгое время.

Я думаю, что это самый чистый путь!

Следующий скрипт – это модифицированная версия кода Xeoncross (спасибо за этот Xeoncross), который возвращается к языку по умолчанию, если языки не соответствуют поддерживаемым, или если найдено совпадение, он заменяет настройку языка по умолчанию новой в соответствии с приоритетом языка.

В этом случае браузер пользователя устанавливается в порядке приоритета на испанский, голландский, американский английский и английский, и приложение поддерживает английский и голландский только без региональных вариаций, а английский язык по умолчанию. Порядок значений в строке «HTTP_ACCEPT_LANGUAGE» не важен, если по какой-то причине браузер не упорядочивает значения правильно.

все вышеперечисленное с отступлением от «en»:

или с репутацией по умолчанию и известным языковым массивом:

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

Источник

Руководство по JavaScript, часть 1: первая программа, особенности языка, стандарты

Недавно мы провели опрос, посвящённый целесообразности перевода этого руководства по JavaScript. Как оказалось, около 90% проголосовавших отнеслись к данной идее положительно. Поэтому сегодня публикуем первую часть перевода.

Скрипт определения языка браузера. Смотреть фото Скрипт определения языка браузера. Смотреть картинку Скрипт определения языка браузера. Картинка про Скрипт определения языка браузера. Фото Скрипт определения языка браузера

Это руководство, по замыслу автора, рассчитано на тех, кто уже немного знаком JavaScript и хочет привести свои знания в порядок а также узнать о языке что-то новое. Мы решили немного расширить аудиторию этого материала, включить в неё тех, кто совершенно ничего не знает о JS, и начать его с написания нескольких вариантов «Hello, world!».

Hello, world!

Программа, которую по традиции называют «Hello, world!», очень проста. Она выводит куда-либо фразу «Hello, world!», или другую подобную, средствами некоего языка.

JavaScript — это язык, программы на котором можно выполнять в разных средах. В нашем случае речь идёт о браузерах и о серверной платформе Node.js. Если до сих пор вы не написали ни строчки кода на JS и читаете этот текст в браузере, на настольном компьютере, это значит, что вы буквально в считанных секундах от своей первой JavaScript-программы.

Этот текст можно ввести с клавиатуры, можно скопировать и вставить его в консоль. Результат будет одним и тем же, но, если вы учитесь программировать, рекомендуется вводить тексты программ самостоятельно, а не копировать их.

Скрипт определения языка браузера. Смотреть фото Скрипт определения языка браузера. Смотреть картинку Скрипт определения языка браузера. Картинка про Скрипт определения языка браузера. Фото Скрипт определения языка браузера

Первая программа в консоли браузера — вывод сообщения в консоль

Ещё один вариант браузерного «Hello, world!» заключается в выводе окна с сообщением. Делается это так:

Вот результат выполнения этой программы.

Скрипт определения языка браузера. Смотреть фото Скрипт определения языка браузера. Смотреть картинку Скрипт определения языка браузера. Картинка про Скрипт определения языка браузера. Фото Скрипт определения языка браузера

Вывод сообщения в окне

Обратите внимание на то, что панель инструментов разработчика расположена теперь в нижней части экрана. Менять её расположение можно, воспользовавшись меню с тремя точками в её заголовке и выбирая соответствующую пиктограмму. Там же можно найти и кнопку для закрытия этой панели.

Инструменты разработчика, и, в том числе, консоль, имеются и в других браузерах. Консоль хороша тем, что она, когда вы пользуетесь браузером, всегда под рукой.

Источник

Форум

Справочник

Функция определения браузера и его версии

Как-то потребовалось создать функцию, принимающую объект json со следующим форматом записи: «браузер»:то, что следует вернуть, иначе говоря такую функцию, которая бы возвращала указанный объект в зависимости от браузера пользователя.

ТЗ, которое я для себя определил:

Мой способ гарантированно не самый точный, так как он используют свойство userAgent объекта navigator, которое при желании подделывается, но с другой стороны любой способ проверки клиента как серверный, так и клиентский можно обойти. Так же встает вопрос о надобности такой «подделки», тем более мало какие роботы исполняют javascript код.

После изучения следующей статьи http://ru.wikipedia.org/wiki/Useragent, я написал функцию ifBrowser. Она поддерживает проверку следующий браузеров: Internet Explorer, Firefox, Opera, Chrome, Safari, Konqueror, Iceweasel, SeaMonkey.

В случае если ни одного выражение не совпадает с браузером пользователя, возвращается «none», которое можно также указать как свойство передаваемого объекта.

Пример использования: (данный код повернет на 25 градусов все содержимое страницы в любом современном браузере)

Название браузера нужно вводить в следующем формате : ie, firefox, opera, chrome, safari, konqueror, iceweasel, seamonkey. Регистр неважен. Версия пишется слитно с название, пример: ie7. Если для нескольких браузеров должно возвратиться одно и тоже значение, вы просто указываете их через пробел, как
на примере («chrome safari»:»WebkitTransform»). В качестве возвращаемого значения может выступать любой объект JavaScript (строка, число, функция, логическое значение и т.д.)

Зачем проверять версию браузера и юзерагент, когда надо проверять то, что он умеет. Тем более, что ваш код даст огромную погрешность. Да и многие браузеры неправильно отдают свой агент.

Я перечислил какие браузеры поддерживаются, они не будут «неправильно» отдавать свой юзер-агент. И версия для каждого браузера определяется по индивидуальному правилу. Мне так же интересно, как вы будете проверять то, что умеет браузер, с большей пользой, когда любое свойство можно подменить, как и юзер-агент.

Это они на текущий момент не будут неправильно отдавать юзер-агент. Но никто не может поручиться за то, что будет завтра.
Конечно, проверять надо поддержку браузером конкретных свойств и методов. Путаница в юзер-агентах — правило, а неправильное определение стандартных свойств и методов — редкое исключение и косяк.

юзерагент без затей меняется, например в фаерфоксе без всяких бубнов, в системных параметрах браузера. к сожалению предложенный вами способ ненадежен и необъективен

И что?) Кому это нужно?) С таким же успехом можно подделать любое свойство в javascript’е. Например, только в google chrome у объекта window есть свойство chrome, и многие именно так определяют браузер (вообще не важно какое свойство подменять, я просто привел пример). Подменяем: window.chrome = <>. Теперь программа будет думать, что пользователь использует гугл хром. Вот только все равно не понятно, зачем пользователю это нужно. Если пользователь достаточно грамотный, и меняет юзер агент браузера, то он соответственно понимает, что делает) Вы же не сможете защить свой сайт от того, что какой-то пользователь решил подключить к браузеру плагин удаляющей определенный контент со страницы, или от того, что пользователь пару dom-элементов удалил через консоль того же хрома.

В Opera он тоже легко подменяется в параметре Custom User Agent в opera:config. Там же меняется и navigator.appName.

судя по скрипту, он ищет непонятно где, не ясно что. где сам источник версии браузера, откуда берутся аргументы?

Спасибо! Везде работает кроме IE. Скрипт определения языка браузера. Смотреть фото Скрипт определения языка браузера. Смотреть картинку Скрипт определения языка браузера. Картинка про Скрипт определения языка браузера. Фото Скрипт определения языка браузера😀 Скрипт определения языка браузера. Смотреть фото Скрипт определения языка браузера. Смотреть картинку Скрипт определения языка браузера. Картинка про Скрипт определения языка браузера. Фото Скрипт определения языка браузера(ie 6-ка)
IE Стабилен, как всегда Скрипт определения языка браузера. Смотреть фото Скрипт определения языка браузера. Смотреть картинку Скрипт определения языка браузера. Картинка про Скрипт определения языка браузера. Фото Скрипт определения языка браузера

Спасибо за понятный и прозрачный код.

Не понимаю зачем было разводить флейм на тему ненадежности метода. 90% пользователей вообще не знают про строку юзерагента, а те, кто знают, изменяя эту строку, сами себе становятся злобными буратинами.

Автору зачет, респект и уважуха.

Спс большое за мануал!

вах вах вах. в IE10 зер гуд как работает у меня. Вот в IE11 не работает. Пришлось немного отсебятины сделать.

Author thank you very much!

Вот, переделал под современные реалии и улучшил юзабилити:

Результат выполнения функции:

Определение мобильных браузеров не поддерживается, но для них возвращается platform: «mobie».

Konqueror, Iceweasel, SeaMonkey выкинул за ненадобностью. Кому нужно их определять в 2016 году даже представить не могу.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *