Подтвердить что ты не робот

RTL находится на веб-странице, меняет числа с тире

Когда на моем веб-сайте отображается текст на иврите, смешанный с числами, и есть номер с тире в середине, число с тире в середине отображается RTL. Например, с текстом: רמה 4–0, он должен отображать 4-0 вместо 0-4, так как это числовая последовательность, а "4" предшествует "0". Однако в браузерах, которые я проверил, он отображает "0" перед "4".

Так как это может произойти, отображается любое место в системных данных, было бы гораздо предпочтительнее иметь решение CSS, которое не требует чего-то вроде:

<span style="direction:ltr">4-0</span>

Общее направление текста должно оставаться RTL, но номера с тире должны отображаться LTR. Должен отображаться правильно в основных браузерах (IE, Firefox, Chrome).

4b9b3361

Ответ 1

Вы можете вставить left-to-right и right-to-left символы маркера (&lrm; и &rlm; соответственно) до и после числовых последовательностей - это не требует дополнительной разметки, без разделителей и сохранит порядок текста в исходном документе.

Альтернативой является наличие некоторой разметки для деления чисел с тире (аналогично тому, что вы сделали), поскольку алгоритм Unicode BIDI просто не справляется с этим конкретным сценарием очень хорошо без помощи (lrm и rlm).

Нет необходимости, чтобы CSS был встроенным, как вы это делали, но вам все равно потребуется что-то вроде:

CSS

.numdash
{
  direction: ltr;
}

HTML:

<span class="numdash">4-0</span>

Третий вариант - это изменение числа и просто использование 0-4 в разметке и изменение этого алгоритма bidi.

Ответ 2

There is another way to do this by appending ‎ before the numbers:

<span>&#x200E;+44 780-780-7807</span>

Ответ 3

Для меня следующий стиль отлично работает:

* {
    unicode-bidi: embed;
}

вы можете проверить этот пример в CodePen (я не знаю иврита, поэтому я скопировал некоторые тексты из здесь)

Ответ 4

Ответ с упоминанием & lrm; и & rlm; верно. Вставка этих невидимых маркеров до или после символа со "слабым" направлением (пунктуация или цифры, которые не имеют "сильного" направления, такого как латинские буквы или арабские/еврейские буквы), гарантируют, что слабый символ наследует желаемое направление.

В статье "BiDi" /Bi -Directional Text wikipedia есть отличное описание проблемы и как интерпретаторы Unicode должны обрабатывать текст смешанного направления. Это помогло мне многое понять:

http://en.wikipedia.org/wiki/Bi-directional_text

Мое личное решение - избегать использования & lrm;/& rlm; символы, потому что я строю сайт, который должен работать в обоих направлениях, а вставка содержимого будет огромным беспорядком. Вместо этого они могут автоматически вставляться с использованием свойств CSS "before" и "after". Вот пример, используя обозначение Unicode "\ 200F" для маркера RLM:

#RIGHT-TO-LEFT-MARKER-CONTENT,
.contributor:after,
/*.contributor:before,*/
.right-to-left-marker-content {
    /*Inserts &rlm; marker to ensure
    the contained content is always 
    displayed RTL*/
    content: "\200F";
}

(Обратите внимание, что CSS находится в формате "DRY CSS", который позволяет добавлять селекторы по мере необходимости, чтобы избежать повторного объявления фактической декларации стиля снова и снова. Важной частью является то, что у вас есть контент: "\ 200F" и что вы добавляете: до или: после селектора по мере необходимости.

Ответ 5

НЕ рассматривайте обратную последовательность, пожалуйста, так как это также сделает обратный результат, если пользователь попытается скопировать и вставить его в другое приложение. Вместо этого вам могут быть интересны не-css-решения:

LRM/RLM‍

LRE/RLE…PDF