[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Kdepim ve Turkce sorunlari hakkinda -- uzunca ileti



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 <lars@xxxxxxxxxxxxx>

    > 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

Attachment: signature.asc
Description: Digital signature


Reply to: