Javascript 有没有办法检测当前的输入语言设置?

Javascript 有没有办法检测当前的输入语言设置?,javascript,jquery,html,Javascript,Jquery,Html,我基本上想知道系统的输入语言是什么(对于设置了多种语言输入方法的用户)。这将确定的文本方向是否应为rtl 请记住,加载页面后,此设置可能会更改 在JavaScript/jQuery中有一种简单的方法吗?JavaScript无法访问Accept Language HTTP头,这是浏览器将此信息传输到服务器的方式 这意味着您必须以某种方式使用服务器端脚本,并将Accept Language值作为javascript变量发送 如果您想动态地检查它,您可以对服务器端脚本执行ajax调用,该脚本只从aja

我基本上想知道系统的输入语言是什么(对于设置了多种语言输入方法的用户)。这将确定
的文本方向是否应为
rtl

请记住,加载页面后,此设置可能会更改


在JavaScript/jQuery中有一种简单的方法吗?

JavaScript无法访问Accept Language HTTP头,这是浏览器将此信息传输到服务器的方式

这意味着您必须以某种方式使用服务器端脚本,并将Accept Language值作为javascript变量发送


如果您想动态地检查它,您可以对服务器端脚本执行ajax调用,该脚本只从ajax请求返回Accept-Language头。这样,您可能会发现在加载页面后更改语言设置的用户。

浏览器没有办法告诉您当前的键盘布局(输入语言)。正如@kirilloid所提到的,一个可能的解决方法是检查
keyup
上的
keycode
,并从中确定语言。

我遇到了这种情况,因此我为此编写了一个小jQuery插件:

$.fn.checkDirection = function() {
    var dir = checkRTL(this.val()[0]) ? 'RTL' : 'LTR';
    this.css("direction", dir);

    function checkRTL(s) {
        var ltrChars = 'A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF' + '\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF',
        rtlChars = '\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC',
        rtlDirCheck = new RegExp('^[^' + ltrChars + ']*[' + rtlChars + ']');
        return rtlDirCheck.test(s);
    }
};
基本上,只要用户开始输入,它就会检查语言的方向,并相应地设置选择器的方向。用途如下:

$('textarea').on('input', function(){
    $(this).checkDirection();
});

也许一个解决方案是在按键代码之间有一个映射(将用户按在键盘上) 以及实际写入的字母/字符/符号其实际UTF-16代码点

不同的键盘有时会写出不同的字符,即使它们位于键盘上的同一位置(由键盘代码标记)。 因此,例如,键盘上的同一个键(keycode)可以映射到这些符号/字符/字母

ch
-在西班牙

u
-意大利

#
-德国

µ
-比利时语

下面是一个示例代码,它不使用任何映射来确定它可能是什么语言。但这只是一个开始,因为它检查键码、实际字符/字母/符号或glyph,以及整数中的UTF-16代码点。此外,据我所知,在MDN上,没有一个方法和属性被标记为不推荐使用,这与一些示例中使用的charCode和keyCode相反

var keyCode;
var character;
var utfCodePointInDecimal
function checkCodes(event) {
    var that = event
    checkKeyCode(that);
    checkChar(that);
    charUTFPoint();
    console.log("keycode/location on keyboard: " + keyCode);
    console.log("character: " + character);
    console.log("utf code point: " + utfCodePointInDecimal)
}

function checkKeyCode(e) {
    keyCode = e.code;
}

function checkChar(e) {
    character = e.key;
}

function charUTFPoint() {
    utfCodePointInDecimal = Number(character.codePointAt(0));
}

window.onkeydown = checkCodes;
下面是一个指向UTF-16字符列表的链接。(注意,代码点以十六进制表示)

这是我发现的一个网站,每种语言有不同的映射。我相信它是用C语言编写的,但您可能可以将其用作模板,并用JavaScript编写自己的映射


检查
onkeyup
事件中的Check
keycode
textinput
事件中的字符代码可能重复,并将其与某些字符范围进行比较。无法获取系统输入语言(或键盘布局)directly@kirilloid你能不能把这个评论变成一个答案,这样我就可以接受。一个有趣的方法。然而,对于我来说,
$\u服务器['HTTP\u ACCEPT\u LANGUAGE']
总是返回
en-US,en;q=0.8,ar;q=0.6
无论当时哪种输入语言处于活动状态,现在都有办法根据数据判断哪种语言当前处于活动状态。我刚刚用phpinfo()进行了快速检查,它似乎对我有效。我的默认设置(瑞典语作为主要语言)显示HTTP_ACCEPT_language sv se,sv;q=0.8,在美国;q=0.5,en;q=0.3然后我在Firefox设置的顶部添加了南非荷兰语:HTTP_ACCEPT_LANGUAGE af,sv se;q=0.8,sv;q=0.6,en-us;q=0.4,en;q=0.2右,但如果您只是切换输入语言(默认组合键Left-Alt+Left-Shift),则
HTTP\u ACCEPT\u language
字符串保持不变。使用前面提到的组合键更改的输入语言设置是,我想弄清楚/capture.Ah,很抱歉。恐怕我无法想象一种方法来获取这些信息。你能给我一个例子,如何在keyup事件中使用keycode来确定语言吗?