Разработчикам, живущим в пузыре под названием «США» трудно воспринимать остальные страны. Но мне очень часто напоминают, что снаружи тоже есть мир. Это введение может показаться похожим на совершенно необязательную мотивационную речь перед изложением чего-то крайне простого, но одна маленькая деталь может стать разницей между тем, что вашим приложением пользуются люди со всего света, или только люди вроде вас. Разницу между этими мирами я постоянно безуспешно пытаюсь осознать; к счастью, те, кто занимается разработкой качественных веб-браузеров, делают за нас всё самое сложное.
С самого начала разработки Standard Notes я получал просьбы о добавлении поддержки языков с написанием справа налево (RTL; это такие языки, как иврит, арабский и урду). И каждый раз, когда я начинал изучать необходимые для этого действия, это казалось нетривиальной задачей.
Чаще всего в решениях предлагалось добавлять в поля ввода слушатель символов, а при обнаружении символа RTL переключать направление ввода с dir="left"
на dir="right"
. Звучит довольно логично, но вручную реализовывать это страшновато. Для меня Unicode, ASCII и весь мир кодировок не стал тем, в чём бы я хотел разбираться на низком уровне. Поэтому каждый раз, когда я могу избежать написания низкоуровневого парсинга языков, я пользуюсь этой возможностью.
Тема добавления поддержки RTL всплывала каждые несколько месяцев, и каждый раз, когда я изучал этот вопрос, совет всегда был одинаковым: напишите парсер символов, используйте вот такую стороннюю библиотеку или dir="right"
, но ничем этим я заниматься не хотел. Если вы выполните поисковый запрос "textarea rtl" или "textarea right to left" или другие похожие запросы, то ни в одном из них не будет упоминания dir="auto". Вместо этого вы увидите ответы типа «используйте в теге dir="rtl"», или «возьмите эту стороннюю библиотеку», разработанную Twitter, которая обещает, что сделает всё за вас.
Первая страница результатов Google никогда не лжёт, поэтому я думал, что эта проблема требует прямого вмешательства, и никогда не давал ей высокого приоритета.
И лишь несколько недель назад я решил, что больше медлить нельзя. Проблему нужно решить. Я выполнил ещё несколько поисковых запросов, и наконец нашёл пост на GitHub, в котором какой-то неоценённый герой написал: «Можно просто добавить dir="auto" к textarea.»
Что? Не может быть. Это не может сработать. После года поисков решений всё оказалось так просто?
Ага. Я вставил код, проверил, и всё заработало блестяще.
Ничего себе.
Итак, я должен сделать небольшое, но важное публичное заявление: Google лгал нам о поддержке RTL в полях ввода. Она намного проще, чем можно было представить.
<textarea dir='auto'> שלום, עתיד. </textarea>
И теперь вы это знаете.
Комментарии (10)
chemaxa
25.08.2023 06:20+8Почему бы браузерам по умолчанию просто не применять эту настройку?
Видимо есть какой то подвох
n0wheremany
25.08.2023 06:20ImagineTables
25.08.2023 06:20+1А в чём он? Что плохого случится, если в стандарте (https://html.spec.whatwg.org/multipage/dom.html#the-dir-attribute) формулировку “If the element is a textarea element and the dir attribute is in the auto state” дополнить до “or is not in a defined state?
vanxant
25.08.2023 06:20+3Подозреваю, что будут подводные камни с обратной совместимостью, особенно в случае многоязычных текстов с переключаемым направлением письма (а цифры они пишут в нормальном направлении, так что по сути с любыми текстами на арабском/иврите). Любая автоматика может лажать.
urvanov
25.08.2023 06:20+5Мне почему-то всегда казалось, что подобное в стандартных элементах должно как-то по умолчанию работать. А тут, оказывается, что нет.
SergeyMax
25.08.2023 06:20+1Добавьте ???????????? ="auto" к полю ввода
Интересно, помогло бы это, если бы не "программисты из пузыря под названием США"?
numb13
Поисковики и языковые модели не вычисляют ответы на вопросы. Они их подсматривают.
Это можно победить чтением документации.