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
Trisimli 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
splitmetodunu 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?