[linux-programlama] Re: Glibc, Turkce yereli ve siralama sorunu

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Yüksel ÖZCAN (yuksel@linux-sevenler.org)
Date: Fri 28 May 2004 - 20:21:25 EEST


Selamlar,=20

konuyla pek alakali olmasada da glibc'nin localization olayiyla ilgili bir=
=20
"not bildirmek" istiyorum. c ile yazilmi$ bir programda float bir rakam=20
girdiginizde, ayni rakami 2 kere degistirdiginizde glibc/stdc sapitiyor.=20
Sorun c kaynakli sanirim ama glibc mademki kendi fonksiyon grubunu=20
geli$tirmi$ bu hatayi da duzeltmesi gerekirdi, isteyene ornek kod da=20
gonderebilirim. Olay hakkinda biraz daha aciklayici bilgi ise $oyle; =20
standart c ve glibc'de float tipi degiskenlerde kuru$ ayiraci nokta olarak=
=20
(".") sabittir. En azindan ben degistirmeyi beceremedim(becerebilen varsa=20
nasil yaptigini merak ediyorum). Fakat glibc de strfmon() diye bir fonksiyo=
n=20
var. Bu setlocale ile ayarlanmis dilin sttandartlarina gore float tipteki=20
rakami formatlayarak karakter metni olarak kar$iniza getirmeye yariyor.=20
Buradan da grafik kutuphanesinde gelen sonucu kullanabiliyoruz. =20
setlocale'nin LC_NUMERIC parametresini tr_TR oalrak ayarladigimda glibc de=
=20
strfmon fonksiyonunu kendine gore ayarliyor. bu durumda karsima gelen=20
formatli rakamda kuru$ ayiraci turkiye standartlarina gore duzenlenmi$ olar=
ak=20
"," virgulle ayrilmis olarak geliyor. Esas sorun da bundan sonra ba$liyor.=
=20
$oyle bir du$ununce daha onceden strfmon ile formatlanmi$ bir rakami tekrar=
=20
strfmon'a yolladiginizda bu defa c'nin ayarlari devreye giriyor ve ilk=20
noktaya kadar olan kismi (.) rakam olarak, noktadan sonraki kismi ise kuru$=
=20
olarak aliyor. hali ile uzunca bir rakam bir anda cok kisa hale geliyor.=20
rakamimiz 123456.45 olsun (float)
ilk strfmondan sonra 123.456,45
ikinci strfmondan sonra 123,45=20
gibi bir durum var. Bu glibc'nin bir eksigi degilmidir ?
Bunu cozmek icin $imdilik once noktalari temizleyip, sonra da virgulleri no=
kta=20
yaparak olu$an metnin son halini atof() fonksiyonuna atip, oradan gelen=20
rakami strfmon'a soktuktan sonra gelen karakter metnini gtk_tree_view'e=20
karakter olarak basiyorum. Bu yontemi kullan diyenler olacaktir elbet fakat=
,=20
bu sadece Turkce ve benzeri formatlama sistemini kullanan diller icin bir=20
cozum sayilir. Geli$tirdigimiz projeyi cok dilli tasarladigimiz icin=20
kullanilabilecek tum diller icin gerekli formatlama mekanizmansini kurmak=20
istiyoruz. Neyseki kar$imizda sadece 2 secenek var :)) bir dilde kuru$=20
ayiraci ya noktadir yada virgul :))) Bazi dillerde de strfmon() dan gelen=20
sonucun onunde $ i$areti oluyor. Bu genel bir sorun olarak herkesin kar$isi=
na=20
cikabilir. O yuzden not olarak iletmek istedim.=20

Yuksel OZCAN
http://muhasebeci.sf.net

Per=FEembe 27 May 2004 23:50 tarihinde =FEunlar=FD yazm=FD=FEt=FDn=FDz:
> Selam,
>
> Bir de localedef komutunda son terimi dizinin tam yolunu belirterek verin,
> ba=FEka bir=FEey akl=FDma gelmiyor.
> # localedef -v --force -i tr_TR -f ISO-8859-9 /usr/lib/locale/tr_TR
> # localedef -v --force -i tr_TR -f UTF-8 /usr/lib/locale/tr_TR.utf8
> =FEeklinde.
>
> Esen kal=FDn,
> Nilg=FCn
>
> Per=FEembe 27 May 2004 14:08 sular=FDnda, Devrim GUNDUZ =FEunlar=FD yazm=
=FD=FEt=FD:
> > Merhabalar,
> >
> > On Thu, 27 May 2004, Nilg=FCn Belma Bug=FCner wrote:
> >
> > <kesildi>
> >
> > > /usr/lib/locale/tr_TR ve /usr/lib/locale/tr_TR.utf8 dizinlerinin
> > > =FCretilip =FCretilmedi=F0ine bak=FDn. --force ne olursa olsun =FCret=
ilmesini
> > > sa=F0lar ama siz yine de bak=FDn :-)
> >
> > Bu dosyalar olu=FEmad=FD bende. localedef komutlar=FDn=FD =E7al=FD=FEt=
=FDrd=FDm, ama:
> >
> > LC_CTYPE: table for map "totitle": 14364 bytes
> > LC_CTYPE: table for width: 22744 bytes
> > [root@cp locales]# cd /usr/lib/locale/tr_TR
> > -bash: cd: /usr/lib/locale/tr_TR: No such file or directory
> >
> > Atlad=FD=F0=FDm bir=FEey olabilir mi?
> >
> > Te=FEekk=FCrler.


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.