Sorun şurada: i ve ı harf problemi, ancak eldeki dizginin hangi dil kurallarına uyduğunu söylediğimizde çözülebilir. Hemen bir örnek:
char[] ortaklar = "Asım Demir & Jim Iron";
O dizgiyi doğru olarak küçük/büyük olarak dönüştüremeyiz. Eğer Litvanyalılar'ın yaptıklarını yeni öğrendiğimi gibi, biz ASCII iI'dan farklı olarak başka iki i ve ı kullansaydık, ya da aslında Unicode bunu bize verseydi, o zaman sorun olmazdı.
Andrei Alexandrescu o sitede Mart ayında "std.locale" başlıklı bir konu açmış. (Şu anda arama olanakları bozuk olduğu için bağlantısını veremiyorum.) O konuda onu locale'lerin çözüm olmadığına ikna ediyorlar. Ama işin ilginci, Alexandrescu'nun önerdiği çözüm de benim açtığım konuda gösterilen Apple'ın çözümünün aynısı:
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/rangeOfString:options:range:locale:
Fonksiyonlar seçime bağlı olarak bir locale nesnesi alıyorlar. Sonuçta yapılması gereken de bu. Bence Alexandrescu'nun hevesi tekrar canlanmalı (açtığım konuyu görür belki), ve bu bu locale nesneleri Phobos'a eklenmeli. :) Ama bu çözüm de yukarıdaki örneği çözemez, çünkü i'nin duruma göre iki farklı büyüğü var: I veya İ. I'nın da iki küçüğü: i ve ı.
Yine açtığım konuda öğrendiğime göre, Apple'ın Safari tarayıcısında bir web sayfasında Alman ß harfi arandığında çift ss harflerini de buluyormuş. Yani Apple'ın (ve Alexandrescu'nun) çözümü en doğrusu gibi görünüyor.
C++'da bu işleri basitçe yapabildiğimizi sanmıyorum çünkü C++'ta kodun içindeki dizgilere Türkçe harf yerleştirmek bile standart değildir. Yanılmıyorsam C++' ile Türkçe yazabilmek de ancak belirli bir kod tablosu seçmek gerekiyor. Örneğin aynı programda birden fazla dili otomatik olarak kullanamıyoruz.
PayPal'de bu iş için IBM'in ICU kütüphanesini kullanmak zorunda kalmıştık. Kodun içinde std::string değil, o kütüphanenin dizgilerini kullanmak zorundaydık ve UTF-8 dönüşümleri kod içinde açıkça programcı tarafından yapılıyordu. Henüz rahat bir çözüm bu dillerde yok... :(
i ve ı sorunu ise yukarıdaki örnekte görüldüğü gibi, çözümsüz. Unicode bize ek harfler verseydi de bu güne kadar yazılmış olan belgelerle uyumsuz olurduk herhalde. Bu çok büyük bir sorun olmazdı aslında herhalde... (?)
D yine de öteki dillerden çok daha iyi. Bizim yaşadığımız sorunlar, biraz da D2.0'ın gelişimini naklen izlediğimiz için oluyor... :) Ya da: D bize Unicode yazma olanağı verdiği için tam doğrusu için ümitleniyoruz.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]