Nazvy locales u glibc (nejen ceskych)

Petr Kolar PETR.KOLAR na vslib.cz
Středa Září 23 10:03:10 CEST 1998


                 Dobry den

   Tento dlouhy prispevek mel byt puvodne dotazem, pak navodem k peknemu 
reseni, a ted je necim jako doporucenim a nametem k diskuzi.

   Rozhodne nechci, aby se v tomto threadu debatovalo o tom, jestli ma byt
ISO 639 kod ceskeho jazyka cz misto stavajiciho cs - komu se to nelibi, 
necht zada napravu primo u ISO. ;-) Take nema slouzit tem, kterym dosud 
nechodi klavesnice pod X - at si prectou http://www.penguin.cz/czech-howto/ 
a pri pretrvavajicich problemech at poslou dotaz s jinym Subjectem. Prosim
take, pokud bude chtit nekdo odepisovat, aby tak ucinil radeji az po 
precteni cele teto zpravy.

   Jedna se o to, ze pri diskuzich jestli cs, cz, cs_CZ nebo neco jineho
byl zcela opomenut fakt, ze napriklad v Red Hat 5.1 jsou locales ke glibc 
v adresarich, jejichz jmena jsou tvaru cs_CZ (fr_FR, fr_BE, apod.), zatimco 
katalogy zprav k jednotlivym programum vetsinou v cs (fr, de; kdyz opominu, 
ze nektere programy pouzivaji pro cestinu zcela spatne cz). Neni to problem 
pouze cestiny, ale v podstate vsech jazyku. A take to neni problem pouze 
Red Hatu, ale obecne systemu s knihovnou glibc. Nicmene pro rozchozeni 
locales zrovna na Red Hatu 5.1 byly nutne opravy na prilis mnoha mistech...

   Je jasne, ze nekterymi jazyky se mluvi ve vice zemich, takze zatimco 
trideni znaku ve francouzstine bude (snad) stejne pro francouzskou, 
belgickou, svycarskou, kanadskou, atd. francouzstinu, tak treba nazev
penez, pocet desetinnych mist v peneznich udajich (italske liry!) bude 
jiny. Ale porad je otazka, jak nastavit prislusne promenne prostredi, aby 
vse fungovalo, i kdyz locales jsou rozdeleny treba na cs a cs_CZ.

   Zakladem resni je fakt, ze ___knihovna___glibc___ si hodnotu zadanou
v nektere z promennych prostredi (v tomto poradi priority):

1. LC_ALL
2. LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME
3. LANG

pri vyvolani funkce setlocale(LC_ALL, ""), kterou obsahuje kazdy lokalizace 
schopny program, ___oreze___ podle potreby z tvaru cs_CZ.ISO8859-2 (nebo 
treba cs_CZ.iso_8859-2 - za teckou na velikosti pisma, podtrzitkach a 
pomlckach nezalezi) na cs_CZ, a pokud potrebne nenajde tam, tak az na cs. 
Pokud se naopak nastavi promenne na cs, tak se z toho bez pridaneho aliasu 
do /usr/share/locale/locale.alias tvar cs_CZ nedostane.

   Je potreba, aby fungovaly i programy pro X Window System. Zde cast
knihovny libX11, kterou budu nazyvat Xlocale, nemilosrdne zkontroluje
jak je nastavena kategorie LC_CTYPE (samozrejme nastaveni z promenne 
prostredi LC_ALL ma i zde prednost a neni-li nastaveno ani LC_ALL ani 
LC_CTYPE, uplatni se LANG) a az prilis casto zjisti, ze spatne, a pak jsou
z toho dopisy "Nefunguje mi klavesnice v X". Xlocalum se bude libit tvar 
cs_CZ.ISO8859-2, ktery ale, jak jiste uznate, je na zadavani prilis dlouhy. 

   V dobe, kdy jsem si myslel, ze tento text je navodem k peknemu reseni, 
bylo tim peknym resenim: "Nastavte vybranou promennou prostredi na czech;
ne na cs nebo cs_CZ, ale na czech!". Diky tomu, ze czech je ve standardnim
glibc-ovem /usr/share/locale/locale.alias definovano jako alias pro
cs_CZ.ISO8858-2, vypadalo, ze pri LANG=czech bude vse (samozrejme
krome spatne napsanych programu, po nekolikrat omlete zaplate souboru
/usr/X11R6/lib/X11/locale/iso8859-2/XLC_LOCALE, a v Redhatu 5.1 po 
premisteni katalogu zprav z /usr/share/locale/cz/LC_MESSAGES do 
/usr/share/locale/cs/LC_MESSAGES) chodit bez jakychkoli dalsich zasahu
do konfiguracnich souboru. Ale bohuzel, nez se toto nastaveni dostane
k Xlocale, zbyde z nej pouze cs_CZ, a pro cs_CZ chybi alias v souboru 
/usr/X11R6/lib/X11/locale/locale.alias. Nicmene po doplneni radku

cs_CZ                   cs_CZ.ISO8859-2

(velka mezera je tvorena tabelatory) do tohoto souboru uz vse skutecne 
chodi.

   Ted je otazkou, komu a cemu verit, ze ma zalezitosti okolo locales dobre 
(respektive nejmene spatne): glibc, X nebo Redhatum? Myslim, ze je rozumne
verit glibc, takze neupravovat nic v /usr/share/locale (krome uz zmineneho
spatneho cz, ale to je problem RedHatu) a nastavovat promenne prostredi 
ovlivnujici nastaveni locale opravdu na hodnotu czech.

   Katalogy s ceskymi hlasenimi programu ovsem nebudou v adresari
/usr/share/locale/czech/LC_MESSAGES nebo
/usr/share/locale/cs_CZ/LC_MESSAGES, ale v 
/usr/share/locale/cs/LC_MESSAGES. Diky aliasu czech->cs_CZ.ISO8859-2
se katalogy budou hledat nejdrive v /usr/share/locale/cs_CZ/LC_MESSAGES
(mozna jeste predtim v /usr/share/locale/cs_CZ.ISO8859-2/LC_MESSAGES),
a pri neuspechu v /usr/share/locale/cs/LC_MESSAGES. Kdyby nekdo psal treba 
ucetni program pro francouzsky mluvici belgicany, a byly by v nem vety plne 
Bruselu a belgickych franku, at da jeho katalog do fr_BE a ne do fr, ale
pro cestinu by se pro katalogy mel pouzivat adresar cs a ne cs_CZ.

   Co vy na to?

------------------- Tato cast je pouze pro Red Hat 5.1: ------------------

   V Red Hatu 5.1 je potreba krome opravy 
/usr/X11R6/lib/X11/locale/locale.alias a
/usr/X11R6/lib/X11/locale/iso8859-2/XLC_LOCALE premistit katalogy z cz do 
cs:

cd /usr/share/locale   
mv cz/LC_MESSAGES/* cs/LC_MESSAGES

a vyrobit tam link, kdyby nejaky dalsi vsetecny balik zase neco strkal do 
/usr/share/locale/cz:

ln -s cs cz

Nastaveni

export LANG=czech

se v Red hatu 5.1 alepon pro bash zajisti zmenou radky LANG=cz 
v souboru /etc/sysconfig/i18n na LANG=czech.

   Ti, kterym se nelibi ceske nazvy mesicu v datumech, si misto export 
LANG=czech nastavi

export LC_CTYPE czech
export LC_COLLATE czech

a budou mit cesky pouze trideni a klasifikaci znaku (to bohuzel
v /etc/sysconfig/i18n nastavit nelze - viz hloupy /etc/profile.d/lang.sh;
stejne jako nic z toho nebude chodit v tcsh - viz chybejici 
/etc/profile.d/lang.csh).

--------------------------------------------------------------------------

   Jak to ma byt u systemu libc bohuzel nevim.
   
                                                        S pozdravem
--
                          ***  Petr Kolar  ***
 Department of Information Technologies, Technical University of Liberec
             Voronezska 1329, 461 17 Liberec, Czech Republic
             Phone: +420-48-535-2371   Fax: +420-48-535-2229
  E-mail: Petr.Kolar na vslib.cz  http://asterix.vslib.cz/staff/kolar.html


Další informace o konferenci Linux