| Slovak-HOWTO | ||
|---|---|---|
| Predchádzajúci | Nasledujúci | |
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 funkciamstrcollastrxfrm, ž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ňteLC_COLLATEpríkazombash$ 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ýchLC_ALLaleboLANG(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ú.
Vždy si buďte stopercentne istí, že máte túto premennú nastavenú (buď cez
LC_ALL,LANGalebo 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šetkyLC_premenné), skratku miestneho nastavenia, teda u nás to budesk. 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íkladus. 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 premennouLC_MEASUREMENTnastavenou 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 zoznameLANGUAGE. 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 zoznameLANGUAGE. 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".
Premenná
LANGUAGEovplyvňuje len premennúLC_MESSAGES! Pre správnu funkciu je nutné nastaviť aj ostatné premenné (minimálneLC_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
LANGaLC_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-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 |
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.
![]() | Ale na aliasy typu |
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.
![]() | export/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 |
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í
Užívateľ je síce zo stredného Slovenska, ale už keď s ním bola jeho mama tehotná, púšťala mu do brucha kurzy angličtiny. Nemá teda zmysel používať slovenské nastavenia, až na krajné prípady, napr. slovenské fonty v Gimpe. Darujte mu súbor .i18n s nasledovným obsahom (aj na takéto malé oné potrebuje locales-sk):
LC_CTYPE=sk
Užívateľ je normálny, má rád svoj materinský jazyk, ale netrápi ho, keď má polovicu aplikácií po slovensky a polovicu po anglicky. Po česky vie. Toto ho poteší (nezabudnite mu potajomky nainštalovať aj locales-cs):
LANGUAGE=sk:cs LANG=sk
Užívateľ je z blízkeho juhu, jeho obľúbené pleso je Balaton, všetky hlášky chce po maďarsky, ak sa inak nedá, pochopí aj slovenčinu. Nesmieme zabudnúť na jeho miernu schizofreniu, pričom jedno jeho ja potrebuje slovenské triedenie reťazcov a druhé nevie žiť bez formátovania dátumu a času v češtine. Nikdy sa nesmie zabudnúť na inštaláciu prekladov hlášok pre maďarčinu, češtinu a slovenčinu z balíkov, ktoré podporujú premennú LINGUAS. Treba ho tiež presvedčiť, že inštalácia locales-{sk,hu,cs} nepredstavuje bezpečnostné riziko:
LANGUAGE=hu:sk:cs LC_COLLATE=sk LC_TIME=cs LANG=hu LINGUAS="hu cs sk"
| Predchádzajúci | Domov | Nasledujúci |
| Úvodné informácie | Nastavenia konzoly |
