В моём рабочем проекте поддерживается ввод текста на RTL-языках. Реализуется это добавлением атрибута dir="auto"
к полям ввода. Однажды я столкнулся с жалобой на очень странное поведение: на Windows переключение раскладки клавиатуры меняло направление всего набранного текста.
Ситуация следующая: пользователь пишет текст на арабском, браузер корректно распознаёт направление текста и отображает его справа налево. В какой-то момент пользователю нужно написать фрагмент текста по-английски, и при переключении раскладки весь набранный текст меняет направление с RTL на LTR. Приходится копировать набранный текст и перезагружать страницу, чтобы восстановить корректное направление.
После исследования контекста и поисков в интернете я выяснил источник проблемы. Стандартное сочетание клавиш для переключения раскладки было изменено пользователем на Ctrl + Shift. В то же время в Windows сочетания клавиш Ctrl + Left Shift и Ctrl + Right Shift меняют направление набираемого текста на LTR и RTL соответственно. Поэтому при переключении раскладки также срабатывало изменение направления текста.
Я долго искал в интернете способ отключить это сочетание клавиш на Windows (судя по вопросам на форумах, этим озадачился не только я), но так ничего и не нашёл. Поэтому на уровне системы эта проблема лечится, похоже, только сменой сочетания клавиш для переключения раскладки.
Эту проблему можно предотвратить на уровне приложения, если вы заранее знаете направление текста, который будет вводиться в конкретное поле. Явное задание направления текста через атрибут dir
в разметке не помогает, а вот задание direction
через CSS — помогает. Чтобы не заморачиваться каждый раз со стилями, я продолжил пользоваться атрибутом dir
, но добавил в таблицу стилей глобальное правило:
[dir="rtl"] {
direction: rtl;
}