gettext ile Çeviri
Önceki gettext İleti Katalogları Sonraki
gettext ile Çeviri
gettext işlevlerinin çok basit bir arayüzü vardır. En temel işlev argüman olarak sadece çevrilecek dizgeyi alır ve onun çevirisi ile döner. Bu, özgün dizgenin sadece hata durumunda kullanıldığı, normalde ek bir anahtar gerektiren catgets yaklaşımından en temel farktır.
Çevrilecek dizgenin tek argüman olması şüphesiz dizgenin kendisinin bir anahtar olduğu anlamına gelir. Bundan dolayı ileti kataloglarının hem özgün dizgeyi hem de çeviriyi içermesi gerekir. gettext işlevinin görevi argüman olarak verilen dizgeyi ileti kataloğundaki dizgelerle karşılaştırıp o dizgeye ait çeviriyi döndürmektir. Şüphesiz bu işlem eniyilenmiştir, dolayısıyla bu işlem catgets'deki gibi bir atomik anahtarla erişim sağlamaktan daha pahalıya malolmaz.
gettext yaklaşımının getirileri olduğu gibi götürüleri de vardır. Bu konuda daha fazla ayrıntı için GNU gettext kılavuzuna bakınız.
gettext ile ilgili tüm tanım ve bildirimler libintl.h başlık dosyasında bulunabilir. Bu işlevlerin C kütüphanesinin bir parçası olmayan sistemlerde libintl.a isimli ayrı bir kütüphane olarak (ya da paylaşımlı bir kütüphane olarak) bulunabilir.
char *gettext
(const char *msgid)
işlev
gettext işlevi o an seçili olan ileti kataloglarında msgid ile belirtilen dizgeye eşdeğer çeviriyi arar. Eğer böyle bir dizge varsa onunla döner. Aksi takdirde, msgid ile belirtilen dizgeyi döndürür.
Dönüş değeri char * türünde olduğundan dönen dizgenin değiştirilmemesi gerektiğine dikkat edin. Bu bozuk türdeki sonuçlar işlevin geçmişinden kaynaklanır ve işlevin kullandığı yöntemi yansıtmaz.
Dikkar ederseniz, yukarıda ileti katalogları (çoğul) yazdık. Bu, bu işlevlerin GNU gerçeklemesinin bir özelliğidir ve ileti kataloglarının seçim yöntemlerindan bahsederken bundan daha ayrıntılı sözedeceğiz (bkz. gettext kataloğunun yeri).
gettext işlevi errno genel değişkeninin değerini değiştirmez. Şöyle bir kodu yazabilmek için bu gereklidir:
  printf (gettext ("Operation failed: %m\n"));
Burada errno değeri, %m biçim belirtimiyle işlenerek printf işlevinde kullanılmıştır. Eğer gettext işlevi bu değeri değiştirmiş olsaydı, (printf işlevinden önce çağrılacağından) biz yanlış ileti alacaktık.
Bu durumda, bir ileti kataloğunun mevcut olup olmadığını saptamanın bir yolu yoktur. Normalde katalogların bulunmasını sağlamak kullanıcının görevidir. Çünkü yazılım çalışması için normalde kullanıcının dilinde bir ileti kataloğuna ihtiyaç duymaz, bu bakımdan ileti kataloğunun bulunması için kullanıcıya yardımcı olması beklenmez.
İleti kataloğuna erişmekte kullanılan diğer iki işlev öntanımlı olmayan bir ileti kataloğunun seçilmesine yardımcı olur. Eğer yazılım birbirinden bağımsız olarak geliştirilmiş parçalardan oluşuyorsa, her parçanın kendi ileti kataloğu olabilir ve bunlar aynı anda kullanılabilir. C kütüphanesinin kendisi buna iyi bir örnektir: Anlamı belirsiz bilgileri belirtmesi ama o an seçili bir öntanımlı ileti kataloğuna da bağımlı olmaması gerektiğinden, gettext işlevlerini dahili olarak kullanır.
char *dgettext
(const char *alanadı,
 const char *msgid)
işlev
dgettext işlevi gettext işlevi gibi davranır. Farklı olarak ilk argümanında çevirinin aranacağı ileti kataloğu belirtilir. Eğer alanadı ile bir boş gösterici belirtilmişse, katalog olarak öntanımlı katalog kullanıldığından dgettext işlevi tamamen gettext işlevi gibi davranır.
gettext işlevinde olduğu gibi geçmişten gelen bir özellik olarak dönüş türü char *'dır ve dönen dizgenin asla değiştirilmemesi gerekir.
char *dcgettext
(const char *alanadı,
 const char *msgid,
 int         kategori)
işlev
dcgettext işlevi dgettext işlevinin argümanlarına ek olarak üçüncü bir argüman alır. Bu argüman kategori argümanıdır ve ileti kataloğunun yerelini belirtmek için kullanılır. Yani, yerel kategorisi ve alanadı birlikte, kullanılacak kataloğun yerini tespit ederler (aşağıya bakınız).
dgettext işlevi dcgettext işlevi kullanılarak şöyle ifade edilebilir:
dgettext (domain, string)
yerine
dcgettext (domain, string, LC_MESSAGES)
yazılırsa sonuç aynı olur.
Bu, üçüncü parametre için umulan değerin hangisi olduğunu da gösterir. locale.h başlık dosyasında bulunan kategorilerden biri kullanılabilir. Normalde kullanılabilecek değerler: LC_CTYPE, LC_COLLATE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC ve LC_TIME. LC_ALL değerinin kullanılmadığına dikkat edin. Bu isimle ortam değişkenlerinin değeri arasında bir ilişki yoktur.
dcgettext işlevi, gettext işlevlerine sahip diğer sistemlerle uyumluluk adına gerçeklenmiştir. Aslında kategori parametresinde LC_MESSAGES dışında bir değeri kullanmanın gerekli olduğu bir durum yoktur. Bunun dışında bir seçim sadece sinir bozucu olabilir.
gettext işlevinde olduğu gibi geçmişten gelen bir özellik olarak dönüş türü char *'dır ve dönen dizgenin asla değiştirilmemesi gerekir.
Yukarıdaki üç işlevi bir yazılımda kullanırken sıklıkla karşılaşılan durum msgid argümanının bir dizge sabiti olmasıdır. Yani bu duruma göre bir eniyileme yapmak gerekir. Bunun hakkında biraz düşününce, yeni bir ileti kataloğunun yüklenmesi mümkün olmadıkça bir iletinin çevirisinin değiştirilemeyeceği şeklinde gerçekleşmesi gerekir. Bu eniyileme gettext, dgettext ve dcgettext işlevleriyle gerçeklenmiştir.
Önceki Üst Ana Başlık Sonraki
gettext İleti Katalogları Başlangıç gettext kataloğunun yeri
Bir Linux Kitaplığı Sayfası