RTL-входной RTL, но с данными измерений LTR |"فسف 3 см فثسف" должно быть (فسف y 3 см فثسف) - PullRequest
0 голосов
/ 22 октября 2018

Кто-нибудь знает, если это проблема браузера, языка Windows или чего-то общего?

Я установил на свой компьютер второй язык, называемый «арабская (Саудовская Аравия) арабская (101) клавиатура».

German (Germany) and Arabic (Saudi Arabia) keyboards

И если я ввожу текст, такой как «тест 3 см тест» (для «3 см» я переключаюсь на немецкую клавиатуру), это более или менее правильно,- с dir="rtl".

RTL sentence

Когда я использую ltr в качестве dir, это выглядит, когда я копирую и вставляю его здесь.

فثسف 3см فثسف

А теперь (главный) вопрос.Когда я добавлю пробел между 3 и cm, это будет наоборот.

RTL sentence

Знаете ли вы, можно ли справиться с этимJavaScript или HTML, как моя модификация изображения ниже?

This is how it should look like

Или это поведение языка?

Заранее спасибо!: -)

Что я пробовал?

  1. Использование auto в dir

<html dir="rtl" lang="ar">
<body>
  <input type="text" dir="auto" style="text-align: left;" value="فثسف 3 cm فثسف" />
</body>
</html>

И это.

<html dir="rtl" lang="ar">
<body>
  <input type="text" dir="auto" style="text-align: right;" value="فثسف 3 cm فثسف" />
</body>
</html>

value происходит из этого рабочего процесса.

  1. Переключиться на арабский (язык RTL)
  2. Напишите "тест"
  3. Переключение на немецкий (язык LTR)
  4. Запись "3 см"
  5. Переключение на арабский (язык RTL)
  6. Запись "test"
  7. Strg + A на входе и положить его в value="STRG + V"

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я использовал идею @ alex-cohn с тегами &lrm; и &rlm; и разработал то, что мне нужно ?

var ltrMarkThere = false;
document.getElementById("test").addEventListener("keydown", function testKey(e) {
  if(e.key.match(/[0-9]/)) {
    document.getElementById("test").value += "\u202a";
    ltrMarkThere = true;
  } else if(ltrMarkThere && e.key.charCodeAt(0) > 127) {
    document.getElementById("test").value = document.getElementById("test").value.replace(/( ?)$/, "\u202c$1");
    ltrMarkThere = false;
  }
});
<html dir="rtl" lang="ar">
  <head>
  </head>
  <body>
    <input id="test" type="text" style="direction: rtl; text-align: right;" autocomplete="off" autofocus="true" value="فثسف ‪3 cm‬ فثسف" />
    <!-- There is a hidden UTF8 Right-to-left-mark and hidden UTF8 Left-to-right-mark which allows to have it like this ? -->
  </body>
</html>
0 голосов
/ 22 октября 2018

Вопрос в том, насколько далеко вы готовы пойти.Вы можете обернуть 3 cm тегом <span>, и тогда он будет размещен независимо от всего, что вокруг него,

<div dir="rtl">فثسف <span dir="ltr">3 cm</span> فثسف</div>

Или вы можете вставить &lrm; и &rlm; или несколько символов, изменяющих направление:

<div dir="rtl">فثسف &lrm;3 cm&rlm; فثسف</div>
...