Nazvy locales u glibc (nejen ceskych) - dlouhe

Vladimir Michl michlv na risc.upol.cz
Čtvrtek Říjen 1 16:01:42 CEST 1998


Tuto odpoved pisu po ruznych utrapach (prvak vytahl terminator, a telnet 
to neprezil, byl jsem vyhozen od pocitace) po treti, tak doufam ze to 
konecne dopisu.

On Wed, 23 Sep 1998, Petr Kolar wrote:

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

 Zde bych to trochu opravil. Nejprve se glibc podiva, zda je 
oznaceni locales v aliasech, je-li nahradi se, neni-li bere se puvodni.
Budu prodpokladat ze jsme ziskali cs_CZ.ISO-8859-2. Katalogy 
nebo locales se tedy budou hledat adresarich:
/usr/share/locale/cs_CZ.ISO-8859-2 - puvodni tvar
/usr/share/locale/cs_CZ.iso88592 - normalizace zapisu kodovani
/usr/share/locale/cs_CZ
/usr/share/locale/cs.ISO-8859-2
/usr/share/locale/cs.iso88592
/usr/share/locale/cs

Toto chovani jsem vypozoroval ze zdrojaku a pomoci strace.

>    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

 Proc kdyz z aliasu ziskam cs_CZ.ISO8859-2, kde se to oreze?
Mam takovy dojem ze Xlocale ziskava oznaceni locales jako glibc, tj.
z prom prostredi, dale hleda aliasy a pak adresare. Dnes mam v planu se 
na to podivat hlobeji.

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

 Pokud bude vse fungovat spravne tak by melo byt zcela jedno, zda 
nastavim czech nebo cs, alespon pro glibc. Ovsem otazkou je, zda chci 
upravovat locale.alias. Ale nemel by byt takovy problem udelat v nem 
zmeny a poslat vyvojarum glibc.

>    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

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

Toto je docela rozumne, cestina je pouze jedna, takze proc katalogy 
umistovat v adresari cs_CZ. Ma to ale jednu vadu, pokud by ruzni uzivatele
pouzivali ruzne nastaveni konzole a to jedni ISO 8859-2 a druzi treba 
UNICODE, pak by bylo treba mit katalogy v cs.iso88592 a cs.unicode a 
locales v cs_CZ.iso88592. Pro zapis kodovani by se mel pouzivat 
normalizovany tvar, ktery glibc vytvari. Napriklad si zkuste nasledujici:

	localedef -i cs_CZ -f ISO-8859-2 cs_CZ.ISO-8859-2

aniz by jste meli v /usr/share/locale jakykoliv adresar cs*. Adresar se 
vytvori sam s nazvem cs_CZ.iso88592.

Pokud nebudeme uvazovat to, ze by ruzni uzivatele mohli pouzivat pro
stejny jazyk vice kodovani (tj. bylo by spravcem serveru narizeno jedno),
pak je navrzene reseni dobre (tj. katalogy v cs, definice locales v
cs_CZ). I kdyz mi trochu vadi nemoznost (alespon teoreticka) pouzivat 
zaroven iso88592 a UNICODE. 

Ted jeste jak nastavit LC_ALL (nebo podobne). Nastaveni na czech ma 
jeden neprijemny dusledek na man a podobne aplikace a na hledani resources 
u X. Man bude ceske stranky hledat v adresari /usr/man/czech, misto v 
adresari /usr/man/cs nebo /usr/man/cs.iso88592. Taktez resources se budou 
hledat v adresarich ./czech/, /usr/lib/X11/czech/app-defaults misto
v ./cs/, /usr/lib/X11/cs/app-defaults/ nebo /cs.iso88592/, ...
Je to z toho duvodu, ze jedine misto, kde muze aplikace sehnat oznaceni 
locales je v promenych prostredi, a nikomu se nechce delat slozite 
hledani spravneho oznaceni (hledani adresaru, aliasu). Proste vezmou to co 
je v promenych prostredi, a pouziji to. Lepe by bylo, pokud by existovala 
funkce glibc, ktere by se dodal seznam adresaru, a ona by vratila seznam
existujicich adresaru pro dotycny jazyk (napr: /usr/man -> /usr/man/cs,
/usr/man/cs.iso88592).

Proto navrhuji nasledujici 2 reseni:
1, pouze jedno kodovani:
   LC_ALL=cs
   upravit locale.alias
   katalogy v /usr/share/locale/cs
   locales v /usr/share/locale/cs_CZ
   ceske man stranky v /usr/man/cs - prevzato z LC_ALL
   ceske resources v /usr/lib/X11/cs/app-defaults - LC_ALL
   ...

2, vice kodovani:
   LC_ALL=cs.iso88592
   upravit locale.alias, glibc, X11
   katalogy v /usr/share/locale/cs.iso88592
   locales v /usr/share/locale/cs_CZ.iso88592
   ceske man stranky v /usr/man/cs.iso88592 - prevzato z LC_ALL
   ceske resources v /usr/lib/X11/cs.iso88592/app-defaults - LC_ALL

>    Jak to ma byt u systemu libc bohuzel nevim.

 Myslim ze by to melo fungovat stejne.

					Vlada Michl
**********************************************************************
*  Name:    Vladimir Michl           Student of Palacky University   *
*  E-mail:  Vladimir.Michl na upol.cz, MichlV na risc.upol.cz              *
*  Web:     http://www.upol.cz/~michlv                               *
*  Adress:  U skoly 292                                              *
*           Velky Tynec                                              *
*           783 72                                                   *
*           Czech Republic                                           *
**********************************************************************




Další informace o konferenci Linux