Herkese merhaba, Bundan bir sure once kdepim suitindeki programlarin Turkce hatalariyla ilgili bazi degerlendirmelerde bulunmustuk.[1] Turkce yerel altinda Debian Sarge'da (kararli surumde) KDE'yi tercih eden butun kullanicilari ilgilendirmesinden ve biraz da konunun yanlis kanaatlerin olusmasina hizmet edecek yonlere gitmesinden dolayi bir bilgilendirme yapmam uygun olur. Turkce konusan/yazan her kullanicinin bu konulardan haberdar olmasinda yarar var. Once bu problemlerle ilgili gecici cozumleri de iceren kisa bir ozet yapayim. Problemler (baslicalari):
* Surum < 3.4.1: Debian Sarge'daki surum 3.3.2, ontanimli yerel tr_TR.
Ontanimli yapilandirmayla kararli surumu takip eden butun kullanicilar
bu problemlerden etkileniyor.
+ tr_TR yereli
1. Kmail IMAP sunucularina baglanamiyor (paket: kdepim-kio-plugins).
(Hatayi daha acik halde gormek icin bir IMAP hesabi olusturup, bu
hesaba ait guvenlik sekmesinden "Sunucunun neyi destekledigini
kontrol et" butonuna tiklayin.) Nedeni: "IMAP" "imap" kucuk /
buyuk harf duyarsiz karsilastirmasi basarisiz.
Gecici cozum secenekleri: Turkce yerel yapilandirmasinda mevcut
degil.
2. Kmail'la gonderilen ve Turkce karakter iceren postalarda Mime
kodlama dogru sekilde yapilamiyor. Postalarin konu basliklari
bozuluyor. Aralarinda Debian listelerinin de oldugu bazi
sunucular bu postalari kabul etmiyor. Nedeni: "ISO-8859-9"
karakter kumesi taniminin yanlis bir yaklasimla yerel altinda
kucuk harfe donusturulmesi ve bu sozcugun "ıso-8859-9" halini
almasi.
Gecici cozum secenekleri (Serdar Aytekin'den alinti):
- Kmail karakter kumesi yapilandirma ekraninda hatali olan kume
taniminin elle duzeltilmesi.
- Hatali olan yereli silip ("Xso-8859-9") bunun yerine "iso-8859-9"
olarak yeni bir karakter kumesi girilmesi.
- Asagida bahsedilen yamalanmis Debian paketlerinin kurulmasi
(guvenlik guncellemesi veya herhangi bir garanti vadedilmiyor.)
- ISO yereli yerine tr_TR.UTF-8 yereli kullanilmasi (fakat bk. ilk
sorun)
+ tr_TR.UTF-8 yereli
1. tr_TR yereli problem (1) (3.3.2'de testlerinden genelleme).
Gecici cozum secenekleri: Turkce yerel yapilandirmasinda mevcut
degil.
* Surum = 3.4.1: Bu iletinin yazildigi tarih itibariyla Experimental
depodaki surum.
+ tr_TR yereli
Surum < 3.4.1 ile ayni.
+ tr_TR.UTF-8
Problem yok.
Bu problemlerin dogasini ilgili yazismalarda kismen aciklamistim.
Sorunu cozen iki farkli yama hazirladim:
http://kirkambar.net/patches/05_ascii_strings_3.3.2_backport.diff
http://kirkambar.net/patches/05_ascii_strings_3.4.1_backport.diff
Bunlardan ilki kararli surum 3.3.2, digeri ise bir sure sonra kararsiz
arsive yuklenecek olan 3.4.1 icin. Ilk yama Baris Metin'in cabalariyla
3.4.1'e giren duzeltmeleri de iceriyor. Son yamadaki duzeltmeleri henuz
ust gelistiriciye iletmedik, Baris'in bu konuyla ilgilenecegini tahmin
ediyorum.
Yukarida verdigim yamalarla hazirlanan paketleri kisa bir sure icinde
hizmete girecegini umdugum debian-tr arsivine yukleyecegim. Dileyenler
(duyurusu yapildiktan sonra) paket arsivinden guncelleme yapabilirler.
Kissadan hisse, bazi onemli sonuclari aktarmak isterim:
* Mesele bazilarinin iddia ettigi gibi KDE'nin UTF-8'i sevmesi ve ISO
yerelinde muzmin tepkiler vermesi degil. Kmail (< 3.4.1)'in (1) nolu
IMAP hastaligi UTF-8 yerelinde de *mevcut*. Diger problem ise, _bir
yonuyle_, tahminimde ifade ettigim, "UCS (Universal Character Set)
Transformation Format 8" kisaltmasina karsi dusen "UTF-8" sozcugunde
"I" harfinin bulunmamasindan ve asagida acikladigim QCString::lower
metodunun beklenen sekilde davranmamasindan kaynaklaniyor. Yani bu
kodlamanin ismi, akla gelen makul bir ihtimal olarak, "International
Character Set ..."e karsilik "ITF-8" olsaydi _ve_ QCString::lower
beklenildigi gibi calissaydi benzer sorunlar yasayacaktik! :-)
* Peki (1) nolu problem 3.4.1 surumunde UTF-8 yerelinde olusmuyor da ISO
yerelinde neden ortaya cikiyor? Bu durumda "KDE UTF-8 ister" mi
diyecegiz? Asagida acikladigim gibi boyle bir yargi filin hortumunu
hissetmekten hareketle yilan tuttuguna hukmetmektir. Biraz genelleme
yaparak, UTF-8'de calisan programlarin ISO kodlamasinda cuvallamasi
ikircikliginin (Glibc'ye kadar uzanan) temel nedenini irdeleyecegim:
QT kitapliginda iki tip karakter dizisi (string) sinifi var: QString
ve QCString. Bu siniflara ait metodlarin yerel altindaki davranisi
QT API belgelerinde aciklanmis ama ben kestirmeden Lars Knol'dan
alinti yapayim (kendisi QT esrafindan oluyor):
From: Lars Knoll <[EMAIL PROTECTED]>
> QString::lower() and friends in Qt3 are locale-dependant.
They never were. Why do you think they are?
[...]
I agree that QCString is locale dependent (which is probably a mistake).
Yani "ISO-8859-9" gibi 'I' iceren anahtar kelimelerde QCString::lower
metodunu kullanmissaniz yandiniz, cunku bu metodun resmi (belgelenen)
davranisi 'I'yi 'ı'ya cevirmek! Ama QCString beklenen bu davranisi
ISO yerelinde sergilerken, UTF-8 yerelinde farkli davraniyor. Cunku
QCString '\0'la sonlandirilmis bir byte'lik C tipi karakter dizilerini
idare etmek icin tasarlanmis Unicode duyarsiz bir sinif ve isaret
ettigim bu "tutarsizlik"in kokeni (tolower uzerinden) Glibc'ye kadar
iniyor. Bazi test sonuclari:
QCString server_response("CAPABILITY IMAP4REV1 LOGIN-REFERRALS");
setlocale(LC_ALL, "");
cout << server_response.lower().data()
tr_TR'de sonuc: "capabılıty ımap4rev1 logın-referrals"
^^^
tr_TR.UTF-8'de sonuc: "capabIlIty Imap4rev1 logIn-referrals"
^^^
Sonuc: QCString yerel bagimli donusumleri UTF-8 ve ISO kodlamalarinda
farkli yapiyor! ISO'da her karakter bir byte ve donusturulen karakter
de bir byte, UTF-8'de ise 'I' kucultuldugunde elde edeceginiz karakter
'ı' artik bir byte'la temsil edilemiyor ve (saniyorum bilincli olarak,
zira burada bir "tasma" var) donusturulmeden birakiliyor. Yani UTF-8
altinda calisan programin ISO kodlamasinda cuvallamasi ikircikliginin
temel nedeni Glibc'de de ornegini gordugumuz durum. Bu tutarsizliktan
dogan (veya hasbel-kader dogmayan, fakat gelecekte bir gun dogacak)
cok sorun var. Once kendimizden baslayarak, gelistiricileri bu
inceliklerden haberdar etmek durumundayiz.
Turkce'nin "I/i" talihsizligi tum zamanlarin en irkci tasinabilirlik
sorunlarindan birini olusturuyor. :-) UTF-8 Turkce'nin bu problemine
cozum sunmaz, birtakim sonuclara (olgulara) bakarak boyle birseye
hukmetmek dogru degil. QT ornegiyle anlattigim ve cok ilginc buldugum
ISO/UTF-8 farkliliginda oldugu gibi, problemler bir kodlamada kaybolmus
gibi gorunuyorsa da, bu (onceden planlanmayan) hasbelkader bir durumdur.
[1] http://lists.debian.org/debian-user-turkish/2005/06/msg00608.html
--
roktas
signature.asc
Description: Digital signature

