catopen işlevi katalog ile belirtilen ileti dosyalarını bulmaya çaılışır ve bulduğunda yükler. Dönüş değeri geçirimsiz türdedir ve diğer işlev çağrılarında yüklü kataloğu belirtmek için kullanılabilir.
İşlev başarısız olursa katalog yüklenmemiş demektir ve dönüş değeri(nl_catd) -1'dir. errno genel değişkeni başarısızlığın sebebini belirten bir hata kodu içerir. İşlev çağrısının başarılı olması katalogdaki tüm iletilerin çevrilmiş olduğu anlamına gelmez.
Katalog dosyasının yeri yazılımın kullanıcısının kararını açıklaması sağlanarak belirlenir. Kullanılacak dile karar vermek kullanıcıya bırakılır ve kimi zaman başka bir katalog dosyaları kullanmak yararlı olur. Bunun tamamı kullanıcı tarafından bazı ortam değişkenleri kullanılarak belirtilebilir.
İlk sorun ileti kataloglarının bulunduğu yeri bulmaktır. Her yazılımın farklı dosyalar için kendi yeri olabileceği gibi, katalog dosyaları dillere göre gruplanarak tüm yazılımlar için aynı bir yerde de tutulabilir.
catopen işlevine yazılımın katalog dosyalarının nerede bulacağı kullanıcı tarafından
NLSPATH ortam değişkenine yazılarak belirtilebilir. Bu değerin farklı dil ve yereller için kullanılabilir olması gerektiğinden, değer basit bir dizge olamayacaktır. Dizgenin kendine özgü bir biçimi vardır (
printf'in biçim dizgesi gibi). Bir örnek:
/usr/share/locale/%L/%N:/usr/share/locale/%L/LC_MESSAGES/%N
Görüleceği üzere, iki nokta imleri ile ayırarak birden fazla dizin belirtilebilir. Biçim dizgesinde dikkati çeken ikinci durum %L ve %N belirteçleridir. catopen işlevi bunların çeşitlerini ve yerlerine neleri yerleştireceğini bilir.
- %N
Bu biçim elemanı katalog dosyasının isminin yerine geçer. Değeri, catopen işlevine belirtilen katalog argümanının değeridir.
- %L
Bu biçim elemanı ileti çevirileri için seçili yerelin isminin yerine geçer. Bunun nasıl saptanacağı aşağıda anlatılmıştır.
- %l
(Küçük L harfi.) Bu biçim elemanı yerel isminin dil elemanının yerine geçer. Seçili yereli betimleyen bu dizgenin şu biçimde olması beklenir:
dil[_ülke[.karakter_kümesi]]
Bu biçim elemanı bu dizgenin dil parçasını ifade eder.
- %t
Bu biçim elemanı yerel isminin ülke elemanının yerine geçer. Yerel isminin biçimi yukarda verilmişti.
- %c
Bu biçim elemanı yerel isminin karakter_kümesi elemanının yerine geçer. Yerel isminin biçimi yukarda verilmişti.
- %%
% karakteri bir önceleme karakteri gibi kullanıldığından kendisini de öncelemesi gerekir. %% belirteci aynen printf işlevindeki gibi çalışır.
NLSPATH kullanılarak, kullanılacak farklı dillerin ileti kataloglarının aranacağı dizinler keyfi olarak belirlenebilir. Eğer NLSPATH ortam değişkeni ortamda mevcut değilse, öntanımlı değeri:
önek/share/locale/%L/%N:önek/share/locale/%L/LC_MESSAGES/%N
Burada önek, GNU C kütüphanesi derlenirken configure betiğine --prefix seçeneğinde belirtilen dizindir (bu dizin çoğu zaman ya /usr ya da boş dizgedir).
Sorun artık hangisinin kullanılacağına karar vermektir. Karar, yukarıda bahsedilen biçim elemanlarının nelerle ikame edileceğidir. Herşeyden önce, ileti kataloğunun ismi içinde bir dosya yolu belirtebilir (yani dosya ismi bölü işaretleri içerir). Bu durumda NLSPATH ortam değişkeni kullanılmaz. Katalog yazılımda belirtildiği gibi mevcut olmalıdır; şüphesiz, bu çalışma dizinine görelidir. Bu istenen bir durum değildir ve katalog isimleri bu yöntemle yazılmamalıdır. Bununla beraber, catgets arayüzünü kullanan platformlar bakımından bu davranış taşınabilir olmayacaktır.
Aksi takdirde,
standart ortamdaki ortam değişkenlerinin değerlerine bakılır. Hangi değişkenlere bakılacağına
catopen işlevinin
seçenek parametresine bakarak karar verilir. Eğer bu değer
NL_CAT_LOCALE (
nl_types.h dosyasında tanımlıdır) ise,
catopen işlevi
LC_MESSAGES kategorisi için seçili yerelin ismini kullanır.
Eğer seçenek sıfırsa LANG ortam değişkenine bakılır. Bu davranış, yerel kavramının POSIX yerelleri seviyesinde henüz aşılamadığı erken dönemlerden günümüze ulaşmıştır.
Ortam değişkeninin içerdiği yerel ismi yukarıda açıklandığı gibi dil[_ülke[.karakter_kümesi]]biçiminde olmalıdır. Hiç ortam değişkeni bulunamazsa, çevirilerin kullanılmayacağı anlamına gelen "C" yereli kullanılır.
Bir hata oluştuğunda errno genel değişkenine şunlar atanabilir:
- EBADF
Katalog mevcut değil.
- ENOMSG
Set/ileti demeti ileti kataloğundaki mevcut bir elemanın ismi değil.
Kimi zaman hatalara karşı sınama yapmak faydalı olduğu halde yazılımlar normalde herhangi bir sınamadan kaçınacaktır. Bir çevirinin yokluğu özgün ileti varsa sorun olmaz, çevrilmemiş ileti basılır. Bu durumu kullanıcı ya olduğu gibi kabul eder ya da iletinin neden çevrilmediğini araştırır.