Kullanıcıya görüntülenen iletilerin İngilizce olduğu olağan bir Ruby yazılımı düşünün. Örneğin böyle bir yazılımda kullanıcıya görüntülenen bir hoşgeldin iletisi aşağıdakine benzer bir şekilde gerçeklenir:
puts "Welcome!"
=> Welcome!
Türk kullanıcılar gözönüne alınarak yazılımın aynı iletileri Türkçe olarak
görüntülemesi için tr
adında bir çeviri modülü geliştirileceğini varsayalım.
Bu modül kullanıldığında yazılımdaki İngilizce ileti görüntüleyen tüm satırlarda
aşağıda örneklenen türde bir değişiklik gerekecektir.
require 'tr'
t = Tr.new
...
puts t.message("Welcome!")
=> Merhaba!
Görüldüğü gibi tr
modülü message
adında bir metod sunarak çeviri yapmakta ve
programın ilk satırlarında Tr.new
çağrısıyla önce çeviriler yüklenmektedir.
Çevirilerin modülle aynı dizinde bulunan tr.txt
adında bir dosyada, her
satırda bir İngilizce ileti ve ==
ayırıcısından sonra çeviri iletisi gelecek
şekilde kaydedildiğini varsayıyoruz.
Welcome!==Merhaba!
...
Eğer bir ileti henüz çevrilmemişse çeviri dosyasında yine de tanımlı olmalı
fakat çeviri iletisi boş geçilmelidir. Örneğin Untranslated message
içerikli
bir iletinin henüz çevrilmemişse çeviri dosyasında şu şekilde kayıtlı olduğunu
varsayın.
Untranslated message==
message
metodu çevrilmeyen bir iletiyle karşılaştığında doğrudan iletinin
İngilizce halini görüntüleyecektir. Örnek:
puts t.message("Untranslated message")
=> Untranslated message
a. Bu bilgilere göre tr
modülünü gerçekleyin.
b. Çeviri istastiğini görüntülemek amacıyla modüle report
adında bir
sınıf metodu ekleyin. report
metodu şu örneğe uygun şekilde çalışmalıdır.
require 'tr'
Tr.report
=> Toplam ileti sayısı: 10
=> Çevrilmeyen ileti sayısı: 5
=> Çeviri oranı: %50
Gerçeklemenizde aşağıdaki ipuçlarını dikkate alın.
-
Modül içinde
Tr
isimli bir sınıf olmalı ve gerekli tüm nesne metodları bu sınıfta gerçeklenmelidir. -
Bir dizgiyi ayırıcı bir karakter etrafında ikiye ayırmak için
split
metodunu kullanabilirsiniz. Örnek:"foo:bar".split /:/ => ["foo", "bar"]
-
Bir modülün kayıtlı olduğu dizini öğrenmesi için aşağıdakine benzer bir satırları modül dosyasında bulundurmanız yeterlidir.
dir = File.dirname(__FILE__) # bu dosya hangi dizinde?