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:

  1. V souboru /usr/share/i18n/SUPPORTED je jako výchozí kódování ISO-8859-2 a UTF-8 jako alternativa.
  2. V souboru /usr/share/locale/locale.alias je nadefinován alias czech jako cs_CZ.ISO-8859-2.

Změna:

  1. Uvádět jako výchozí UTF-8, ISO-8859-2 jako alternativní.
  2. 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%-d.%B%Y,%H:%M:%S%Z

Změna: %a%-d.%B %Y, %-H.%-M:%-S%Z

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%e.%b%Y, %T %Z (příklad: Út 8. zář 2009, 10:28:00 CEST)

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="`Kč"` `duo_p_sep_by_space=0` `duo_n_sep_by_space=0` `monetary-thousands-sep-wc="."`

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?

Podstránky