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

时间:2012-03-01 15:05:34

标签: javascript jquery html

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

请注意,加载页面后此设置可能会发生变化。

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

4 个答案:

答案 0 :(得分:5)

浏览器有方式来判断当前的键盘布局(输入语言)是什么。正如@kirilloid所提到的,一种可能的解决方法是检查keycode上的keyup并确定其中的语言。

答案 1 :(得分:3)

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

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

如果要动态检查它,可以对服务器端脚本执行ajax调用,该脚本只返回ajax请求中的Accept-Language标头。这样,您可能会抓住那些在加载页面后更改语言设置的人。

答案 2 :(得分:0)

我遇到过这种情况,所以我为此写了一个小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();
});

答案 3 :(得分:0)

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

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

Ç-在西班牙

ú-在意大利

#-在德国

µ-比利时语

这里是示例代码,它不使用任何映射来确定它可能是哪种语言。但是这是一个开始,因为它会检查键码,实际字符/字母/符号或字形,以及它的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字符列表的链接。 (请注意,代码点以十六进制表示)

http://www.fileformat.info/info/charset/UTF-16/list.htm

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

https://beta.docs.qmk.fm/using-qmk/simple-keycodes/reference_keymap_extras