2. Miestne nastavenia

2.1. Princφpy miestnych nastavenφ

Podpora miestnych nastavenφ je dnes mimoriadne d⌠ležit²m faktorom, ktor² charakterizuje jednotlivΘ operačnΘ systΘmy. Časy, keď boli ľudia štastnφ, že to niečo pφše, s· nenßvratne preč a použφvatelia vyžaduj· podporu svojich miestnych nastavenφ. V GNU systΘmoch je tßto podpora implementovanß priamo do štandardnej knižnice jazyka C -- GNU libc. Tßto podpora je navrhnutß tak, aby zohľadňovala všetky požiadavky kladenΘ na nastavenia pre ak·koľvek krajinu a ak²koľvek jazyk.

2.1.1. Ciele a prostriedky

R⌠zne krajiny a kult·ry maj· odlišnΘ pravidlß komunikßcie. Tieto pravidlß m⌠žu byť malΘho rozsahu, napr. formßt dßtumu a času, až po veľmi koplexnΘ ako je jazyk, ktor²m hovoria.

Internacionalizßcia softvΘru znamenß programovať ho tak, aby bol schopn² pracovať s použivateľov²mi miestnymi nastaveniami. V ISO C pracuje internacionalizßcia v zmysle locales. KaždΘ locale (miestne nastavenia) špecifikuje skupinu pravidiel, jedno pravidlo pre každ² učel. Užφvateľ si zvolφ skupinu pravidiel špecifikovanφm locale (pomocou systΘmov²ch premenn²ch).

Všetky programy dedia nastavenΘ locale v rßmci ich prostredia. Pod podmienkou, že programy s· napφsanΘ tak, že akceptuj· nastavenΘ locales, m⌠žu sa riadiť pravidlami, ktorΘ uprednostňuje použφvateľ.

2.1.2. Kateg≤rie a ich funkcie

Tßto časť popisuje jednotlivΘ premennΘ, ktorΘ ovplyvňuj· miestne nastavenia a ktor²mi sa riadia aj funkcie knižnice GNU libc.

Nastavenie premennej prostredia sa robφ pomocou prφkazu shellu
bash$ export LC_PREMENNA=sk

tcsh$ setenv LC_PREMENNA sk
	

LC_PREMENNA je jedna z nasleduj·cich:

  • LC_COLLATE --- Triedenie reťazcov. Nastavenφm tejto premennej možno prin·tiť aplikßcie, napr. sort, ls a inΘ, aby pri porovnßvanφ reťazcov brali do ·vahy miestne rozloženie jednotliv²ch pφsmen v abecede. Slovenčina mß naprφklad hneď niekoľko znakov, ktorΘ by pri triedenφ podľa čφselnej hodnoty znaku sp⌠sobovali problΘmy. SlovenskΘ nastavenia triedenia povedia funkciam strcoll a strxfrm, že naprφklad ch je jedno pφsmeno a nasleduje hneď za h a nie za c, že širokΘ Σ nasleduje za dlh²m ß a to zase za obyčajn²m a. Sk·ste si to na prφkaze sort. Zadajte pφsmenß cc ch hh, potom zmeňte LC_COLLATE prφkazom
    bash$ export LC_COLLATE=sk
    
    tcsh$ setenv LC_COLLATE sk
    	      

    Sk·ste to so sort znovu a porovnajte v²sledok...

  • LC_CTYPE --- Klasifikßcia a prevod znakov, multibyte. Sprßvne nastavenie tejto premennej je nutnΘ pre korektnΘ rozlišovanie znakov abecedy jednotliv²ch jazykov, určenie čφslic, tzv. bielych znakov, prevod mal²ch pφsmen na veľkΘ, atď. Najvhodnejšie je t·to premenn· nenastavovať a t²m umožniť, aby bola jej hodnota prebratß od premenn²ch LC_ALL alebo LANG (viď ďalej). Ak ale nechcete použφvať slovenskΘ nastavenia, len mať sprßvne zobrazenΘ slovenskΘ fonty a funkčn· slovensk· klßvesnicu na konzole aj pod iXami, nastavte iba t·to premenn·.

    Varovanie

    Vždy si buďte stopercentne istφ, že mßte t·to premenn· nastaven· (buď cez LC_ALL, LANG alebo priamo), lebo inak nemß zmysel čφtať ďalej! Ono „klasifikßcia a prevod znakov“ neznie nejako lßkavo, ale vedzte, že je to sakramentsky d⌠ležitΘ pre život slovensk²ch pφsmeniek vo vašom Linuxe!

  • LC_MONETARY, LC_NUMERIC --- Formßt peňažn²ch a čφseln²ch hodn⌠t. Umožňuje meniť skupinu nastavenφ, ktorΘ sa použij· pri formßtovanφ peňažn²ch hodn⌠t alebo všetk²ch ostatn²ch čφseln²ch hodn⌠t. S· to desatinnß čiarka, oddeľovač tisφcov, zoskupovanie čφslic, znamienka pre kladnΘ a zapornΘ hodnoty, atď.

  • LC_TIME --- Formßtovanie dßtumu a času. Nastavenia oddeľovačov medzi hodinami, min·tami a sekundami, nßzvy dnφ, poradie rok, mesiac a deň v dßtume, ...

  • LC_MESSAGES --- V²ber jazyka, použitΘho užφvateľsk²m rozhranφm na preklad hlßšok programov. Toto je presne tß premennß, ktorß prin·ti aplikßcie hovoriť po slovensky. Viď ďalšie kapitoly.

S prekladom hlßsenφ programov, hlavne s umiestnenφm s·borov s preložen²mi reťazcami, s·visφ premennß NLSPATH. Mala by obsahovať dvojbodkami oddelen² zoznam adresßrov, v ktor²ch sa bud· hľadať .mo s·bory pre miestne nastavenia danΘ premennou LC_MESSAGES. Premenn· NLSPATH je však potrebnΘ nastavovať len vo v²nimočn²ch prφpadoch, pretože aplikßcie hľadaj· preklady svojich hlßsenφ v štandardn²ch adresßroch pre tieto s·bory.

Okrem t²chto premenn²ch bolo implementovan²ch niekoľko ďalšφch, ktorΘ zatiaľ nie s· zdokumentovanΘ (The GNU C Library Reference Manual). Ich v²znam je zrejm² z nßzvu, takže uvediem aj svoju dedukciu.

  • LC_PAPER --- Formßt papiera. V našich zemepisn²ch šφrkach sa naprφklad použφva formßt A4, v Amerike je to Letter, atď. Pozor, tßto premennß neobsahuje priamo nßzov formßtu, ale (tak, ako všetky LC_ premennΘ), skratku miestneho nastavenia, teda u nßs to bude sk. Ak by sme chceli použφvať formßt Letter, museli by sme t·to premenn· nastaviť na k≤d miestneho nastavenia niektorej z krajφn, ktorß použφva tak²to formßt, naprφklad us. V tomto prφpade je nutnΘ nainštalovať balφk s miestnymi nastaveniami pre t·to krajinu (locales-us).

  • LC_NAME --- Formßt mena a priezviska. U nßs mß každ² dve menß, pφšu sa v poradφ meno, priezvisko. V Rusku maj· zase tri menß v poradφ meno, otcovo-meno, priezvisko. V Maďarsku maj· dve menß tak ako u nßs, ale pφšu sa v opačnom poradφ. O tom je tßto premennß. Asi...

  • LC_ADDRESS --- Sp⌠sob zßpisu adresy. Poradie ulice a popisnΘho čφsla domu, ZIP k≤d, PSČ apod.

  • LC_TELEPHONE --- Formßt telef≤nnych a faxov²ch čφsel. Určuje zoskupovanie čφslic, ich oddelovanie, počet čφsel predvoľby, ...

  • LC_MEASUREMENT --- Miery. Jednotky hmotnosti, objemu, teploty a dĺžky, použφvanΘ v tej ktorej krajine. Program napφsan² v USA bude pravdepodobne počφtať s gal≤nmi vody, ale ak je sprßvne napφsan², s premennou LC_MEASUREMENT nastavenou na „sk“ bude zobrazovať litre v sprßvnom pomere. To istΘ platφ naprφklad pre prevod teploty vo Fahrenheitovej stupnici na stupne Celsia.

  • LC_IDENTIFICATION --- Az apßd, tak toto neviem. RodnΘ čφslo? Čφslo socißlneho poistenia? Čφslo topßnok?

2.1.3. Ďalšie premennΘ

  • LC_ALL --- Ak je tßto premennß nastavenß, použije sa jej hodnota pre všetky vyššie spomenutΘ skupiny locales, bez ohľadu na hodnotu prφslušn²ch premenn²ch.

  • LANG --- Hodnota tejto premennej sa použije pre tie skupiny locales, ktorΘ nemaj· prφslušn· premenn· nastaven·.

  • LANGUAGE --- Alternatφvne miestne nastavenia. Tßto premennß m⌠že obsahovať usporiadan² zoznam k≤dov miestnych nastavenφ oddelen²ch dvojbodkami. S·bory s prekladmi hlßšok programov sa bud· hľadať v poradφ, v akom s· určenΘ v tomto zozname. Ak sa nepodarφ nßjsť s·bor s preložen²mi hlßškami programu v jednom jazyku, použije sa s·bor pre nasleduj·ci jazyk v zozname LANGUAGE. Navyše, ak sa s·bor pre prv² jazyk aj nßjde, ale niektor² reťazec z neho nie je preložen², nepoužije sa p⌠vodn² (anglick²), ale najsk⌠r sa pok·si nßjsť preklad danΘho reťazca v s·bore pre ďalšφ jazyk v zozname LANGUAGE. To je v²hodnΘ pre ľudφ, ktorφ okrem svojho jazyka ovlßdaj· nejak² in² lepšie ako angličtinu, v ktorej s· zvyčajne programy originßlne napφsanΘ. Naprφklad Slovßk by mohol mať nastavenΘ LANGUAGE="sk:cz" a Szolvßk z Komßrom zase LANGUAGE="hu:sk".

    V²straha

    Premennß LANGUAGE ovplyvňuje len premenn· LC_MESSAGES! Pre sprßvnu funkciu je nutnΘ nastaviť aj ostatnΘ premennΘ (minimßlne LC_CTYPE).

  • LINGUAS --- Tßto premennß nemß špecißlny v²znam z hľadiska GNU libc, ale zvykne sa použφvať pri inštalßcii programov (zo zdrojßkov). Medzerami oddelen² zoznam k≤dov miestnych nastavenφ určuje jazyky, pre ktorΘ si užφvateľ želß inštalovať preklady reťazcov aplikßcie. Prφklad:
    bash$ export LINGUAS="sk cz"
    bash$ ./configure
    bash$ make install
    	    

    Tieto prφkazy skompiluj· a nainštaluj· aplikßciu s podporou slovenčiny a češtiny. InštalačnΘ skripty obvykle tiež kontroluj· obsah premenn²ch LANG a LC_ALL, tieto ale m⌠žu obsahovať len jeden k≤d miestnych nastavenφ.

  • RPM_INSTALL_LANG --- Častejšie ako zo zdrojovΘho k≤du sa aplikßcie inštaluj· z r⌠znych balφkov (rpm, deb, ...). Kv⌠li šetreniu miestom na disku (a logike -- mßlokto ovlßda tridsať rečφ) je v RPM4 možnΘ určiť jazyk, ktorΘho preloženΘ hlßšky sa bud· inštalovať. Preto odpor·čam do s·boru .bash_profile (.login) užφvateľa, ktor² inštaluje balφky (root), vložiť nasledovn² riadok:
    bash$ export RPM_INSTALL_LANG=sk
    
    tcsh$ setenv RPM_INSTALL_LANG "sk"
    	    

    Ak sa vßm nebodaj stane takß vec, že nainštalujete cel² operačn² systΘm a až potom sa dozviete o tejto premennej (tak, ako sa to stalo aj mne), sk·ste skript uveden² v časti RPM4.

2.1.4. Priorita premenn²ch

Miestne nastavenia sa určuj· zo spomenut²ch premenn²ch, pričom tieto sa vyhodnocuj· v tomto poradφ:

LANGUAGE --- ovplyvňuje len LC_MESSAGES
LC_ALL
LC_*
LANG

To znamenß asi toľko, že keď raz nastavφte LC_ALL, jednotlivΘ premennΘ LC_* sa už neber· do ·vahy. Na druhej strane, ak mßte naprφklad nastavenΘ len niektorΘ z LC_*, ostatnΘ sa nastavia na hodnotu premennej LANG.

2.1.5. K≤dy miestnych nastavenφ

PremennΘ, ktorΘ ovplyvňuj· miestne nastavenia, sa napĺňaj· k≤dmi miestnych nastavenφ. K≤dy miestnych nastavenφ s· reťazce, ktor²ch formßt sa riadi niekoľk²mi pravidlami. Všeobecn² tvar je:
jazyk[_·zemie[.k≤dovanie]][@modifikßtor]
	

jazyk je napr. sk pre slovenčinu, cs pre češtinu, hu pre maďarčinu, ·zemie je SK pre Slovensko, CZ pre Česk· republiku, HU pre Maďarsko, k≤dovanie je ISO-8859-2 pre všetky stredoeur≤pske jazyky (je možne použiť niekoľko formßtov na zadanie k≤dovania) a modifikßtor služi na povolenie alebo zakßzanie niektor²ch funkciφ. Tie s· danΘ v definφciach miestnych nastavenφ. Naprφklad, pre Veľk· Britßniu je modifikßtorom reťazec euro a pri jeho použitφ sa ako peňažnß mena bude použφvať euro namiesto libry. To znamenß, že sa musφ použiť k≤dovanie iso-8859-15, ktorΘ definuje znaky euro a cent.

Prφklady k≤dov miestnych nastavenφ (každ² z t²chto reťazcov je možnΘ priradiť premenn²m miestnych nastavenφ, ale najčastejšie sa použφvaj· len dvojpφsmenkovΘ skratky v poslednom stĺpci):

Tabuľka 1. Prφklady k≤dov miestnych nastavenφ

sk_SK.ISO-8859-2sk_SK sk
cs_CZ.ISO-8859-2cs_CZ@-chcs@-chcs
en_GB.iso8859en_GBen@euroen
ja_JP.ujisja_JP.EUCja_JPja

Nemali by sme zabudn·ť na dve štandardnΘ locales, ktorΘ sa použij·, ak nie s· systΘmovΘ premennΘ nastavenΘ a programy ich použφvaj· do doby, k²m sa inicializuje lokalizßcia. Tvrdφm, že sa použij· obe, pretože momentßlne s· totožnΘ, ale v bud·cnosti sa m⌠žu v tejto oblasti štandardy ISO C a POSIX odlišovať a potom to bude zßležať na konfigurßcii systΘmu.

C --- nastavenia podľa štandardu ISO C.
POSIX --- nastavenia podľa štandardu POSIX. V s·časnosti je to alias pre nastavenia C.

2.2. Miestne nastavenia pre Slovensko

V prvom rade treba nainštalovať balφk s podporou miestnych nastavenφ, ktor² mß nßzov locales a tiež balφk s podporou priamo pre Slovensko --- locales-sk. Ak mßte zßujem použφvať aj podporu pre nejak² in² jazyk (na našom ·zemφ je aktußlna najmΣ čeština a maďarčina), musφte tiež nainštalovať balφky pre tieto jazyky.

V druhom rade si musφte nainštalovať balφky s podporou miestnych nastavenφ a priamo slovenčiny (s· to locales a locales-sk).

V ďalšom kroku si nezabudnite nainštalovať balφky locales a locales-sk. Takisto, pre každ² jazyk, ktor² sa chystßte použφvať, si nainštalujte balφk s podporou miestnych nastavenφ.

V prφpade problΘmov s miestnymi nastaveniami sa držte predchßdzaj·cich troch krokov.

2.2.1. S·bory s miestnymi nastaveniami

Prejdime sa teraz trochu po našich adresßroch. Prv² navštφvime /usr/share/locale/sk. Na prv² pohľad vidno, že adresßr a s·bory v tomto adresßri maj· menß totožnΘ s premenn²mi, pomocou ktor²ch sa nastavuj· jednotlivΘ kateg≤rie miestnych nastavenφ. Je to preto, lebo prßve z t²chto s·borov sa načφtaj· nastavenia, keď je danß premennß nastavenß na hodnotu sk. Okrem nich tu m⌠že byť ešte s·bor charset, ktor² obsahuje len jeden riadok s reťazcom iso-8859-2. Ten hovorφ, akΘ k≤dovanie znakov sa mß použiť pre danΘ miestne nastavenia.

Všetky s·bory v tomto adresßri s· binßrne dßta a adresßr LC_MESSAGES obsahuje s·bory, ktor²ch menß s· totožnΘ s nßzvami niektor²ch balφkov nainštalovan²ch na vašom systΘme, s prφponou mo. S· to preklady reťazcov z jednotliv²ch aplikßciφ. O nich si povieme nesk⌠r. Teraz by sme mohli zistiť, čo vlastne obsahuj· s·bory LC_*.

Presuňme sa do adresßra /usr/share/i18n/. Tu, v textovom s·bore sk_SK v podadresßri locales/ sa konečne nachßdzaj· slovenskΘ miestne nastavenia v čitateľnej (a editovateľnej) forme. S·bory v tomto adresßri maj· presne dan· štrukt·ru, ktorß je popφsanß v manußlovej strßnke locale(5). Pre bežnΘho použφvateľa nemß zmysel meniť nastavenia v tomto s·bore, keďže ide o štandardnΘ nastavenia, ktorΘ sa použφvaj· na celom Slovensku. Ale, proti Gustovi žiadna putika! Ak sa teda rozhodnete zmeniť niečo v tomto s·bore, musφte aktualizovať s·bory v prvom spomφnanom adresßri /usr/share/locales/sk/ prφkazom, ktor² ·daje v s·bore sk_SK skompiluje a uložφ do s·borov LC_COLLATE, LC_CTYPE, ...
sh$ localedef -i sk_SK -f ISO-8859-2 sk_SK
	

V podadresßri /usr/share/i18n/charmaps/ sa nachßdzaj· s·bory s popismi jednotliv²ch k≤dovani znakov. Pre Slovensko je aktußlny ISO-8859-2 (čo je aj obsah spomφnaneho s·boru charset).

V adresßri /usr/share/locale/ sa nachßdza s·bor locale.alias, ktor² definuje tzv. aliasy pre k≤dy miestnych nastavenφ. Pre sprßvnu funkciu slovensk²ch miestnych nastavenφ by mal obsahovať tieto dva riadky:
sk              sk_SK.ISO-8859-2
slovak          sk_SK.ISO-8859-2
	

To zabezpečφ, že aj keď nezadßte k≤dovanie znakov, bude použitΘ iso-8859-2. Druh² riadok mß na svedomφ to, že namiesto sk možno zadať slovak.

Varovanie

Ale na aliasy typu slovak si dßvajte bacha! NiektorΘ aplikßcie, ktorΘ v s·vislosti s miestnymi nastaveniami nevyužφvaj· služby libc, totiž na aliasy kašľ· a zaujφmaj· ich len prvΘ dva znaky nastaven²ch premenn²ch. A tak sa zo slovak stane sl, čo je Slovinsko. Pozitφvne je, že pre slovenčinu m⌠žete nastaviť premenn· naprφklad na hodnotu skaderukaskadenoha.

2.2.2. Konfigurßcia miestnych nastavenφ

Nastavenia internacionalizßcie sa (v RedHat a Mandrake) nachßdzaj· v s·bore /etc/sysconfig/i18n. Je to veľmi užitočn² s·bor, ktor² si r²chlo obľ·bite. Možno v ňom nastaviť všetko, čo sa kedy t²kalo internacionalizßcie, nßrodn²ch fontov a rozloženφ klßves. Tento s·bor však len definuje systΘmovΘ premennΘ a zvykne sa vkladať (source /etc/sysconfig/i18n) do inicializačn²ch skriptov. Exportovanie premenn²ch (odovzdanie ostatn²m aplikßcißm) mß na starosti skript /etc/profile.d/lang.sh (bash) alebo /etc/profile.d/lang.csh (tcsh). Tento sa vykonß pri každom štarte shellu, typicky je volan² z /etc/profile (bash) alebo /etc/csh.cshrc (tcsh).

S·bor /etc/sysconfig/i18n definuje nastavenia pre cel² systΘm. Tieto sa použij·, ak sa nenßjde s·bor s užφvateľov²mi nastaveniami. Každ² užφvateľ si m⌠že určiť svoje vlastnΘ nastavenia v s·bore .i18n v jeho domovskom adresßri. Nastavenia sa vždy čφtaj· len z jednΘho z t²chto s·borov, teda ak mß užφvateľ svoj vlastn² s·bor ˜/.i18n, nastavenia zo s·boru /etc/sysconfig/i18n sa ignoruj·.

Užφvateľ si m⌠že zmeniť nastavenia aj ručne, kedykoľvek sa mu zachce, nastavenφm premenn²ch prostredia LC_MESSAGES, LANG, atď.

Vypn·ť nejakΘ nastavenie je možnΘ prφkazom
sh$ unset LC_MESSAGES LANG
	

T²m sa zrušia nastavenia dan²ch premenn²ch (a použije sa štandardnΘ locale C alebo POSIX).

Ak mßte naprφklad nastavenΘ premennΘ LC_ALL=sk a LC_MESSAGES=cz, tak po prφkaze unset LC_ALL nebudete mať hlßsenia programov v angličtine, ale češtine. Preto, ak chcete vypn·ť nejakΘ nastavenia, vždy musφte prφkazom unset zrušiť nastavenia všetk²ch premenn²ch, ktorΘ m⌠žu ovplyvňovať danΘ miestne nastavenia.

Poznßmkaexport/setenv
 

Neodpustφm si mal· poznßmku k prφkazu export. Je to vstavanß funkcia všetk²ch shellov kompatibiln²ch s klasick²m sh (teda aj bash). Pre shelly typu tcsh je ekvivalentom prφkaz setenv.

Je d⌠ležitΘ uvedomiť si, čo presne tento prφkaz robφ s premenn²mi. V dokumentßcii k bashu sa hovorφ, že export označφ premenn·, aby bola odovzdanß detsk²m (child) procesom v rßmci prostredia (environment). To znamenß asi toľko, že keď spustφte napr. iXy z materskΘho procesu bash, ktor² pri štarte exportoval premenn· LANG=sk, všetky aplikßcie v prostredφ X Window System bud· dediť toto nastavenie a teda (ak to sami podporuj·) bud· fungovať po slovensky. Ak budete chcieť spustiť aplikßciu bez slovensk²ch nastavenφ, musφte v xterme zadať prφkaz unset LANG (unsetenv LANG pre tcsh), čφm pre všetky detskΘ procesy xtermu (presnejšie shellu, ktor² je v ňom spusten²), zrušφte nastavenie premennej LANG. Potom aplikßcie spustenΘ priamo z tohto xtermu bud· fungovať bez podpory slovenčiny. Trochu sa s t²m pohrajte.

2.2.3. Nastavenie časovej z≤ny

S miestnymi nastaveniami ·zko s·visφ aj nastavenie časovej z≤ny. Vedel by som o tom rozprßvať celΘ hodiny, ale ono by to muselo byť zložitejšie ako len nastavenie jednej premennej... A to takto:
bash$ export TZ="Europe/Bratislava"

tcsh$ setenv TZ "Europe/Bratislava"
	

Toto nastavenie ovplyvňuje len časov² posun oproti hardverov²m hodinßm. (Mimochodom, odpor·čam hardverovΘ hodiny nastavenΘ na greenwichsk² svetov² čas, čφm tiež odpadaj· problΘmy s prechodom medzi letn²m a zimn²m časom atď. ale o tom s· popφsanΘ inΘ s·bory.) Toto celΘ je dosť dobrß vec, hlavne ak mate prφstup k počφtaču v inej časovej z≤ne, ale chcete pracovať s časom v stredoeur≤pskej z≤ne. Do svojho s·boru .bash_profile (.login pre tcsh) vložte vyššie uveden² riadok.

2.3. Prφklady miestnych nastavenφ