přihlásit 5363/822325

Locale teoreticky

Locale je POSIX standard pro podporu jednotlivých jazyků a národních zvyklostí. Jeho výhodou je, že program užívající locale může snadno měnit své chování a že programátor jednotlivé národnostní zvyklosti nemusí znát (např. jak se třídí v němčině), stačí když umí pracovat s locale (např. jak nastavit němčinu a třídit za pomocí funkcí z locale).

Locale je sada jazykových a kulturních pravidel, podle kterých vybrané funkce mohou měnit své chování. Locale pokrývá aspekty nastavení jazyka kterým program komunikuje, znakovou sadu kterou používá, lexikografické konvence (např. způsob zápisu čísel a datumu) a podobně.

Locale je primárně implementováno v jazyku C a ony spolupracující (locale) funkce jsou implementovány v knihovnách jazyka C. Jazyk Python je naprogramován v jazyce C, locale funkce používá a poskytuje k nim přístup, takže v něm lze locale bez problémů používat. Platí to i pro další jazyky, jako třeba Perl, PHP a vlastně neznám žádný, který by locale nepodporoval. S určitými potížemi to funguje i ve Windows, které locale jako POSIX standard podporují (trochu nestandardně), ale samy systémově (domnívám se) nevyužívají.

Locale se nastavuje na dvou úrovních. Na první úrovni jej nastavuje uživatel pomocí systémových proměnných operačního systému a dává tak najevo, jaké chování si od programů přeje. Na druhé úrovni se nastavuje přímo v programu (pomocí funkce setlocale()), v kterém to musí ošetřit programátor. Programátor může programu nastavit libovolné locale, ale měl by respektovat přání uživatele.

Když programátor locale programu nenastaví, pak je nastaveno na výchozí hodnotu "C". To odpovídá výchozímu chování funkcí jazyka C.

Locale ovlivňuje řadu věcí. Tyto věci jsou rozděleny do kategorií a každou kategorii lze nastavit zvlášť. Takže je možno například nastavit, aby program komunikoval v angličtině, ale datum zobrazoval v českém formátu. Každé kategorii odpovídá jedna systémová proměnná. Jsou to tyto:

LC_COLLATE
Ovlivňuje chování funkcí strcoll() a strxfrm() které slouží k porovnávání řetězců a tedy třeba třídění dle národních zvyklostí včetně takových chuťovek, jako je třeba české ch.
LC_CTYPE
Mění chování funkcí, které pracují se znaky. To jsou například funkce isupper(), toupper(), mblen(), wctomb() a další. Tyto po správném nastavení locale umí dobře pracovat třeba se znaky s českou diakritikou.
LC_MONETARY
Ovlivňuje data které vrací funkce localeconv(). Tu používá funkce strfmon(), která slouží k formátování řetězců s měnou.
LC_MESSAGES
Slouží pro nastavení jazyku, kterým program komunikuje. Řídí se podle toho například funkce gettext(), ngettext() a rpmatch(), které slouží k lokalizaci programů. Tyto funkce se z historických důvodů také řídí podle systémové proměnné LANG.
LC_NUMERIC
Může měnit chování rodin funkcí printf() a scanf(), řídí se dle ní i funkce localeconv().
LC_TIME
Mění chování funkce strftime(), která slouží k formátování časových údajů.
LC_ALL
Je nadřazena všem ostatním proměnným a použije se přednostně, je-li nastavena. V opačném případě se použije hodnota příslušné kategorie. Není-li k dispozici, využije se systémová proměnná LANG. Není-li ani tato k dispozici, použije se výchozí hodnota "C".

Podrobné informace. [1]


Seznam URL na stránce:
[1] http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /web/htdocs2/wraithcz/home/www/python/data/sessions/sessions1.php on line 2