Yazılımlarda Yerelin Belirtilmesi
Önceki VII. Oylum - Yereller ve Uluslararasılaştırma Sonraki
Yazılımlarda Yerelin Belirtilmesi
Bir C yazılımı yerele ilişkin ortam değişkenlerini başlatıldığında miras alır. Bu işlem kendiliğinden gerçekleşir. Ancak bu değişkenler işlevlerde kullanılan yereli belirtmezler. Çünkü ISO C tüm yazılımların öntanımlı olarak standart C yereli ile başlatılması gerektiğinden bahseder. Ortam tarafından belirtilen yerelleri kullanmak için şöyle bir setlocale çağrısı yapmanız gerekir:
setlocale (LC_ALL, "");
Bu çağrı ilgili ortam değişkenleri ile kullanıcı tarafından belirtilen uzlaşımların kütüphane tarafından gözönüne alınmasını sağlar.
setlocale işlevini belli bir kategoriyi ya da genel amaçlı olarak belli bir yereli belirtmek için de kullanabilirsiniz.
Bu bölümde bahsedilen tüm semboller locale.h başlık dosyasında tanımlanmıştır.
char *setlocale
(int         kategori,
 const char *yerel)
işlev
setlocale işlevi yerel kategori katgorisini yerel yereline ayarlar. Sistem tarafından desteklenen tüm yerellerin listesini kabukta
  locale -a
komutunu vererek alabilirsiniz.
kategori için LC_ALL belirtilmişse, tüm uzlaşımlar için tek bir yerelin belirtilmesini sağlar. Diğer kategori değerleri tek bir amaca uygun uzlaşımı belirtir (bkz. Yerellerin Etkilediği Eylemlerin Sınıflandırılması).
Bu işlevi ayrıca, yerel argümanında boş gösterici aktararak belirtilen kategoriye atanmış değeri öğrenmek için de kullanabilirsiniz. Bu durumda setlocale işlevi, kategori kategorisi için seçilmiş olan yerel ismini içeren bir dizge döndürür.
setlocale işlevi ile döndürülen bu dizge işlevin sonraki çağrıları ile değiştirilen yerel kategorisinin bu ilk duruma getirilmesinde kullanmak üzere saklanabilir (Kopyalama ve Birleştirme). (Kütüphanede kendiliğinden bir setlocale çağrısının asla yapılmayacağı garanti edilmiştir.)
setlocale ile döndürülen dizgede değişiklik yapmamalısınız. İlk duruma getirmek için yapacağınız çağrıda kullanacağınız dizge işlev tarafından döndürülen dizgenin aynısı olmak zorundadır. Ayrıca bu işlemi yaparken yerel dizgesinin alındığı kategoriye atanmasına da dikkat etmelisiniz.
Bu sorguyu LC_ALL kategorisi için yaparsanız, dönen değer, tüm kategoriler için seçilmiş yerellerin birleşimi olacaktır. Bu durumda dönen değer tek bir yerel ismi içermeyebilir. Aslında değerin nasıl görüneceği ile ilgili bir varsayım yapmadık. Ancak işlevin sonraki çağrısında LC_ALL makrosu için aynı değeri aktarırsanız, aynı yerel birleşimi elde edilecektir.
Dönen dizgenin sonradan kullanmak istediğinizde aynı kodlamada kalmasını istiyorsanız dizgenin bir kopyasını saklamalısınız. Dönen göstericinin daima geçerli kalacağı garanti edilmemiştir.
yerel argümanı bir boş gösterici değilse, setlocale tarafından döndürülen dizge kategoriye atanan yeni yerele ilişkin dizge olacaktır.
yerel argümanında bir boş dizge belirtirseniz, ilgili ortam değişkeni okunacak ve değeri belirtilen kategori kategoroisine atanacaktır.
yerel argümanına boş olmayan bir dizge belirtirseniz, mümkünse bu ismin yereli kullanılacaktır.
Geçersiz bir yerel ismi belirtirseniz, işlev bir boş gösterici döndürür ve o anki yereli değiştirmez.
Bu örnekte setlocale işlevinin başka bir yereli geçici olarak etkin kılmak için kullanılması gösterilmiştir:
#include <stddef.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>

void
with_other_locale (char *new_locale,
                    void (*subroutine) (int),
                    int argument)
{
  char *old_locale, *saved_locale;

  /* O anki yerelin ismini alalım.  */
  old_locale = setlocale (LC_ALL, NULL);

  /* setlocale çağrılarıyla bozulmadan önce ismi kopyalayalım. */
  saved_locale = strdup (old_locale);
  if (saved_locale == NULL)
    fatal ("Bellek yetersiz");

  /* Şimdi yereli değiştirelim ve onunla ilgili işlemleri yapalım. */
  setlocale (LC_ALL, new_locale);
  (*subroutine) (argument);

  /* Yereli eski değerine getirelim. */
  setlocale (LC_ALL, saved_locale);
  free (saved_locale);
}
Taşınabilirlik Bilgisi
Bazı C sistemleri ek yerel kategorileri tanımlayabilir; kütüphanenin ileri sürümlerinde bu yapılabilir. Dolayısıyla LC_ ile başlayan bu ek sembollerin locale.h başlık dosyasında tanımlanabileceği varsayılmalıdır.
Önceki Üst Ana Başlık Sonraki
Yerellerin Etkilediği Eylemlerin Sınıflandırılması Başlangıç Standart Yereller
Bir Linux Kitaplığı Sayfası