glibc
Obsah
Lokalizace GNU C Library (glibc).
Návrh na aktualizaci českého locale v glibc aneb pokus o shrnutí diskuse
Aktuální verzi patche a postup jeho aplikace lze najít na stránce Glibc-patch.
Návrhy na testování jsou na stránce Glibc-testcasy.
Přehled relevantních bugů roste na Glibc-bugy.
Návrhy k diskusi
aktuální téma:
UTF-8 jako default
Aktuální stav:
- V souboru /usr/share/i18n/SUPPORTED je jako výchozí kódování ISO-8859-2 a UTF-8 jako alternativa.
- V souboru /usr/share/locale/locale.alias je nadefinován alias czech jako cs_CZ.ISO-8859-2.
Změna:
- Uvádět jako výchozí UTF-8, ISO-8859-2 jako alternativní.
- Změnit alias
czech cs_CZ.UTF-8
Odůvodnění: Jestliže UTF-8 je defaultní kódování na konzoli, pak například “LANG=cs_CZ date” (v distribucích neměnících tento default) nevypíše správně znaky s diakritikou, což je nekonzistentní - default pro locale se liší od defaultu pro zobrazení.
Pro:
- Karel Volný
Proti:
- Petr Písař
- - může to rozbít skripty počítající natvrdo s tím, že default pro české locale je ISO-8859-2
nevyřešená témata:
LC_NUMERIC
thousands_sep
Aktuální stav: Nedělitelná mezera
Změna: Nedělitelná zúžená mezera (U+202F)
Odůvodnění: V každém případě by mělo jít o nedělitelnou mezeru, rozdělovat čísla není v češtině přípustné - přípustné je sázet bez mezer, ale ne rozdělit. Číslo by mělo jasně stát pohromadě, proto navíc mezera zúžená - pokud ji výstupní zařízení neumí, renderuje se jako normální šířka, takže z hlediska terminálu žádná změna.
Pro:
- Karel Volný
- Petr Písař
LC_TIME
d_t_fmt
Aktuální stav:
%a
Změna: %a
Odůvodnění: viz
Pro:
- Petr Písař
Proti:
- Karel Volný
- - dvojtečka v oddělení hodin a minut je historicky zažitá (viz nádražní hodiny …); tečka může být v časových údajích zaměněna s čárkou oddělující setiny sekund
- Miroslav Kuře
- - ČSN 01 6910 zmiňuje pouze variantu s dvojtečkou
Alternativa: Petr Kovář navrhuje čárku za názvem dne.
d_fmt
Aktuální stav: %-d.%-m.%Y
Změna: nedělitelné zúžené mezery (U+202F) po tečkách
Odůvodnění: Po tečce má být vždy mezera; zúžená zachovává celistvost data.
Pro:
- Karel Volný
- Petr Písař
Proti:
- Petr Kovář
- - Krátké datum je krátké právě proto, aby bylo krátké. Čili rozšíření o další znaky situaci jen dále komplikuje.
date_fmt
Aktuální stav: %a %b %e %H:%M:%S %Z %Y (příklad: Út zář 8 10:28:00 CEST 2009)
Změna: %a
Odůvodnění: Původní formát je pouhou kopií amerického. V češtině se ale pro datum používá výhradně pořadí seřazené podle délky úseků, buď vzestupně (den. měsíc rok) nebo sestupně (rok-měsíc-den).
Pro:
- Karel Volný
LC_MONETARY
mon_thousands_sep
Aktuální stav: nedělitelná mezera
Změna: tečka
Odůvodnění: Peněžní částky se zapisují bez mezer, aby nebylo možno vepisovat číslice. Místo mezery je možno použít tečku, viz ÚJČ nebo ČSN 01 6910.
Pro:
- Karel Volný
- + (proti argumentu Petra Kováře) glibc locales negenerují “běžný text” (český tisk), ale strojový výstup, což mohou být typicky právě různé výplně formulářů včetně platebních …
Proti:
- Petr Písař
- - Měla by tam být zúžená nezlomitelná mezera, doba psacích strojů je dávno pryč.
- Petr Kovář
- - Řekl bych, že v běžném textu se vyskytuje spíše varianta bez teček (zkuste nahlédnout třeba do českého tisku, do korpusu apod.). Takže opět, jsem proti tomu, abychom s tímto hýbali. Je to zbytečné.
- Vít Pelčák
p_sep_by_space a n_sep_by_space
Aktuální stav: 1
Změna: 0 a přidat nedělitelnou zúženou mezeru (U+202F) před Kč v currency_symbol
Odůvodnění: Čeština požaduje, aby jednotka stála zároveň s číslem, ke kterému se váže; bohužel automaticky vložená mezera je dělitelná. Zúžená mezera zdůrazňuje, že to stojí pohromadě - pokud ji výstupní zařízení neumí, renderuje se jako normální šířka, takže z hlediska terminálu žádná změna.
Pro:
- Karel Volný
- Vít Pelčák
?:
- Petr Písař
- “Jestli to zařídí nezlomitelnou zúženou mezeru mezi hodnotou a měnou a zároveň dokáže zarovnávat kolem na číslici jednotek, tak bych byl spokojený.”
duo_currency_symbol, duo_p_sep_by_space, duo_n_sep_by_space, monetary-thousands-sep-wc
Aktuální stav:
duo_currency_symbol="Kč"
duo_p_sep_by_space=1
duo_n_sep_by_space=1
monetary-thousands-sep-wc=160
Změna:
duo_currency_symbol="
Poznámka: Tato nastavení se zdají býti generována v souladu s nastaveními výše uvedenými, je třeba jen zkontrolovat výsledek, aby byl konsistentní. Z toho důvodu rovněž nemá smysl o tomto rozhodovat samostatně.
LC_ADDRESS
postal_fmt
Aktuální stav: %f%N%a%N%d%N%b%N%s %h %e %r%N%z %T%N%c%N
Návrhy na změnu:
- %f%N%d%N%b%N%s
%h %r%N%z %T%N%Rc%N
- Odůvodnění: %a (“C/O”) se v ČR nepoužívá, %e (číslo podlaží) a %r (číslo dveří) jen vyjímečně. Vzhledem k nemožnosti podmíněného zápisu by jejich přítomnost mohla být zaměněna s jinými čísly. NIcméně %r, které je v našich podmínkách možno chápat jako číslo bytu, by mělo být uvedeno dle vyhlášky 28/2001 Sb. (Uvádí se s lomítkem, ale při nevyplněném %r by lomítko zůstalo na ocet, takže raději bez.) Za PSČ by měla být široká mezera (dvě mezery ve fontu s pevnou šířkou). Stát by měl být verzálkami, proto prefix R. (Alternativně lze přepsat hodnotu country_name=”Česká republika” do verzálek.)
- Pro: - Karel Volný
- Proti: - Petr Písař - - %r by mohlo být číslo bytu nebo dveří. Někde se používá číslo_popisné/číslo_bytu.
- %f%N%d%N%b%N%s %h %r%N%z %T%N%Rc%N
- Odůvodnění: Jako výše, ale bez použití Unicode.
- Pro: - Petr Kovář - + ČSN 01 6910 mluví o dvou mezerách. Což odpovídá praktické potřebě běžného uživatele. Nikdo se nechce trápit s U+2003.
LC_TELEPHONE
tel_dom_fmt
Aktuální stav: (0%a) %l
Návrhy na změnu:
- %a %l
- Odůvodnění: Meziměstská nula vypadla (resp. byla přesunuta jako součást mezinárodní předvolby) a předvolby se již nepoužívají (vzhledem k přenositelnosti čísla nemají význam).
- Pro: - Karel Volný
- +%c %a %l
- Odůvodnění: ČSN 01 6910 odkazuje na Zlaté stránky, čili +420 123 456 789. (Pozn. mezery do %l nelze vložit.)
- Pro: - Petr Písař
- Proti: - Karel Volný - - vnitrorepublikově není třeba užívat mezinárodní předvolbu, nevidím smysl duplikovat tel_int_fmt
Přijaté návrhy
Konverze z ISO-8859-2 na UTF-8
Aktuální stav: Soubor /usr/share/i18n/locales/cs_CZ je v kódování ISO-8859-2 a české locales se generují z tohoto kódování (localedef -i cs_CZ@-ch -f “ISO-8859-2” …)
Změna: Konverze na UTF-8.
Odůvodnění: Většina velkých distribucí již delší dobu používá jako default UTF-8, ve kterém jsou i definiční soubory mnoha jiných jazyků. UTF-8 umožňuje lépe zachytit místní specifika.
Pro:
- Karel Volný
- + do budoucna lépe podporováno - když si to nyní otevřu na konzoli (která je by default UTF-8), vidím tečky místo znaků s diakritikou + narozdíl od ISO-8859-2 obsahuje Unicode (i v UTF-8) všechny znaky používané v češtině
- Petr Písař
- - … ale rozbíjí to zpětnou kompatibilitu
Diskuse: Konverze z ISO-8859-2 na UTF-8
Pozdržené návrhy
LC_MONETARY
negative_sign
Aktuální stav: “-“ (U+002D)
Změna: znaménko mínus (U+2212)
Odůvodnění: Původní ASCII “mínus” je dnes většinou zobrazováno jako spojovník, jeho reprezentace není protipólem znaménka plus. Lepší je použít jasně definovaný matematický symbol.
Pro:
- Karel Volný
- Petr Písař
- Vít Pelčák
Důvod pozdržení: glibc neumí rozpoznat jiné než hyphen-minus (aka ASCII mínus), viz (Fedora/Glibc) Bug 524223 - incomplete/wrong LC_NUMERIC handling
Zamítnuté návrhy
další
- Co na to textová konzola? Zobrazuje se vše podle očekávání?
- Když se zavedou ty nezlomitelné a zmenšené mezery, počítají s nimi i nástroje, které oddělují pole pomocí whitespace?
- glibc, zdá se, neumí měsíce ve druhém pádě
- otázkou je, co to udělá se vstupem programů?
- programy, které používají lokalizovaný vstup: - (ví někdo o něčem?)
- je třeba dořešit, co je zač duo_* u LC_MONETARY
- Z materiálu Specifications for handling of the Euro chápu, že se nás to bude týkat, až vyměníme koruny za eura. Existují proměnné duo_valid_from, uno_valid_to a conversion_rate. Glibc zatím údaj proměnné duo_* kopíruje z jejich uno protějšků, pokud nejsou zadefinovány ručně (locale/programs/ld-monetary-c:299) a označuje je za non-POSIX.2 extensions.
- glibc (asi?) neumí fomátovat samotné %l (“místní” část telefonního čísla; v současnosti převládá formát po trojicích číslic)
- k čemu je soubor cs_CZ.in a nebude potřeba jej též zkonvertovat?