gettext kataloğunun yeri
Önceki gettext İleti Katalogları Sonraki
gettext kataloğunun yeri
Belirtilen bir iletinin çevirisini elde eden işlevler olağanüstü basit bir arayüze sahiptir. Fakat yazılımın kullanıcısına istediği çeviriyi seçme fırsatı vermek ve yazılımcıya da katalog dosyalarının aranacağı yerler bakımından bir hakimiyet sağlamak gerekir. Tüm bunları denetim altına alacak mekanizma yani kod oldukça karmaşıktır ama kullanımı kolaydır.
catgets işlevleri tarafından da uygulanan iki temel görevin yerine getirilmesi gerekir:
  1. İleti kataloglarının yeri. Hepsi aynı pakete karşılık gelen farklı dillerde bir miktar dosya vardır. Genellikle, bunlar dosya sistemi üzerinde belli bir dizin altında bulunurlar.
    Kurulmuş çok sayıda keyfi paket olabilir ve bunlar dosyalarını bulmak için farklı kuralları izleyebilir.
  2. Kullanıcının isteklerine uyarlanmış çeviri dosyalarının aranması paket tarafından belirtilen konuma göreli olmalıdır. Yani, kullanıcı paketi seçerek her dil ile ilgili dosyayı konumlayabilmelidir.
Bu, gettext belirtimi tarafından gerek duyulan işlevsellik olduğu kadar catgets işlevlerinin de yapabildiği bir şeydir. Ancak, çözümlenmesi gereken bazı sorunlar vardır:
Yapılandırma eylemlerini iki parçaya ayırıyoruz: Biri yazılımcı tarafından uygulanan, diğeri kullanıcı tarafından uygulanan. Kullanıcının eylemlerine temel teşkil edeceğinden burada önce yazılımcının kullanabileceği işlevlerden bahsedeceğiz.
Önceki bölümde açıklanan işlevlerde iletilerin bir alan adına göre seçilebildiğini görmüştük. Bu, ayrı bir alan kullanan her yazılım parçası için eşsiz olması gereken basit bir dizgedir. Bu isim sayesinde aynı anda çok sayıda keyfi alana sahip bir yazılım kullanmak mümkün olur. Örneğin, C kütüphanesini kullanan bir yazılım foo alan adını kullanırken, GNU C kütüphanesinin kendisi libc alan adını kullanır. Burada önemli olan aynı anda sadece bir alanın etkin olduğudur. Bu aşağıdaki işlevle denetlenir.
char *textdomain
(const char *alanadı)
işlev
textdomain işlevi ilerde gettext çağrılarında öntanımlı alan olarak alanadı ile belirtilen alanı etkinleştirir. dgettext ve dcgettext çağrılarında alanadı parametresi ile bir boş gösterici belirtilmedikçe bu alanın etkin olmayacağını unutmayın.
İlk textdomain çağrısından önceki öntanımlı alan adı messages'dir. Bu, gettext arayüzünün belirtiminde belirtilen isimdir. Herhangi bir başka isimden çok daha iyidir. Sorunlarla karşılaşmak istenmiyorsa, hiçbir yazılım bu ismi kullanmamalıdır.
İşlev etkinleştirilen öntanımlı alan adı ile döner. Eğer işlev dönüş değeri için yer ayıramamışsa NULL döndürür ve errno genel değişkenine ENOMEM değerini atar. İşlevin dönüş türü char * olduğundan dönen dizge değiştirilmemelidir. Dönüş değeri için yer ayırma işlemi işlev tarafından dahili olarak yapılır.
Eğer alanadı bir boş gösterici ise hiçbir alan adı etkinleştirilmez. Sadece geçerli öntanımlı alan adı döner.
Eğer alanadı ile bir boş dizge belirtilmişse, öntanımlı alan adı ilk değer olan messages yapılır. messages alanının asla kullanılmaması gerektiğinden dönüş değeri bu değerle sorgulanabilir.
char *bindtextdomain
(const char *alanadı,
 const char *dizinadı)
işlev
bindtextdomain işlevi farklı diller için alanadı alanının ileti kataloglarını içeren dizini belirtmekte kullanılır. Doğru olması bakımından, bu dizinin dizin hiyerarşisi içinde olması beklenir. Aşağıda buna daha ayrıntılı değinilmiştir.
Yazılımla gelen çevirilerin /foo/bar gibi bir dizin hiyerarşisine yerleştirilmiş olması yazılımcı açısından önemlidir. Yazılım bundan sonra bu dizinle bir bindtextdomain çağrısı yaparak alanı bağlar. Böylece katalogların bulunması kesin olarak sağlanır. Düzgün çalışan bir yazılım kullanıcının bir ortam değişkeni belirtmesine ihtiyaç duymaz.
bindtextdomain çağrısı, eğer önceki bağlanan alanların üzerine yazılmaması için farklı alanadı argümanları gerekliyse, defalarca yapılabilir.
Eğer yazılım bir chdir çağrısı ile çalışma dizinini değiştirdiği bir sırada bindtextdomain çağrısının yapılabilmesi için dizinadı argümanının mutlak bir dosyayolu olması önem kazanır. Asi takdirde argümanda belirtilen dizin bu sırada değişebilir.
Eğer dizinadı parametresi bir boş gösterci ise, bindtextdomain alanadı alanı için o an seçili dizin ile döner.
bindtextdomain işlevi normalde seçilen dizinin ismini içeren bir dizgeye gösterici ile döner. Dizge işlev tarafından dahili olarak ayrıldığından yazılımcı bu dizgenin içeriğini değiştirmemelidir. Eğer sistem bindtextdomain çalışırken bir bellek çıktısı (core dosyası) çıktılarsa, işlev NULL ile döner ve errno genel değişkenine ilgili hata durumu atanır.
Önceki Üst Ana Başlık Sonraki
gettext ile Çeviri Başlangıç Gelişkin gettext işlevleri
Bir Linux Kitaplığı Sayfası