15/10/07 tarihinde Ruby, Ruby On Rails, Yazılım Geliştirimi, rails hack, Netbeans bölümlerinde yer almak üzere yazıldılar.
TurkceRb projesinin yeni sürümünü yakında sunacağım inşallah. Gem paketini kurduktan sonra require “turkce” require “turkce_rails” diyerek kullanabileceğiz, ayrıca rails ile ruby modülleri de ayrılacak. Konu hakkında daha detaylı girdiyi gem paketini oluşturduktan sonra (süresi belli değil henüz) detaylıca yazacağım inşallah.
Yeni sürümü beklemeden “yaziya_cevir” fonksiyonunu siteden paylaşmayı uygun gördüm.

yaziya_cevir
Verilen sayıyı yazıya çeviren bir fonksiyon. Örnek olarak
puts 11221312755123.yaziya_cevir
=> OnBirTrilyonİkiYüzYirmiBirMilyarÜçYüzOnİkiMilyonYediYüzElliBeşBinYüzYirmiÜç
=> OnBirTrilyonİkiYüzYirmiBirMilyarÜçYüzOnİkiMilyonYediYüzElliBeşBinYüzYirmiÜç
Yazının devamında kaynak kodlarını bulabilirsiniz.
Kaynak Kod: yaziya_cevir.rb
# yardımcı bir fonksiyon (mod + div)
class Fixnum
def adet(bolum)
# renklendirme wordpress sorun çıkarttığı için "div" kullanıldı
# i = self / bolum
i = self.div bolum
i += 1 if self % bolum > 0
return i
end
end
# turkcerb.rubyforge.org
# murat.celiker@gmail.com , 15 ekim 2007
#
module TurkceRb
module Yazisal
require "enumerator"
BIRLER = 1
ONLAR = 2
YUZLER = 3
BASAMAK_ALT_ADET = 3
SAYILAR = { :birler => %w( Bir İki Üç Dört Beş Altı Yedi Sekiz Dokuz) ,
:onlar => %w( On Yirmi Otuz Kırk Elli Altmış, Yetmiş Seksen Doksan ) ,
:diger => %w( Yüz Bin Milyon Milyar Trilyon Katrilyon Katrilyar )
}
def yaziya_cevir
str = self.to_s
uzunluk = str.length
1.upto(BASAMAK_ALT_ADET - (uzunluk % BASAMAK_ALT_ADET)) { str.insert(0, '0') } if uzunluk % BASAMAK_ALT_ADET > 0
dizi, a, uclu_basamak = str.split(//), "", 0
dizi.each_slice(BASAMAK_ALT_ADET) do |i|
a += basamak_degeri(i, dizi.length.adet(BASAMAK_ALT_ADET) - uclu_basamak)
uclu_basamak += 1
end
return a
end
def basamak_degeri(dizi, basamak)
don = ""
dizi.each_index { |i| don += uclu_sayi_degeri(dizi[i].to_i, BASAMAK_ALT_ADET - i ) if dizi[i].to_i > 0 }
don += SAYILAR[:diger][basamak - 1] if basamak >= 2 && !don.empty?
return don
end
private :basamak_degeri
def uclu_sayi_degeri(sayi, basamak)
case basamak
when BIRLER: return sayi_degeri(sayi)
when ONLAR: return sayi_degeri(sayi, :onlar)
when YUZLER: return yuzler_sayi_degeri(sayi)
end
end
private :uclu_sayi_degeri
def sayi_degeri(i, basamak=:birler)
SAYILAR[basamak][i-1]
end
private :sayi_degeri
def yuzler_sayi_degeri(i)
return "#{sayi_degeri(i) if i > 1}#{SAYILAR[:diger][0]}"
end
private :yuzler_sayi_degeri
end
end
class Fixnum
def adet(bolum)
# renklendirme wordpress sorun çıkarttığı için "div" kullanıldı
# i = self / bolum
i = self.div bolum
i += 1 if self % bolum > 0
return i
end
end
# turkcerb.rubyforge.org
# murat.celiker@gmail.com , 15 ekim 2007
#
module TurkceRb
module Yazisal
require "enumerator"
BIRLER = 1
ONLAR = 2
YUZLER = 3
BASAMAK_ALT_ADET = 3
SAYILAR = { :birler => %w( Bir İki Üç Dört Beş Altı Yedi Sekiz Dokuz) ,
:onlar => %w( On Yirmi Otuz Kırk Elli Altmış, Yetmiş Seksen Doksan ) ,
:diger => %w( Yüz Bin Milyon Milyar Trilyon Katrilyon Katrilyar )
}
def yaziya_cevir
str = self.to_s
uzunluk = str.length
1.upto(BASAMAK_ALT_ADET - (uzunluk % BASAMAK_ALT_ADET)) { str.insert(0, '0') } if uzunluk % BASAMAK_ALT_ADET > 0
dizi, a, uclu_basamak = str.split(//), "", 0
dizi.each_slice(BASAMAK_ALT_ADET) do |i|
a += basamak_degeri(i, dizi.length.adet(BASAMAK_ALT_ADET) - uclu_basamak)
uclu_basamak += 1
end
return a
end
def basamak_degeri(dizi, basamak)
don = ""
dizi.each_index { |i| don += uclu_sayi_degeri(dizi[i].to_i, BASAMAK_ALT_ADET - i ) if dizi[i].to_i > 0 }
don += SAYILAR[:diger][basamak - 1] if basamak >= 2 && !don.empty?
return don
end
private :basamak_degeri
def uclu_sayi_degeri(sayi, basamak)
case basamak
when BIRLER: return sayi_degeri(sayi)
when ONLAR: return sayi_degeri(sayi, :onlar)
when YUZLER: return yuzler_sayi_degeri(sayi)
end
end
private :uclu_sayi_degeri
def sayi_degeri(i, basamak=:birler)
SAYILAR[basamak][i-1]
end
private :sayi_degeri
def yuzler_sayi_degeri(i)
return "#{sayi_degeri(i) if i > 1}#{SAYILAR[:diger][0]}"
end
private :yuzler_sayi_degeri
end
end
String sınıfına, Integer sınıfına dahil edebilirsiniz.
class Integer
include TurkceRb::Yazisal
end
class String
include TurkceRb::Yazisal
end
include TurkceRb::Yazisal
end
class String
include TurkceRb::Yazisal
end
Örnek Kullanımlar
puts 11221312755123.yaziya_cevir
puts "028282".yaziya_cevir
puts "028282".yaziya_cevir






