Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何识别用户是用RTL还是LTR语言输入?_Javascript_Jquery_Html_Cross Browser - Fatal编程技术网

Javascript 如何识别用户是用RTL还是LTR语言输入?

Javascript 如何识别用户是用RTL还是LTR语言输入?,javascript,jquery,html,cross-browser,Javascript,Jquery,Html,Cross Browser,我想模仿谷歌的输入, 它会根据您输入的语言自动更改输入的输入方向 如何识别用户是使用RTL还是LTR语言输入? 它必须跨浏览器工作。您应该使用属性dir=“auto” e、 g 这样,浏览器将查看第一个强类型字符并自动调整文本 作为参考,这里是W3C的文档:如果你想模仿谷歌的方向性识别算法,你需要听输入的变化,识别插入的字符是RTL还是LTR(或中性),并相应地更改文本框的dir=”“属性 谷歌的算法在很大程度上似乎计算了字符串中的大多数强字符,并由此决定了方向性。如果您键入RTL,它会将上

我想模仿谷歌的输入, 它会根据您输入的语言自动更改输入的输入方向

如何识别用户是使用RTL还是LTR语言输入?
它必须跨浏览器工作。

您应该使用属性dir=“auto”

e、 g


这样,浏览器将查看第一个强类型字符并自动调整文本


作为参考,这里是W3C的文档:

如果你想模仿谷歌的方向性识别算法,你需要听输入的变化,识别插入的字符是RTL还是LTR(或中性),并相应地更改文本框的
dir=”“
属性

谷歌的算法在很大程度上似乎计算了字符串中的大多数强字符,并由此决定了方向性。如果您键入RTL,它会将上下文切换到RTL,如果您随后切换到同一段落的LTR,如果这些字符的数量超过RTL字符,它可能会再次将上下文切换到LTR

相比之下,Facebook也使用了方向算法,但略有不同——它似乎使用第一个强字符来决定段落的方向,而不是整个数字

(记录在案的是,谷歌似乎也有几种算法;Gmail的行为与Google Hangouts稍有不同,这与Google搜索中输入的对齐方式不同。在这些情况下,大多数情况下没有“正确”或“错误”的答案,而是符合您的使用情况)

无论您选择实现哪种方法,您首先需要确定用户正在键入什么。有几种方法可以做到这一点,但我建议如下:

  • 了解一些Unicode双向算法(特别是“强”类型字符)
  • 找到一种在你的上下文中识别强角色的好方法。可以在MediaWiki的语言文件中找到要执行的正则表达式示例(其中组1为LTR,组2为RTL):
您可以创建一个JavaScript方法来侦听用户的输入,使用上面的正则表达式来确定使用了哪个强字符(通过第一个字符或通过计算所有字符,以最适合您使用和缩放的为准),并相应地更改文本框的
dir=“
属性

确保稍后以正确的对齐方式显示提交的文本,因此您可能需要使用某些东西来存储拾取的对齐方式,或者在渲染时重新识别。无论哪种方式,都不要忘记显示器也需要相同的
dir=“
属性。


功能检查RTL(s){
变量ltrChars='A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\U1FF'+'\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF',
rtlChars='\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC',
rtlDirCheck=newregexp('^[^'+ltrChars+']*['+rtlChars+']');
返回rtlDirCheck.测试;
};
//绑定按键
变量输入=$('input')。在('keypress',keypress)[0]上;
功能按键(e){
//需要等待角色
setTimeout(函数(){
var isRTL=checkRTL(String.fromCharCode(e.charCode)),
dir=isRTL?'RTL':'LTR';
input.style.direction=dir;
}, 0);
}
自动定向
(RTL | LTR)

太晚了,但也许有一天它能帮助别人。 此函数将根据第一个输入的字符向输入字段添加方向属性,当用户清除输入文本时,该函数将再次检测文本的新语言

$.fn.Set_Input_Direction = function()
{
    $(this).off('keypress').on('keypress',function(e){
        _This = $(this);
        setTimeout(function()
        {
            if(_This.val().length > 1)
            {
                return;
            }
            else
            {
                var RTL_Regex = /[\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/;
                var isRTL     = RTL_Regex.test(String.fromCharCode(e.which));
                var Direction = isRTL ? 'rtl' : 'ltr';
                _This.css({'direction' : Direction});
            }
        });
    });
};
要使用它:

$('input').Set_Input_Direction();

是什么让你认为谷歌改变了输入的方向?相反,输入的字符会根据其固有方向从左到右或从右到左自动显示。请在此处解释您希望更改的内容。假设您不知道用户将键入什么语言。我希望输入的方向与用户的语言相同。如果他用英语输入,输入的方向将是LTR。但是如果他用阿拉伯语输入,输入的方向将是RTL。当我在文本输入框中输入拉丁字母时,它们将从左到右显示。对于阿拉伯字母,视觉顺序相反。这是任何适当的实施都可以预期的。那么问题出在哪里呢?我会试着用另一种方式来解释:如果您键入ltr langauge-我希望输入得到
text align:left
,如果您使用rtl语言输入,则输入应获得
文本对齐:右。这是有道理的,但接下来的问题是设置对齐方式,而不是方向。没有简单的解决方案,因为JavaScript无法直接访问字符属性。
$('input').Set_Input_Direction();