Następna strona Poprzednia strona Spis treści

2. Co to w ogóle jest pakiet "Locales"?

Jest to pakiet, który zawiera ustawienia specyficzne dla twojego kraju. (zapis daty, czasu, specjalne litery itp.) Ustawień tych nie powineneś zapisywać na stałe w swoich programach.

Jeśli masz na swoim komputerze zainstalowane ustawienia lokalne dla różnych krajów/języków, to poprzez następujące zmienne możesz kontrolować zachowanie programów korzystających z nich. Ustawieniem domyślnym jest ustawienie wg. standardu C lub POSIX zapisane na stałe w "libc".

LANG

-- ustawia jakiego języka używamy; może być zmienione przez zmienną LC_xxxx,

LC_COLLATE

-- ustawia porządek sortowania,

LC_CTYPE

-- definicje znaków, duże i małe litery... używane jest to przez takie funkcje jak: toupper, tolower, islower, isdigit itp.

LC_MONETARY

-- definicja formatu liczb związanych z pieniędzmi. Są tu definicje separatora tysięcy, separatora ułamkowego, symbolu pieniądza (zł) i miejsce, gdzie należy go umieścić,

LC_NUMERIC

-- separatory tysięcy i ułamkowe oraz grupowanie numeryczne,

LC_TIME

-- definicja formatu czasowego i datowego. Są tu zdefiniowane np. dni tygodnia, miesiące,

LC_MESSAGES

-- wyrażenia Nie i Tak,

LC_ALL

-- ustawia jakiego języka używamy i zmienia wszystkie inne zmienne LC_xxxx.

Oto niektóre ustawienia, a jest ich znacznie więcej:

en_CA

-- kanadyjski angielski,

en_US

-- amerykański angielski,

de_DE

-- niemiecki niemiecki,

fr_FR

-- francuski francuski.

Jeśli piszesz program i chcesz, aby można go było używać na całym świecie respektuj ustawienia lokalne. Najważniejszym powodem jest to, że nie każdy będzie używał tego samego zestawu znaków czy strony kodowej co ty.

Upewnij się, że nie robisz czegoś takiego w swoich programach:

   /* sprawdź czy to litera */
   if ( (( c >= 'a') && ( c <= 'z' )) ||
        (( c >= 'A') && ( c <= 'Z' )) ) { ... }

Jeśli napiszesz coś takiego, to zakładasz, że użytkownik będzie używał tylko podstawowych znaków z kodu ASCII i nie bierzesz pod uwagę, iż może używać strony kodowej specyficznej dla swojego kraju. Pomija to takie znaki jak np. a-umlaut, które zostałoby użyte w środowisku niemieckim. Zamiast tego powinieneś raczej używać funkcji, które respektują lokalne ustawienia, jak np. isalpha(). Jeśli twój program wyraźnie wymaga tylko podstawowych znaków ASCII (US-ASCII), dalej używasz funkcji isalpha(), ale musisz także ustawić zmienną LANG albo LC_CTYPE albo LC_ALL na "C" lub użyć funkcji setlocale(LC_CTYPE, "C").

Ustawienia lokalne pozwalają na dużą elastyczność i robią pewne założenia, o których programista mógł zapomnieć.

Na przykład nie możesz z góry założyć pozycji danego znaku na stronie kodowej. Nic nie stoi na przeszkodzie, żebyś np. stworzył sobie stronę kodową, na której "A" byłoby na pozycji 99 a nie 65.

Podstawową ideą jest to, że różni ludzie mówią różnymi językami, przetsrzegają różnych reguł sortowania, używają różnych stron kodowych i mieszkają w różnych krajach. Ustawienia lokalne i funkcje, które ich przstrzegają dają środki na respektowanie takich rzeczy i odpowiedniego ich traktowanie. Nie wymaga to dużego nakładu pracy, tylko trochę innego sposobu myślenia podczas pisania takich programów.


Następna strona Poprzednia strona Spis treści