<p>я знаю, что этот вопрос старый, но для тех из вас, кто был в тупике из-за того, что некоторые ключи отображаются на разные символы в других локалях, есть подход, который вы можете использовать для решения этой проблемы.</p><p>скорее всего, ваш обработчик событий клавиатуры связан с событием keyup или keydown; результаты свойства event.which или event.keycode в этом случае связаны с тем, какая клавиша нажата пользователем. например, тот же ключ, который вы используете для ввода ';' в раскладке en - ключ, используемый для ввода "ж" в раскладке ru, и событие сообщает 186 как код для них обоих.</p><p>однако, если вас больше интересует символ, полученный в результате нажатия клавиши, вам следует использовать событие "нажатие клавиши". это событие срабатывает после нажатия клавиши вниз/вверх, и в нем сообщается фактическая кодовая точка unicode символа, который был введен внутри event.which или event.charcode, который в приведенном выше примере является десятичным 1078 или u + 0436.</p><p>так что, если вы предпочитаете не угадывать раскладки клавиатуры и вам не нужно проводить различие между нажатиями клавиш/нажатиями клавиш, нажатие клавиш может быть жизнеспособной альтернативой для вас. он не идеален (большинство браузеров не всегда сообщают о событиях нажатия клавиш на клавишах, которые не печатают символы, такие как клавиши-модификаторы, функциональные клавиши и клавиши навигации), но это лучше, чем угадывать коды клавиш при работе с печатными символами.</p>

<p>вы ищете, как определить их локаль. в заголовках http это сохраняется в заголовке <a href="http://www.w3.org/protocols/rfc2616/rfc2616-sec14.html#sec14.4">accept-language</a> , но недоступно для браузера через чистый js.</p><p>существует плагин jquery под названием ' <a href="https://github.com/dansingerman/jquery-browser-language">browser language</a> ', который может помочь вам выбрать правильный путь.</p>

<p>все, что я знаю об этой теме и уже реализовал решение для нее, - это обнаружение не английской раскладки клавиатуры, <strong> т.е. языков, которые используют любой алфавит, отличный от английского </strong>. решение состоит в том, чтобы регулярное выражение совпадало с любым символом word <code>\w</code>, любым цифровым символом <code>\d</code> и диапазоном предварительно определенных специальных символов клавиатуры на английском языке, поэтому любые другие символы, такие как арабский, японский и т.д., не будут совпадать, все это использует событие keydown и <em> я использую это решение, чтобы ограничить и уведомить запись имени пользователя и поля паролей в форме входа </em>. я упаковал его в функцию, подобную следующей:</p><pre><code>function checkkeyboard(ob,e){ re = /\d|\w|[\.\$@/+-^!()[]~%&=?><{}"',:;_]/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; } }); </code></pre><p>это <a href="http://jsbin.com/nocalifimi/edit?html,output"><strong> рабочая демо </strong></a> для неизвестных избирателей!</p>