Есть ли способ обнаружить текущую раскладку клавиатуры с помощью JavaScript? Я нашел этот,
но он обнаруживает, что посетитель находится на макете английского языка. Мне нужно знать точное расположение в виде строки, например de-ch
, fr
или en
.
Обнаружить раскладку клавиатуры с помощью javascript
Ответ 1
В макетах клавиатуры нет стандартизованных идентификаторов. У них есть имена, назначенные им создателем макета. Они могут иметь языковое объединение как одно определенное свойство.
Раскладки клавиатуры не следует путать с языковыми или языковыми идентификаторами. В частности, нет единого "английского макета", но есть десятки макетов, которые можно использовать для английского языка.
Я не думаю, что системы обычно делают свои текущие настройки макета доступными для чтения через JavaScript.
Итак, любая проблема, которую вы пытаетесь решить, обнаруживая раскладку клавиатуры, необходим другой подход.
Ответ 2
Я знаю, что этот вопрос старый, но для тех из вас, кто был замешан в том, что некоторые ключи сопоставляются с разными символами в других локалях, вот подход, который вы можете использовать для борьбы с ним.
Скорее всего, у вас есть обработчик событий клавиатуры, привязанный к событию keyup или keydown; результаты события. Свойство event.keyCode в этом случае привязывается к тому ключу, который нажал пользователь. Например, тот же ключ, который вы используете для ввода ';' в макете EN - это ключ, используемый для ввода "ж" в макете RU, а сообщения о событиях 186 - как код для обоих из них.
Однако, если вас больше интересует персонаж, возникший в результате нажатия клавиши, вы должны использовать событие "keypress". Это событие срабатывает после keydown/up, и оно сообщает фактический код кодировки unicode символа, который был введен внутри event.which или event.charCode, который в приведенном выше примере является десятичным числом 1078 или U + 0436.
Итак, если вы предпочитаете не угадывать раскладки клавиатуры, и вам не нужно различать keyup/keydown, нажатие клавиши может быть жизнеспособной альтернативой для вас. Он не идеален (большинство браузеров не сообщают о событиях нажатия клавиш на клавишах, которые не печатают символы, такие как ключи-модификаторы, функциональные клавиши и клавиши навигации), но это лучше, чем гадание на кодах клавиш при работе с печатными символами.
Ответ 3
Вы ищете, как определить их локаль. В заголовках HTTP это хранится в заголовке Accept-Language, но это не доступно для браузера через чистую JS.
Там есть плагин jQuery, называемый Язык браузера, который может заставить вас идти по правильному пути.
Ответ 4
Все, что я знаю об этой теме и уже реализовало для нее решение, заключается в обнаружении не английской макетной клавиатуры, i.e Языки, которые используют любой алфавит, отличный от английского,. Решение зависит от регулярного выражения для соответствия любому символу слова \w
, любому символу цифры \d
и диапазону предопределенных специальных символов английской клавиатуры, поэтому любые другие символы, такие как арабский, японский и т.д., Не будут совпадать, все это использует событие keydown, и я использую это решение, чтобы ограничивать и уведомлять имена пользователей и паролей в форме входа. Я упаковал его в функцию, подобную следующей:
function checkKeyboard(ob,e){
re = /\d|\w|[\.\[email protected]\*\\\/\+\-\^\!\(\)\[\]\~\%\&\=\?\>\<\{\}\"\'\,\:\;\_]/g;
a = e.key.match(re);
if (a == null){
alert('{{__('Error 2:\nNon English keyboard layout is detected!\nSet the keyboard layout to English and try to fill out the field again.')}}');
ob.val('');
return false;
}
return true;
}
Затем вызовите функцию из события следующим образом:
$("#textFieldId").keydown(function(e){
if (!checkKeyboard($(this),e)){
return false;
}
});