24 Temmuz 2019 Çarşamba

Türkçe Locale (Yerel Ayar) Problemi

Giriş
Bir diğer ismiyle - Infamous Turkish Locale Problem - yani Türkçe Yerel Ayar Kepazeliği :)

Eğer varsayılan locale Locale.US ise büyük I harfi küçüğe çevrilince i olur.
Eğer varsayılan locale new Locale ("tr,"TR) ise büyük I harfi küçüğe çevrilince ı olur.

Problem Nerede?
Diyelim ki bir Map nesnesini İngilizce doldurduk ve daha sonra uygulamamız çalışırken Locale'imizi Türkçe yaptık. Map şöyle olsun
Key : "initial"
Value : "myvalue"

Map üzerinde arama işleminde key olarak "Initial" kelimesini arayıyor olalım. İngilizce çalışırken bu kelimeyi küçük harfe çevirirsek "initial" elde ederiz ve sorun çıkmaz.

Ancak çalışma esnasında locale Türkçe yapılırsa bu kelimeyi küçük harfe çevirirsek "ınitial" elde ederiz ve bu durumda arama işlemi başarısız olur.

Çözüm 1
Çözüm Apache Commons projesindeki CaseInsentiveMap'i kullanmak.

Çözüm 2
Şöyle yaparız. Bu çözümün eksikliği arama işleminin O(1) yerine Log(N) olması
Map<String, Object> caseInsensitiveMap = new TreeMap<String, Object>(
        String.CASE_INSENSITIVE_ORDER);




Hiç yorum yok:

Yorum Gönder