вводимые числа в текстовом поле с направлением RTL показывают неправильный вывод

Я пытаюсь поддерживать направление RTL (для арабского языка) в своем веб-приложении. С моими текстовыми полями происходит странная вещь. Когда я ввожу AAAA BBBB CCCC DDDD, я получаю правильное отображение в текстовом поле, но когда я пытаюсь ввести числа, я получаю странный вывод. скажем, мой html-код содержит только

<input type="text" size="30"/>

и мой css содержит

body {
    direction: rtl;
}

Попробуйте ввести

AAAA BBBB CCCC DDDD — обратите внимание, что вывод правильный.

Попробуйте ввести

1111 2222 3333 4444 — обратите внимание, что происходит в текстовом поле.

Я надеюсь, что кто-то может мне помочь. Спасибо!

Примечание. Я не могу использовать javascript, потому что это для мобильных браузеров. Особенно бюджетные устройства.


person rhandom    schedule 22.07.2013    source источник
comment
Вы должны объяснить, что происходит, вместо того, чтобы называть это «странным» и просить других «обратить внимание на то, что происходит».   -  person Jukka K. Korpela    schedule 22.07.2013
comment
Разве не так должен вести себя араб?   -  person Ja͢ck    schedule 22.07.2013
comment
@JukkaK.Korpela да, я предоставил код и изо всех сил старался дать вам обзор того, как проверить эту проблему.   -  person rhandom    schedule 23.07.2013
comment
@Джек, я не уверен в этом   -  person rhandom    schedule 23.07.2013
comment
Я подтвердил это с кем-то, кто имеет некоторое представление о предмете :)   -  person Ja͢ck    schedule 23.07.2013
comment
Я думаю, что это не исправить: D Мне просто нужно доказать это моему премьер-министру. :D   -  person rhandom    schedule 23.07.2013
comment
Какую именно проблему исправить? Если ваша цель состоит в том, чтобы сделать направление написания текстового поля RTL, то, похоже, вы получаете именно это.   -  person Jukka K. Korpela    schedule 23.07.2013
comment
Если вам просто нужно правильное выравнивание без правил, которые поставляются с RTL, вы просто используете text-align: right :)   -  person Ja͢ck    schedule 23.07.2013


Ответы (3)


Несмотря на то, что арабский язык пишется справа налево, отдельные группы цифр (например, «123») записываются как есть. Например:

<-- reading direction
456 123

Интерпретируется как "123, за которыми следует 456".

Кроме того, насколько я могу судить, использование букв AZ влияет на то, как пишутся сгруппированные числа; группы цифр, которые следуют за такими алфавитами, пишутся слева направо, например. «abc 123 456» выходит, как и ожидалось.

person Ja͢ck    schedule 22.07.2013
comment
Текст первого предложения не соответствует примеру. Группы цифр записываются в соответствии с общим направлением письма (справа налево для арабского языка), хотя внутри такой группы цифры идут слева направо. - person Jukka K. Korpela; 23.07.2013
comment
@JukkaK.Korpela Первая часть примера - это то, как вы его печатаете, вторая часть - это то, как он выглядит в основном ... позвольте мне посмотреть, смогу ли я прояснить это еще немного. - person Ja͢ck; 23.07.2013
comment
«Направление ввода» здесь вводит в заблуждение, и текст действительно должен начинаться с чего-то вроде «Направление письма справа налево также влияет на группы цифр». Это не отклонение от общего правила, согласно которому арабский язык пишется справа налево, а его следствие. - person Jukka K. Korpela; 23.07.2013
comment
@JukkaK.Korpela Я исправил ответ. Надеюсь, теперь точнее. - person Ja͢ck; 23.07.2013

используйте этот класс:

.number_ltr {
    direction: ltr!important;
    unicode-bidi: embed;
}

поэтому ваш HTML-код должен выглядеть так:

<input class="number_ltr" type="text" size="30"/>
person Bassem Shahin    schedule 20.06.2018

«Странным» кажется то, что ввод 1111 2222 3333 4444 появляется таким образом, что 1111 — самый правый, 2222 — левый и т. д. Это правильное поведение для direction: rtl. Цифры имеют слабую нейтральность, и при отсутствии символов с сильной направленностью строки цифр идут в соответствии с набором направленности (здесь rtl). Это определяется двунаправленным алгоритмом Unicode. Обратите внимание, как все меняется, если вы вводите сначала латинскую букву, а затем цифры.

Если предполагается, что страница имеет направление справа налево, то правила такого направления обычно должны применяться и в полях ввода текста. Если по какой-то причине вы хотите иметь текстовое поле с направлением слева направо, установите для него атрибут HTML dir=ltr. (Как правило, для направленности лучше использовать HTML, а не CSS, поскольку направленность — это не просто дополнительное предложение по представлению, но часть правил системы письма.)

person Jukka K. Korpela    schedule 22.07.2013