2. Miestne nastavenia

2.1 Princípy miestnych nastavení

Podpora miestnych nastavení je dnes mimoriadne doležitým faktorom, ktorý charakterizuje jednotlivé operačne 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.

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ľ.

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 glibc. Nastavenie premennej sa robí pomocou príkazu

export LC_XXX=sk
kde LC_XXX je jedna z nasledujúcich:

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.

Ďalšie premenné

Priorita premenných

Miestne nastavenia sa určujú zo spomenutých premenných, pričom tieto sa vyhodnocujú v tomto poradí:

To znamená asi toľko, že keď raz nastavíte LC_ALL, jednotlive premenné LC_* sa už neberú do úvahy, ale ak mate napriklad nastavené len niektoré z LC_*, ostatné sa nastavia na hodnotu premennej LANG.

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]
kde 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.

Priklady 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):

sk_SK.ISO-8859-2        sk_SK                         sk
cs_CZ.ISO-8859-2        cs_CZ@-ch       cs@-ch        cs
en_GB.iso8859           en_GB           en@euro       en
ja_JP.ujis              ja_JP.EUC       ja_JP         ja

Tiež by sme si mali spomenúť 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 lokalizacia (hovorím, že sa použijú obe, pretože momentálne sú totožné, ale v buducnosti sa môžu štandardy ISO C a POSIX odlišovať a potom to bude záležať na konfigurácii systému):

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. Bez týchto balíkov vám to totiž šlapať nebude!!!

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, o ktorých sme si hovorili. 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ú mená 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 podadresari 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, ...

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 miesto sk možno zadať slovak.

Konfigurácia miestnych nastavení

Nastavenia internacionalizácie sa (v RedHate a Mandraku) nachádzajú v súbore /etc/sysconfig/i18n. Je to veľmi užitočný súbor, v ktorom možno 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ť (. /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, ktorý sa vykoná pri štarte shellu (je volaný z /etc/profile).

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 čítať nebudú.

Užívateľ si môže zmeniť nastavenia aj ručne, kedykoľvek sa mu zachce, zadaním príkazu

export LC_MESSAGES=C LANG=sk
atď.

Vypnúť nejaké nastavenie je možné príkazom

unset LC_MESSAGES LANG
atď, čím sa zrušia nastavenia daných premenných (a použije sa štandardné locale C alebo POSIX). Pozor! 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.

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). Je dôležité uvedomiť si, čo presne tento príkaz robí s premennými. (V skutočnosti robi to isté, čo príkaz declare -x.) 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, čím pre všetky detské procesy xtermu (presnejšie shellu, ktory 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.

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:

export TZ="Europe/Bratislava"

Toto nastavenie ovplyvňuje len časový posun oproti hardverovým hodinám. (Mimochodom, odporúčam hardverové hodiny nastavené na greenwichsky 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 zobrazovanie času (príkaz date) v stredoeurópskej zóne. Do svojho súboru .bash_profile vložte vyššie uvedený riadok a choďte na kofolu...

2.3 Príklady miestnych nastavení


Dopredu Dozadu Obsah