- HTML के सिर्फ
dir="auto"attribute से इनपुट बॉक्स और टेक्स्ट एरिया में हिब्रू, अरबी, उर्दू जैसी RTL (दाएँ-से-बाएँ) भाषाओं का automatic support मिल जाता है - अब तक character detection के लिए listener लिखना, third-party library इस्तेमाल करना,
dir="right"को manually switch करना जैसे manual और जटिल तरीके ही जाने जाते थे - "textarea rtl" search results में कहीं भी
dir="auto"का ज़िक्र नहीं था, इसलिए इसे ऐसी समस्या समझा जाता रहा जिसमें direct intervention चाहिए - असल में लागू करने पर, अलग से low-level language parsing के बिना तुरंत सही तरह से काम करता है
- छोटा-सा लेकिन बड़ा बदलाव; दुनिया भर के users app इस्तेमाल कर पाएँगे या नहीं, यह तय करने वाला internationalization (i18n) का core element
RTL support की कठिनाई
- Standard Notes के शुरुआती समय से ही हिब्रू, अरबी, उर्दू जैसी RTL भाषाओं के support की requests आती रही थीं, लेकिन implementation मुश्किल लगने की वजह से इसे टाला जाता रहा
- हर बार review करने पर यह Unicode, ASCII जैसी encodings को low level पर संभालने वाला language parsing task लगता था, इसलिए इससे बचा गया
- हर कुछ महीनों में वही topic दोहराया जाता था, लेकिन हर बार वही सलाह लौटकर आती थी
- खुद character parser लिखना
- third-party library इस्तेमाल करना
dir="right"लागू करना
Search की सीमाएँ
- "textarea rtl", "textarea right to left" आदि से search करने पर भी results में
dir="auto"बिल्कुल नहीं दिखता - इसके बजाय tags में
dir="rtl"लिखने वाली Stack Overflow answers या Twitter की third-party libraries ही दिखती हैं - Search के पहले page पर भरोसा करके इसे ऐसी समस्या मान लिया गया जिसमें direct intervention चाहिए, और यह priority में लगातार पीछे जाता रहा
समाधान मिला
- कुछ हफ्ते पहले फिर से search करते समय एक GitHub post में यह comment मिला कि "textarea में बस
dir="auto"जोड़ दें" - 1 साल से समाधान खोजी जा रही समस्या सिर्फ एक line में हल हो गई
- खुद लागू करके देखने पर यह बिना किसी defect के पूरी तरह काम करता है
लागू करने का तरीका
- इनपुट बॉक्स और टेक्स्ट एरिया में attribute की बस एक line जोड़ें
<textarea dir='auto'> שלום, עתיד. </textarea>
- input value के आधार पर text direction automatically detect होता है
- संदर्भ के लिए MDN की
dirattribute documentation में संबंधित explanation दी गई है
1 टिप्पणियां
Hacker News की राय
input field और textarea की text rendering ठीक करने का यह आसान तरीका सही है, लेकिन submitted text दिखाने वाले elements पर भी यही लागू करना होगा
और जब आप bidirectional text से टकराते हैं, जैसे किसी Arabic paragraph के अंदर English product name, तो जटिलता पूरी तरह अलग स्तर पर पहुंच जाती है
Chrome में फिलहाल
dir='auto'वाले input fields में RTL text rendering को प्रभावित करने वाला एक regression bug है, लेकिन fix पहले ही deploy हो चुका है और अगले release में शामिल होगाMDN हमेशा बचा लेता है: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_att...
अमेरिका के बाहर भी दुनिया है, लेकिन site की प्रकृति के हिसाब से उसे support करना ज़रूरी हो, ऐसा नहीं है
मैं न तो अमेरिकी हूं और न ही native English speaker, लेकिन जिन sites पर मैं जाता हूं उनमें 99% पर username या posts में RTL characters की अनुमति न हो, तब भी कोई समस्या नहीं होती
अगर यह browser या operating system स्तर पर हल नहीं हुआ है, तो मुझे इसे support करना ही चाहिए, ऐसा कोई खास दायित्व नहीं लगता
और इसका मतलब यह नहीं है कि मैं अल्पसंख्यकों को दबाने की बात कर रहा हूं
जल्दी से search करें तो English users लगभग 84 करोड़ बताए जाते हैं; अकेले बनाने वाले के नज़रिए से देखें तो दुनिया के सिर्फ 1/10 तक पहुंच पाना भी काफ़ी ठीक लगता है
ज़्यादा लोगों को support करने के लिए scope बढ़ाना अच्छी बात है, लेकिन यह कोई अनिवार्य ज़िम्मेदारी नहीं है
“Google का पहला results page कभी झूठ नहीं बोलता” — इसमें problem-solving के काम की बात हो सकती है, लेकिन पहले बैठ जाना बेहतर होगा। शायद दुख होगा
“Google का पहला results page कभी झूठ नहीं बोलता…” जैसी अभिव्यक्ति, उसके बाद आने वाले “Google input fields के RTL support के बारे में हमसे झूठ बोलता रहा है” वाले वाक्य को देखते हुए, लगभग निश्चित रूप से व्यंग्य थी
दुर्भाग्य से website और उससे जुड़ा CodePen, दोनों में source rendering काफ़ी खराब है। full stop की जगह गलत है, जबकि rendered HTML ठीक है
यह Unicode bidirectional algorithm की हमेशा वाली विफलता जैसा लगता है
लगता है एक special algorithm चाहिए जो HTML tags, यानी
<और>के बीच के पूरे हिस्से को अंदर से LTR atomic unit की तरह render करे, लेकिन आसपास के characters की direction को प्रभावित न करेइस उदाहरण में algorithm को
.<sequence के बीच में direction बदल पाने में सक्षम होना चाहिएsource code snippet की base direction LTR है, लेकिन Hebrew text की वजह से direction mix हो रही है
punctuation की directionality weak होती है, इसलिए full stop RTL segment के अंत में दिखाई देता है, और क्योंकि base direction LTR है, वह “अंत” दाईं ओर होता है
mixed-direction content को सही तरह render कराने के लिए अक्सर bidirectional control characters डालने पड़ते हैं, ताकि यह बताया जा सके कि खास direction segments कहां से शुरू और खत्म होते हैं
लेकिन इस मामले में ऐसा करना वास्तविक input example की rendering को बिगाड़ सकता है, इसलिए शायद नहीं करना चाहिए
इससे जुड़ा हुआ, पिछले कुछ सालों में logical properties/values का support काफ़ी mature हुआ है
यह
top/left/bottom/rightजैसे direction-based properties का विकल्प है, जो content या text direction बदलने पर अपने-आप adapt कर सकता हैhttps://developer.mozilla.org/en-US/docs/Web/CSS/CSS_logical...
leadingऔरtrailingजैसी चीज़ेंइन्हें web पर आते देखना अच्छा है, और language-independent UI बनाना अब कहीं ज़्यादा व्यावहारिक काम हो गया है
textareaऔर BiDi text के लगभग हर combination के साथ search करें, तो https://www.w3.org/International/talks/1602-oman ऊपर आने वाले links में से एक होता हैउसके अंदर “What if you don't know the direction in advance” section में भी यह सीधे मौजूद है: https://www.w3.org/International/talks/1602-oman/#advance
समस्या यह लगती है कि लेखक इस क्षेत्र से परिचित नहीं था, इसलिए उसे यह भी नहीं पता था कि यहां search term के रूप में BiDi सही शब्द है। यह “bi-directional text” का संक्षिप्त रूप है, और तब इस्तेमाल होता है जब आप किसी खास writing direction को निर्दिष्ट नहीं करना चाहते
“search results गलत थे” ऐसा सोचने के लिए भी मैं उसे दोष नहीं दूंगा। अगर RTL से search करें तो वे नतीजे सही जवाब हैं, लेकिन इस क्षेत्र के बारे में थोड़ा और जानने से पहले यह समझना मुश्किल है
यह internet answers पर निर्भर रहने की सीमा दिखाता है। internet को यह नहीं पता कि मुझे क्या नहीं पता
अगर आप लंबे समय से BiDi पर काम कर रहे किसी व्यक्ति से पूछें, तो उसके पहले सवालों में से एक शायद यह होगा: “क्या आप RTL की बात कर रहे हैं, या BiDi की?”
अगर संभव हो, तो software से ज़्यादा किसी इंसान से पूछना बेहतर है। खासकर तब, जब आप उस क्षेत्र से परिचित न हों
form submit करते समय text input की directionality को साथ में शामिल कर सकने वाले दिलचस्प attribute
dirnameका link भी जोड़ा जा सकता है: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes...अगर मैं browser बनाता, तो public service announcement देता कि अलग से कुछ निर्दिष्ट न होने पर
dir="auto"मान लिया जाएअगर आपको पता है कि user किस भाषा में input करेगा, तो यह भी सबसे अच्छा default नहीं हो सकता। हां, गलत तरीके से निर्दिष्ट करने से तो बेहतर है
थोड़ा संबंधित है: हाल ही में पता चला कि Vim में
:set rlहै, जो text को right-to-left बना देता हैवापस सामान्य स्थिति में आने के लिए
:set norlइस्तेमाल करेंvim -Aभी है, जो Arabic mode में शुरू होता है। यह कैसे काम करता है, पता नहीं; लगता है कोई input method इस्तेमाल होती है:set tdकैसा रहेगा?