JavaScript を使用して現在のキーボード レイアウトを検出する方法はありますか? これを見つけましたが、訪問者が英語のレイアウトを使用しているかどうかのみを検出します。de-ch
、fr
または などの文字列として正確なレイアウトを知る必要がありますen
。
6 に答える
この質問が古いことは承知していますが、一部のキーが他のロケールの異なる文字にマップされるという事実に悩まされている方のために、これに対処するために使用できるアプローチを次に示します。
ほとんどの場合、キーボード イベント ハンドラーが keyup または keydown イベントに関連付けられています。この場合の event.which または event.keyCode プロパティの結果は、ユーザーが押したキーに関連付けられています。たとえば、「;」の入力に使用するのと同じキー EN レイアウトの は、RU レイアウトで 'ж' を入力するために使用されるキーであり、イベントは両方のコードとして 186 を報告します。
ただし、キーを押した結果の文字にもっと関心がある場合は、代わりに「keypress」イベントを使用する必要があります。このイベントは、keydown/up の後に発生し、event.which または event.charCode 内に入力された文字の実際の Unicode コードポイントを報告します。上記の例では、10 進数の 1078 または U+0436 です。
そのため、キーボード レイアウトを推測したくなく、キーアップ/キーダウンを区別する必要がない場合は、キープレスが実行可能な代替手段になる可能性があります。これは完全ではありません (ほとんどのブラウザは、修飾キー、ファンクション キー、ナビゲーション キーなど、文字を出力しないキーのキー押下イベントを一貫して報告しません) が、出力可能な文字を扱うときにキーコードを推測するよりはましです。
キーボード レイアウトには、標準化された識別子がありません。それらには、レイアウト作成者によって割り当てられた名前が付けられています。それらは、1 つの定義済みプロパティとして言語の関連付けを持つ場合があります。
キーボード レイアウトを言語またはロケール識別子と混同しないでください。特に、「英語レイアウト」は 1 つではなく、英語に使用できるレイアウトが数十種類あります。
通常、システムが現在のレイアウト設定を JavaScript で読み取れるようにすることはないと思います。
そのため、キーボード レイアウトを検出して解決しようとしている問題が何であれ、別のアプローチが必要です。
あなたが探しているのは、ロケールを検出する方法です。HTTP ヘッダーでは、これはAccept-Languageヘッダーに格納されますが、純粋な JS を介してブラウザーで利用することはできません。
' Browser Language 'と呼ばれる jQuery プラグインがあり、正しい道を歩むことができます。