- HTML'deki tek bir
dir="auto"özniteliği ile girdi alanları ve metin kutularında İbranice, Arapça, Urduca gibi RTL (sağdan sola) diller otomatik olarak desteklenebilir - Daha önce yalnızca karakter algılama dinleyicileri yazmak, üçüncü taraf kütüphaneler kullanmak,
dir="right"ile elle geçiş yapmak gibi manuel ve karmaşık yöntemler biliniyordu - "textarea rtl" arama sonuçlarının hiçbirinde
dir="auto"geçmediği için bunun doğrudan müdahale gerektiren bir sorun olduğu sanıldı - Gerçek uygulamada, ek düşük seviye dil ayrıştırması olmadan anında düzgün çalışıyor
- Küçük gibi görünse de, dünya çapındaki kullanıcıların bir uygulamayı kullanıp kullanamayacağını belirleyen uluslararasılaştırmanın (i18n) temel unsurlarından biri
RTL desteğinin zorluğu
- Standard Notes'un ilk günlerinden beri İbranice, Arapça, Urduca gibi RTL dil desteği talepleri geliyordu, ancak uygulaması zor göründüğü için ertelendi
- Her değerlendirmede bunun Unicode, ASCII vb. kodlamaları düşük seviyede ele almayı gerektiren bir dil ayrıştırma işi olduğu düşünüldü ve kaçınıldı
- Aynı konu birkaç ayda bir tekrar gündeme geldi, ancak her seferinde aynı tavsiyeler döndü
- Kendi karakter ayrıştırıcını yaz
- Üçüncü taraf bir kütüphane kullan
dir="right"uygula
Aramanın sınırları
- "textarea rtl", "textarea right to left" gibi aramalar yapılsa da sonuçlarda
dir="auto"hiç görünmüyor - Bunun yerine Stack Overflow'da etiketlere
dir="rtl"yazmayı öneren yanıtlar ya da Twitter'ın üçüncü taraf kütüphanesi öne çıkıyor - Arama sonuçlarının sadece ilk sayfasına güvenilip bunun doğrudan müdahale gerektiren bir sorun olduğu varsayıldı, bu yüzden öncelik sıralamasında geriye itildi
Çözümün bulunması
- Birkaç hafta önce yeniden arama yapılırken bir GitHub gönderisindeki yorumda, "textarea'ya sadece
dir="auto"eklemek yeterli" ifadesi görüldü - Bir yıldır çözüm aranan sorun tek satırla çözüldü
- Doğrudan uygulandığında kusursuz şekilde çalıştığı görüldü
Uygulama yöntemi
- Girdi alanına veya metin kutusuna yalnızca tek satırlık bir öznitelik ekleniyor
<textarea dir='auto'> שלום, עתיד. </textarea>
- Metin yönü, girilen içeriğe göre otomatik olarak belirleniyor
- İlgili açıklamalar için MDN'nin
dirözniteliği dokümantasyonuna bakılabilir
1 yorum
Hacker News yorumları
Girdi alanları ve textarea'larda metin render etme sorununu düzeltmenin kolay bir yolu doğru, ancak gönderilen metni gösteren öğelerde de aynı işlemin yapılması gerekiyor
Ayrıca çift yönlü metinle, örneğin Arapça bir paragraf içindeki İngilizce ürün adlarıyla karşılaşınca bambaşka bir karmaşıklık seviyesi ortaya çıkıyor
Chrome'da şu anda
dir='auto'bulunan girdi alanlarında RTL metin render etmesini etkileyen bir regresyon hatası var; düzeltme zaten dağıtıma çıktı ve bir sonraki sürüme dahil olacakMDN yine imdada yetişiyor: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_att...
ABD'nin dışında da bir dünya var, ama sitenin niteliğine bağlı olarak bunu desteklemek şart değil
Amerikalı da değilim, İngilizce ana dilim de değil, ama girdiğim sitelerin %99'unda kullanıcı adlarında veya gönderilerde RTL karakterlere izin verilmemesi benim için hiç sorun değil
Eğer bu tarayıcı veya işletim sistemi seviyesinde çözülmemişse, bunu desteklemek gibi bir yükümlülüğüm olduğunu pek düşünmüyorum
Ve bu, azınlıkları bastıralım gibi bir şey de değil
Hızlı bir aramayla İngilizce kullanıcı sayısının 840 milyon civarında olduğu söyleniyor; tek başıma bir şey yapan biri olarak dünyanın 1/10'una hitap edebilmek bana gayet iyi görünüyor
Daha fazla kişiyi desteklemek için kapsamı genişletmek güzel, ama bunun zorunlu olması gerekmiyor
“Google ilk sonuç sayfası asla yalan söylemez” denmiş; sorun çözme konusunda yardımcı olabilecek bazı şeyler var ama önce oturmak isteyebilirsiniz. Muhtemelen üzücü olacak
“Google ilk sonuç sayfası asla yalan söylemez…” ifadesinin, hemen ardından gelen “Google bize girdi alanlarının RTL desteği konusunda yalan söylüyordu” cümlesine bakılırsa, neredeyse kesin olarak hiciv olduğu anlaşılıyor
Ne yazık ki hem web sitesi hem de bağlantılı CodePen için kaynak render etme oldukça bozuk görünüyor. Noktanın yeri yanlış, ama render edilmiş HTML iyi görünüyor
Bu, Unicode çift yönlü algoritmasının her zamanki gibi tökezlemesine benziyor
HTML etiketleri, yani
<ile>arasındaki tüm bölüm, dahili olarak LTR olan atomik bir birim gibi render edilmeli ama çevredeki karakterlerin yönünü etkilememeli; buna yönelik özel bir algoritma gerekiyor gibiBu örnekte algoritmanın
.<dizisinin ortasında yön değiştirebilmesi gerekirKaynak kod parçasının temel yönü LTR, ancak İbranice metin yüzünden yönler karışıyor
Noktalama işaretleri zayıf yönlülüğe sahip olduğu için nokta RTL bölümünün sonunda görünüyor ve temel yön LTR olduğundan bu “son”, sağ taraf anlamına geliyor
Karışık yönlü içeriği doğru render etmeye zorlamak için, belirli yön bölümlerinin nerede başlayıp bittiğini belirten çift yönlü kontrol karakterleri eklemek çoğu zaman gerekir
Ancak bu durumda bunları eklemek, gerçek giriş örneğinin render edilmesini bozabilir; dolayısıyla doğru yaklaşım olmaz
Bununla bağlantılı olarak, son birkaç yılda mantıksal özellik/değer desteği olgunlaştı
Bu,
top/left/bottom/rightgibi yöne dayalı özelliklere bir alternatif ve içerik ya da metin yönü değiştiğinde buna uyum sağlayabiliyorhttps://developer.mozilla.org/en-US/docs/Web/CSS/CSS_logical...
leadingvetrailinggibiBunun web'e de gelmesi güzel ve dilden bağımsız arayüz oluşturmayı çok daha gerçekçi hale getiriyor
textareave BiDi metinle aklıma gelebilecek neredeyse her kombinasyonu aradığınızda https://www.w3.org/International/talks/1602-oman üst sıralardaki bağlantılardan biri çıkıyorİçindeki “What if you don't know the direction in advance” bölümü de doğrudan bununla ilgili: https://www.w3.org/International/talks/1602-oman/#advance
Sorun şu ki yazar bu alanı pek bilmiyor gibi; burada doğru arama teriminin BiDi olduğunu da bilmiyormuş gibi görünüyor. Bu, “bi-directional text”in kısaltması ve belirli bir yazım yönünü özellikle belirtmek istemediğinizde kullanılan terim
“Arama sonuçları yanlıştı” diye düşünmesini de suçlamak istemem. RTL ile ararsanız çıkan sonuç doğru cevaptır, ama bu alan hakkında biraz daha bilgi sahibi olana kadar bunu anlayamazsınız
Bu, internet yanıtlarına dayanmanın sınırlarını gösteriyor. İnternet benim neyi bilmediğimi bilmiyor
BiDi ile uzun süre uğraşmış birine sorsanız, ilk sorularından biri büyük ihtimalle “RTL'den mi bahsediyorsunuz, yoksa BiDi'den mi?” olurdu
Mümkünse yazılımdan çok insana sormak daha iyi. Özellikle de konuya çok hakim değilseniz
Form gönderiminde metin girişinin yönlülüğünü de dahil edebilen ilginç bir özellik olan
dirnamebağlantısını da eklemek iyi olabilir: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes...Tarayıcı geliştiriyor olsaydım, aksi belirtilmedikçe
dir="auto"varsayılmasına dair bir kamu spotu yapmak isterdimKullanıcının belirli bir dilde yazacağını biliyorsanız, bu da en iyi varsayılan olmayabilir. Yine de elbette yanlış bir yön belirtmekten iyidir
Biraz bağlantılı olarak, yakın zamanda Vim'de metni sağdan sola yapan
:set rldiye bir şey olduğunu öğrendimNormal haline dönmek için
:set norlkullanılıyorvim -Avar. Nasıl kullanıldığını bilmiyorum; galiba bir tür giriş yöntemi kullanıyor:set tdnasıl olurdu?