mirror of https://github.com/tLDP/LDP
556 lines
26 KiB
Plaintext
556 lines
26 KiB
Plaintext
<!--DOCTYPE section PUBLIC "-//OASIS//DTD DocBook V4.1//EN"-->
|
|
<!-- $Id$ -->
|
|
|
|
<section id="locales">
|
|
<title id="locales.title">Miestne nastavenia</title>
|
|
|
|
<section>
|
|
<title>Princípy miestnych nastavení</title>
|
|
|
|
<para>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 <acronym>GNU</acronym>
|
|
systémoch je táto podpora implementovaná priamo do štandardnej knižnice jazyka
|
|
<acronym>C</acronym> -- <acronym>GNU</acronym> 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.</para>
|
|
|
|
<section>
|
|
<title>Ciele a prostriedky</title>
|
|
|
|
<para>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.</para>
|
|
|
|
<para>Internacionalizácia softvéru znamená programovať ho tak, aby bol schopný pracovať s
|
|
použivateľovými miestnymi nastaveniami. V <acronym>ISO</acronym> <acronym>C</acronym>
|
|
pracuje internacionalizácia v zmysle <firstterm>locales</firstterm>. 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).</para>
|
|
|
|
<para>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ľ.</para>
|
|
</section>
|
|
|
|
<section>
|
|
<title>Kategórie a ich funkcie</title>
|
|
|
|
<para>Táto časť popisuje jednotlivé premenné, ktoré ovplyvňujú miestne nastavenia a ktorými
|
|
sa riadia aj funkcie knižnice <acronym>GNU</acronym> libc.</para>
|
|
|
|
<para>Nastavenie premennej prostredia sa robí pomocou príkazu shellu
|
|
<screen>
|
|
bash$ export LC_PREMENNA=sk
|
|
|
|
tcsh$ setenv LC_PREMENNA sk
|
|
</screen></para>
|
|
|
|
<para><envar>LC_PREMENNA</envar> je jedna z nasledujúcich:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><envar>LC_COLLATE</envar> --- Triedenie reťazcov. Nastavením tejto premennej
|
|
možno prinútiť aplikácie, napr. <command>sort</command>, <command>ls</command> 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 <function>strcoll</function> a <function>strxfrm</function>, že napríklad
|
|
<literal>ch</literal> je jedno písmeno a nasleduje hneď za <literal>h</literal> a nie
|
|
za <literal>c</literal>, že široké <literal>ä</literal> nasleduje za dlhým
|
|
<literal>á</literal> a to zase za obyčajným <literal>a</literal>. Skúste si to na
|
|
príkaze <command>sort</command>. Zadajte písmená <literal>cc ch hh</literal>, potom
|
|
zmeňte <envar>LC_COLLATE</envar> príkazom
|
|
<screen>
|
|
bash$ export LC_COLLATE=sk
|
|
|
|
tcsh$ setenv LC_COLLATE sk
|
|
</screen></para>
|
|
|
|
<para>Skúste to so <command>sort</command> znovu a porovnajte výsledok...</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><envar>LC_CTYPE</envar> --- 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 <envar>LC_ALL</envar> alebo <envar>LANG</envar>
|
|
(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ú.</para>
|
|
|
|
<warning>
|
|
<simpara>Vždy si buďte stopercentne istí, že máte túto premennú nastavenú (buď cez
|
|
<envar>LC_ALL</envar>, <envar>LANG</envar> alebo priamo), lebo inak nemá zmysel
|
|
čítať ďalej! Ono <quote>klasifikácia a prevod znakov</quote> neznie nejako lákavo,
|
|
ale vedzte, že je to sakramentsky dôležité pre život slovenských písmeniek vo vašom
|
|
Linuxe!</simpara>
|
|
</warning>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><simplelist type="inline"><member><envar>LC_MONETARY</envar></member>
|
|
<member><envar>LC_NUMERIC</envar></member></simplelist> --- 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ď.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><envar>LC_TIME</envar> --- 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,
|
|
...</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><envar>LC_MESSAGES</envar> --- 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.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
|
|
<para>S prekladom hlásení programov, hlavne s umiestnením súborov s preloženými reťazcami,
|
|
súvisí premenná <envar>NLSPATH</envar>. Mala by obsahovať dvojbodkami oddelený zoznam
|
|
adresárov, v ktorých sa budú hľadať <filename>.mo</filename> súbory pre miestne nastavenia
|
|
dané premennou <envar>LC_MESSAGES</envar>. Premennú <envar>NLSPATH</envar> 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.</para>
|
|
|
|
<para>Okrem týchto premenných bolo implementovaných niekoľko ďalších, ktoré zatiaľ nie sú
|
|
zdokumentované (<citetitle>The GNU C Library Reference Manual</citetitle>). Ich význam je
|
|
zrejmý z názvu, takže uvediem aj svoju dedukciu.</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara><envar>LC_PAPER</envar> --- Formát papiera. V našich zemepisných šírkach sa
|
|
napríklad používa formát <acronym>A4</acronym>, v Amerike je to
|
|
Letter, atď. Pozor, táto premenná neobsahuje priamo názov formátu, ale (tak, ako všetky
|
|
<envar>LC_</envar> premenné), skratku miestneho nastavenia, teda u nás to bude
|
|
<constant>sk</constant>. 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 <constant>us</constant>. V tomto prípade je nutné nainštalovať balík s
|
|
miestnymi nastaveniami pre túto krajinu (<application>locales-us</application>).
|
|
</simpara>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<simpara><envar>LC_NAME</envar> --- 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...</simpara>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<simpara><envar>LC_ADDRESS</envar> --- Spôsob zápisu adresy. Poradie ulice a popisného
|
|
čísla domu, ZIP kód, PSČ apod.</simpara>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<simpara><envar>LC_TELEPHONE</envar> --- Formát telefónnych a faxových čísel. Určuje
|
|
zoskupovanie číslic, ich oddelovanie, počet čísel predvoľby, ...</simpara>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<simpara><envar>LC_MEASUREMENT</envar> --- Miery. Jednotky hmotnosti, objemu, teploty a
|
|
dĺžky, používané v tej ktorej krajine. Program napísaný v <acronym>USA</acronym> bude
|
|
pravdepodobne počítať s galónmi vody, ale ak je správne napísaný, s premennou
|
|
<envar>LC_MEASUREMENT</envar> nastavenou na <quote>sk</quote> bude zobrazovať litre v
|
|
správnom pomere. To isté platí napríklad pre prevod teploty vo Fahrenheitovej stupnici
|
|
na stupne Celsia.</simpara>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<simpara><envar>LC_IDENTIFICATION</envar> --- Az apád, tak toto neviem. Rodné číslo?
|
|
Číslo sociálneho poistenia? Číslo topánok?</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</section>
|
|
|
|
<section>
|
|
<title>Ďalšie premenné</title>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara><envar>LC_ALL</envar> --- 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.</simpara>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<simpara><envar>LANG</envar> --- Hodnota tejto premennej sa použije pre tie skupiny
|
|
locales, ktoré nemajú príslušnú premennú nastavenú.</simpara>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<simpara><envar>LANGUAGE</envar> --- 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 <envar>LANGUAGE</envar>. 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 <envar>LANGUAGE</envar>. 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é
|
|
<computeroutput>LANGUAGE="sk:cz"</computeroutput> a Szolvák z Komárom zase
|
|
<computeroutput>LANGUAGE="hu:sk"</computeroutput>.</simpara>
|
|
|
|
<caution>
|
|
<simpara>Premenná <envar>LANGUAGE</envar> ovplyvňuje len premennú
|
|
<envar>LC_MESSAGES</envar>! Pre správnu funkciu je nutné nastaviť aj ostatné premenné
|
|
(minimálne <envar>LC_CTYPE</envar>).</simpara>
|
|
</caution>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><envar>LINGUAS</envar> --- Táto premenná nemá špeciálny význam z hľadiska
|
|
<acronym>GNU</acronym> 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:
|
|
<screen>
|
|
bash$ export LINGUAS="sk cz"
|
|
bash$ ./configure
|
|
bash$ make install
|
|
</screen></para>
|
|
|
|
<simpara>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 <envar>LANG</envar> a
|
|
<envar>LC_ALL</envar>, tieto ale môžu obsahovať len jeden kód miestnych
|
|
nastavení.</simpara>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><envar>RPM_INSTALL_LANG</envar> --- Č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 <acronym>RPM4</acronym> možné určiť jazyk, ktorého
|
|
preložené hlášky sa budú inštalovať. Preto odporúčam do súboru
|
|
<filename>.bash_profile</filename> (<filename>.login</filename>) užívateľa, ktorý
|
|
inštaluje balíky (root), vložiť nasledovný riadok:
|
|
<screen>
|
|
bash$ export RPM_INSTALL_LANG=sk
|
|
|
|
tcsh$ setenv RPM_INSTALL_LANG "sk"
|
|
</screen></para>
|
|
|
|
<simpara>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 <xref linkend="apps-rpm4" endterm="apps-rpm4.title">.</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</section>
|
|
|
|
<section>
|
|
<title>Priorita premenných</title>
|
|
|
|
<para>Miestne nastavenia sa určujú zo spomenutých premenných, pričom tieto sa vyhodnocujú v
|
|
tomto poradí:
|
|
<simplelist>
|
|
<member><envar>LANGUAGE</envar> --- ovplyvňuje len <envar>LC_MESSAGES</envar>
|
|
</member>
|
|
<member><envar>LC_ALL</envar></member>
|
|
<member><envar>LC_*</envar></member>
|
|
<member><envar>LANG</envar></member>
|
|
</simplelist></para>
|
|
|
|
<para>To znamená asi toľko, že keď raz nastavíte <envar>LC_ALL</envar>, jednotlivé
|
|
premenné <envar>LC_*</envar> sa už neberú do úvahy. Na druhej strane, ak máte
|
|
napríklad nastavené len niektoré z <envar>LC_*</envar>, ostatné sa nastavia na hodnotu
|
|
premennej <envar>LANG</envar>.</para>
|
|
</section>
|
|
|
|
<section>
|
|
<title>Kódy miestnych nastavení</title>
|
|
|
|
<para>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:
|
|
<synopsis>
|
|
jazyk[_územie[.kódovanie]][@modifikátor]
|
|
</synopsis></para>
|
|
|
|
<para><envar>jazyk</envar> je napr. <constant>sk</constant> pre slovenčinu,
|
|
<constant>cs</constant> pre češtinu, <constant>hu</constant> pre maďarčinu, územie je
|
|
<constant>SK</constant> pre Slovensko, <constant>CZ</constant> pre Českú republiku,
|
|
<constant>HU</constant> pre Maďarsko, kódovanie je <constant>ISO-8859-2</constant> 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
|
|
<constant>euro</constant> 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 <constant>iso-8859-15</constant>, ktoré
|
|
definuje znaky euro a cent.</para>
|
|
|
|
<para>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):
|
|
<table>
|
|
<title>Príklady kódov miestnych nastavení</title>
|
|
<tgroup cols="4" align="left" colsep="1" rowsep="1">
|
|
<tbody>
|
|
<row>
|
|
<entry>sk_SK.ISO-8859-2</entry>
|
|
<entry>sk_SK</entry>
|
|
<entry></entry>
|
|
<entry>sk</entry>
|
|
</row>
|
|
<row>
|
|
<entry>cs_CZ.ISO-8859-2</entry>
|
|
<entry>cs_CZ@-ch</entry>
|
|
<entry>cs@-ch</entry>
|
|
<entry>cs</entry>
|
|
</row>
|
|
<row>
|
|
<entry>en_GB.iso8859</entry>
|
|
<entry>en_GB</entry>
|
|
<entry>en@euro</entry>
|
|
<entry>en</entry>
|
|
</row>
|
|
<row>
|
|
<entry>ja_JP.ujis</entry>
|
|
<entry>ja_JP.EUC</entry>
|
|
<entry>ja_JP</entry>
|
|
<entry>ja</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table></para>
|
|
|
|
<para>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 <acronym>ISO</acronym> <acronym>C</acronym> a <acronym>POSIX</acronym>
|
|
odlišovať a potom to bude záležať na konfigurácii systému.
|
|
<simplelist>
|
|
<member><constant>C</constant> --- nastavenia podľa štandardu <acronym>ISO</acronym>
|
|
<acronym>C</acronym>.</member>
|
|
|
|
<member><constant>POSIX</constant> --- nastavenia podľa štandardu
|
|
<acronym>POSIX</acronym>. V súčasnosti je to alias pre nastavenia
|
|
<constant>C</constant>.</member>
|
|
</simplelist></para>
|
|
</section>
|
|
</section> <!-- locales-principles -->
|
|
|
|
<section id="locales-slovakia">
|
|
<title>Miestne nastavenia pre Slovensko</title>
|
|
|
|
<para>V prvom rade treba nainštalovať balík s podporou miestnych nastavení, ktorý má názov
|
|
<application>locales</application> a tiež balík s podporou priamo pre Slovensko ---
|
|
<application>locales-sk</application>. 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.</para>
|
|
|
|
<para>V druhom rade si musíte nainštalovať balíky s podporou miestnych nastavení a priamo
|
|
slovenčiny (sú to <application>locales</application> a <application>locales-sk</application>).
|
|
</para>
|
|
|
|
<para>V ďalšom kroku si nezabudnite nainštalovať balíky <application>locales</application> a
|
|
<application>locales-sk</application>. Takisto, pre každý jazyk, ktorý sa chystáte používať,
|
|
si nainštalujte balík s podporou miestnych nastavení.</para>
|
|
|
|
<para>V prípade problémov s miestnymi nastaveniami sa držte predchádzajúcich troch krokov.
|
|
</para>
|
|
|
|
<section>
|
|
<title>Súbory s miestnymi nastaveniami</title>
|
|
|
|
<para>Prejdime sa teraz trochu po našich adresároch. Prvý navštívime <filename
|
|
class="directory">/usr/share/locale/sk</filename>. 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 <constant>sk</constant>.
|
|
Okrem nich tu môže byť ešte súbor <filename>charset</filename>, ktorý obsahuje len jeden
|
|
riadok s reťazcom <computeroutput>iso-8859-2</computeroutput>. Ten hovorí, aké kódovanie
|
|
znakov sa má použiť pre dané miestne nastavenia.</para>
|
|
|
|
<para>Všetky súbory v tomto adresári sú binárne dáta a adresár <envar>LC_MESSAGES</envar>
|
|
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 <envar>LC_*</envar>.
|
|
</para>
|
|
|
|
<para>Presuňme sa do adresára <filename class="directory">/usr/share/i18n/</filename>. Tu, v
|
|
textovom súbore <filename>sk_SK</filename> v podadresári
|
|
<filename class="directory">locales/</filename> 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
|
|
<filename class="directory">/usr/share/locales/sk/</filename> príkazom, ktorý údaje v súbore
|
|
<filename>sk_SK</filename> skompiluje a uloží do súborov
|
|
<simplelist type="inline">
|
|
<member><envar>LC_COLLATE</envar></member>
|
|
<member><envar>LC_CTYPE</envar></member>
|
|
<member>...</member>
|
|
</simplelist>
|
|
<programlisting>
|
|
sh$ localedef -i sk_SK -f ISO-8859-2 sk_SK
|
|
</programlisting></para>
|
|
|
|
<para>V podadresári <filename class="directory">/usr/share/i18n/charmaps/</filename> sa
|
|
nachádzajú súbory s popismi jednotlivých kódovani znakov. Pre Slovensko je aktuálny
|
|
<filename>ISO-8859-2</filename> (čo je aj obsah spomínaneho súboru
|
|
<filename>charset</filename>).</para>
|
|
|
|
<para>V adresári <filename class="directory">/usr/share/locale/</filename> sa nachádza súbor
|
|
<filename>locale.alias</filename>, ktorý definuje tzv. <firstterm>aliasy</firstterm> pre
|
|
kódy miestnych nastavení. Pre správnu funkciu slovenských miestnych nastavení by mal
|
|
obsahovať tieto dva riadky:
|
|
<programlisting>
|
|
sk sk_SK.ISO-8859-2
|
|
slovak sk_SK.ISO-8859-2
|
|
</programlisting></para>
|
|
|
|
<para>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.</para>
|
|
|
|
<warning>
|
|
<simpara>Ale na aliasy typu <constant>slovak</constant> 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
|
|
<constant>slovak</constant> stane <constant>sl</constant>, čo je Slovinsko. Pozitívne je,
|
|
že pre slovenčinu môžete nastaviť premennú napríklad na hodnotu
|
|
<constant>skaderukaskadenoha</constant>.</simpara>
|
|
</warning>
|
|
</section>
|
|
|
|
<section>
|
|
<title>Konfigurácia miestnych nastavení</title>
|
|
|
|
<para>Nastavenia internacionalizácie sa (v <systemitem class="osname">RedHat</systemitem> a
|
|
<systemitem class="osname">Mandrake</systemitem>) nachádzajú v súbore
|
|
<filename>/etc/sysconfig/i18n</filename>. 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ť (<computeroutput>source /etc/sysconfig/i18n</computeroutput>) do inicializačných
|
|
skriptov. Exportovanie premenných (odovzdanie ostatným aplikáciám) má na starosti skript
|
|
<filename>/etc/profile.d/lang.sh</filename> (<application>bash</application>) alebo
|
|
<filename>/etc/profile.d/lang.csh</filename> (<application>tcsh</application>). Tento sa
|
|
vykoná pri každom štarte shellu, typicky je volaný z <filename>/etc/profile</filename>
|
|
(<application>bash</application>) alebo <filename>/etc/csh.cshrc</filename>
|
|
(<application>tcsh</application>).</para>
|
|
|
|
<para>Súbor <filename>/etc/sysconfig/i18n</filename> 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 <filename>.i18n</filename> 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 <filename>˜/.i18n</filename>, nastavenia zo súboru
|
|
<filename class="directory">/etc/sysconfig/i18n</filename> sa ignorujú.</para>
|
|
|
|
<para>Užívateľ si môže zmeniť nastavenia aj ručne, kedykoľvek sa mu zachce, nastavením
|
|
premenných prostredia
|
|
<simplelist type="inline">
|
|
<member><envar>LC_MESSAGES</envar></member>
|
|
<member><envar>LANG</envar></member>
|
|
<member>atď.</member>
|
|
</simplelist></para>
|
|
|
|
<para>Vypnúť nejaké nastavenie je možné príkazom
|
|
<screen>
|
|
sh$ unset LC_MESSAGES LANG
|
|
</screen></para>
|
|
|
|
<para>Tým sa zrušia nastavenia daných premenných (a použije sa štandardné locale
|
|
<constant>C</constant> alebo <constant>POSIX</constant>).</para>
|
|
|
|
<para>Ak máte napríklad nastavené premenné <computeroutput>LC_ALL=sk</computeroutput> a
|
|
<computeroutput>LC_MESSAGES=cz</computeroutput>, tak po príkaze <computeroutput>unset
|
|
LC_ALL</computeroutput> 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.</para>
|
|
|
|
<note>
|
|
<title>export/setenv</title>
|
|
|
|
<para>Neodpustím si malú poznámku k príkazu <command>export</command>. Je to vstavaná
|
|
funkcia všetkých shellov kompatibilných s klasickým <application>sh</application> (teda aj
|
|
<application>bash</application>). Pre shelly typu <application>tcsh</application> je
|
|
ekvivalentom príkaz <command>setenv</command>.</para>
|
|
|
|
<para>Je dôležité uvedomiť si, čo presne tento príkaz robí s premennými. V dokumentácii k
|
|
bashu sa hovorí, že <command>export</command> označí premennú, aby bola odovzdaná detským
|
|
(<foreignphrase>child</foreignphrase>) procesom v rámci prostredia
|
|
(<foreignphrase>environment</foreignphrase>). To znamená asi toľko, že keď spustíte napr.
|
|
iXy z materského procesu <systemitem class="resource">bash</systemitem>, ktorý pri štarte
|
|
exportoval premennú <computeroutput>LANG=sk</computeroutput>, všetky aplikácie v prostredí
|
|
<application>X Window System</application> 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 <application>xterme</application> zadať príkaz <computeroutput>unset
|
|
LANG</computeroutput> (<computeroutput>unsetenv LANG</computeroutput> pre
|
|
<application>tcsh</application>), čím pre všetky detské procesy
|
|
<application>xtermu</application> (presnejšie shellu, ktorý je v ňom spustený), zrušíte
|
|
nastavenie premennej <envar>LANG</envar>. Potom aplikácie spustené priamo z tohto xtermu
|
|
budú fungovať bez podpory slovenčiny. Trochu sa s tým pohrajte.</para>
|
|
</note>
|
|
</section>
|
|
|
|
<section>
|
|
<title>Nastavenie časovej zóny</title>
|
|
|
|
<para>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:
|
|
<screen>
|
|
bash$ export TZ="Europe/Bratislava"
|
|
|
|
tcsh$ setenv TZ "Europe/Bratislava"
|
|
</screen></para>
|
|
|
|
<para>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
|
|
<filename>.bash_profile</filename> (<filename>.login</filename> pre
|
|
<application>tcsh</application>) vložte vyššie uvedený riadok.</para>
|
|
</section>
|
|
</section> <!-- locales-slovakia -->
|
|
|
|
<section id="locales-examples">
|
|
<title>Príklady miestnych nastavení</title>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>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 <application>Gimpe</application>. Darujte mu
|
|
súbor <filename>.i18n</filename> s nasledovným obsahom (aj na takéto malé oné potrebuje
|
|
<application>locales-sk</application>):
|
|
<screen>
|
|
LC_CTYPE=sk
|
|
</screen></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>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 <application>locales-cs</application>):
|
|
<screen>
|
|
LANGUAGE=sk:cs
|
|
LANG=sk
|
|
</screen></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>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
|
|
<application>locales-{sk,hu,cs}</application> nepredstavuje bezpečnostné riziko:
|
|
<screen>
|
|
LANGUAGE=hu:sk:cs
|
|
LC_COLLATE=sk
|
|
LC_TIME=cs
|
|
LANG=hu
|
|
LINGUAS="hu cs sk"
|
|
</screen></para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</section> <!-- locales-examples -->
|
|
</section> <!-- locales -->
|
|
|