определить раскладку клавиатуры с помощью javascript
-
29-10-2019 - |
Вопрос
Есть ли способ определить текущую раскладку клавиатуры с помощью JavaScript?Я нашел это ,
но он только определяет, находится ли посетитель на английском макете.Мне нужно знать точный макет в виде строки, например, de-ch
, fr
или en
.
Решение
Раскладки клавиатуры не имеют стандартных идентификаторов.Им присвоены имена создателем макета.Они могут иметь языковую ассоциацию как одно определенное свойство.
Раскладку клавиатуры не следует путать с идентификаторами языка или локали.В частности, нет единой «английской раскладки», а есть десятки раскладок, которые можно использовать для английского языка.
Я не думаю, что системы обычно делают свои текущие настройки макета читаемыми с помощью JavaScript.
Поэтому какую бы проблему вы ни пытались решить, определив раскладку клавиатуры, необходим другой подход.
Другие советы
Я знаю, что это старый вопрос, но для тех из вас, кто был в тупике из-за того, что некоторые ключи сопоставляются с разными символами в других регионах, вот подход, который вы можете использовать, чтобы справиться с этим.
Скорее всего, ваш обработчик событий клавиатуры привязан к событию нажатия или нажатия клавиши; результаты свойства event.which или event.keyCode в этом случае привязаны к той клавише, которую нажал пользователь. Например, тот же ключ, который вы используете для ввода ";" в макете EN это ключ, используемый для ввода 'ж' в макете RU, и событие сообщает 186 как код для них обоих.
Однако, если вас больше интересует символ, возникший в результате нажатия клавиши, вам следует вместо этого использовать событие 'keypress'. Это событие срабатывает после нажатия / нажатия клавиши и сообщает о фактическом коде Unicode символа, который был введен внутри event.which или event.charCode, который в приведенном выше примере является десятичным 1078 или U + 0436.
Итак, если вы предпочитаете не гадать на раскладках клавиатуры и вам не нужно различать клавиши вверх / вниз, нажатие клавиш может быть для вас жизнеспособной альтернативой. Это не идеально (большинство браузеров не всегда сообщают о событиях нажатия клавиш на клавишах, которые не печатают символы, например клавишах-модификаторах, функциональных клавишах и клавишах навигации), но это лучше, чем угадывать коды клавиш при работе с печатными символами.
Вы ищете, как определить их локаль.В заголовках HTTP это хранится в Accept-Language заголовок, но он недоступен для браузера через чистый JS.
Существует плагин jQuery под названием Browser Language , который может помочь вамправильный путь.
Все, что я знаю об этой теме и уже реализовал для нее решение, - это обнаружение клавиатуры с неанглийской раскладкой, то есть языков, использующих любой алфавит, кроме английского .Решение зависит от регулярного выражения, которое соответствует любому генерируемому кодовому символу слова, любому цифровому символу, генерирующему кодовый код и диапазону предопределенных английских специальных символов клавиатуры, поэтому любые другие символы, такие как арабский, японский и т. Д., Не будут совпадать, все это использует событие нажатия клавишии я использую это решение для ограничения и уведомления полей имени пользователя и пароля при вводе в форму входа .Я упаковал его в функцию, подобную следующей:
общийЗатем вызовите функцию из события следующим образом:
общийЭто Рабочий ДЕМО для неизвестных избирателей.!