16

ユーザーが英語 (または他の左から右の言語) または RTL の言語でテキストを入力できるテキストエリアがあります。

ユーザーが RTL で記述する場合、テキストを右揃えにして rtl にするために、右シフト + ctrl を押す必要があります。ただし、Windows (およびおそらく他の最新の OS) では、ユーザーは任意のキーの組み合わせを設定して、言語とテキストの方向を切り替えることができます。

テキストを RTL として表示する方法は知っていますが、表示する方向はどうすればわかりますか?

テキストエリア/テキストフィールドに入力されたテキストがRTLとして入力されたことを検出する方法はありますか?

4

3 に答える 3

33

私はよりシンプルで素敵な解決策を思いつきました。要素に追加dir="auto"するだけで、ブラウザーがその仕事をしてくれます!

参照: http://www.w3schools.com/tags/att_global_dir.asp

于 2013-11-20T14:11:47.233 に答える
1

正規表現を使用して簡単な JavaScript/jQuery コードを作成できます。ただし、JavaScript では正規表現が制限されているため、プラグインを追加する場合は、Unicode を完全にサポートするXRegExpライブラリを使用する必要があります。次に、 \p{Hebrew}のような式を使用して、文字をチェックして、Unicode のどのブロックに属しているかを確認できます。http://www.regular-expressions.info/unicode.html

同じジレンマに直面して、各文字列の文字をループ処理し、ヘブライ文字の出現回数をカウントする関数を自分で作成しました (私のサイトはイディッシュ語と英語のバイリンガルです)。次に、文字列にスコアが付けられ、スコアの高い要素に「rtl」クラスが適用されます。Unicode のすべての RTL 言語を for ループに簡単に追加して、これをより汎用的にすることができます。

http://jsfiddle.net/Swyu4/9/

jsfiddle の XRegExp ライブラリにリンクしている外部リソースに注意してください。

$('p').each(function() {
    if(isRTL($(this).text()))
        $(this).addClass('rtl');
});

function isRTL(str) {
    var isHebrew = XRegExp('[\\p{Hebrew}]');
    var isLatin = XRegExp('[\\p{Latin}]');
    var partLatin = 0;
    var partHebrew = 0;
    var rtlIndex = 0;
    var isRTL = false;

    for(i=0;i<str.length;i++){
        if(isLatin.test(str[i]))
            partLatin++;
        if(isHebrew.test(str[i]))
            partHebrew++;
    }
    rtlIndex = partHebrew/(partLatin + partHebrew);
    if(rtlIndex > .5) {
        isRTL = true;
    }
/*
console.log('Latin score: ' + partLatin);
console.log('Hebrew score: ' + partHebrew);
console.log('trlIndex score: ' + rtlIndex);
console.log('isRTL: ' + isRTL);
*/

    return isRTL;
}
于 2013-11-13T22:29:53.993 に答える