Jak na české formátování čísel ve WordPressu

Rubrika: WordPress

WordPress je výborný publikační systém, a to nemám na mysli jen systém samotný, ale i češtinu, která je pro WordPress k dispozici. Bohužel zde máme jednu maličkost, která k dokonalosti chybí. A tou je formátování čísel, které i při použití češtiny odpovídá anglickým konvencím, tedy desetinná místa odděluje tečka a tisíce odděluje čárka. V češtině to ale má být jinak, desetinným oddělovačem má být čárka, kdežto oddělovačem tisíců má být mezera. (pro hnidopichy, moc dobře vím, že oddělovačem tisíců by neměla být normální, ale tenká mezera, to se ovšem na webu realizuje ještě hůře než normální mezera)

Ono se to snadno napíše, krásná teorie, pokud si ale myslíte, že jen tak vlezete do zdrojáků češtiny pro WordPress a položky si opravíte, okamžitě se vystavíte problému. Totiž webové stránky (stejně jako drtivá většina aplikací pracujících s textem) odstavce zalamují do jednotlivých řádků podle mezer. Což je v pořádku právě do té doby, než Vám mezery začnou oddělovat tisíce v číslech. Protože řádek uprostřed čísla zalomit nechcete. Číslo potřebujete držet pohromadě. Řešení se nazývá tvrdá mezera a tím se řítíme do největších hlubin trapné chyby, se kterou se musíme poprat. (doplnění informace o tenké mezeře z předchozího odstavce: tenká mezera reperezentovaná entitou   je totiž v HTML zlomitelná přes řádek, tak proto ji nemůžeme použít pro formátování čísel)

Ne, chyba se nenachází v češtině pro WordPress. Nenachází se ani ve WordPressu samotném. Je skryta ještě níže, přímo v samotném PHP. Totiž, WordPress naprosto správně pro formátování čísel používá nativní funkci PHP, která se jmenuje number_format(). Potíž je v tom, že tato funkce neumí pracovat s tvrdými mezerami, a to ani s řetězcem   ani s pevnou mezerou zapsanou jako ASCII znak o hodnotě 160. Pokud ji předhodíte, že má použít pro oddělení tisíců tvrdou mezeru, ve výsledku místo ní dostanete čtvereček. To je naprosto nepoužitelné.

A naprosto trapné na celé situaci je, že problém s touto funkcí je reportovaný do PHP již mnoho let (viz velmi dlouhý log u popisu této funkce), netrápí jenom Čechy, ale i mnohé početnější národy používající stejné formátování, jmenujem třeba Francii nebo Rusko. A nikdo s tím nic nedělá.

Rozhodl jsem se, že se se situací nesmířím. Na svém webu chci mít čísla naformátovaná správně česky. Asi bych uměl najít zmíněnou funkci ve zdrojácích PHP a zkompilovat si vlastní modifikaci, bohužel PHP u svého web-hostera nevyměním, takže situaci musím vyřešit o úroveň výše, ve WordPressu. Nejedná se však o situaci, kterou by šlo vyřešit plug-inem, ale musel jsem sáhnout napřímo do střev samotného WordPressu. To ve výsledku znamená, že s každým upgradem WordPressu, byť tím nejmenším, to musím udělat znova.

Vlevo u seznamu souborů ke stažení vidíte, že to vše funguje správně. Velikost souborů má desetinnou část oddělenou čárkou a u počtu stažení je vždy oddělovačem tisíců nedělitelná mezera, takže se nestane, že by se číslo rozdělilo na více řádků. Tak to má být.

Pokud chcete, aby i na Vašem webu byla čísla správně česky naformátována, můžete si stáhnout následující archiv. V něm najdete tři soubory, které nahrajte (do příslušných adresářů) Vaší instalace WordPressu přes ty původní. Pozor: soubory v tomto archivu jsou v této chvíli pro WordPress verze 2.9.2 a pokud máte jinou verzi WordPressu, tak to nedělejte, WordPress by mohl přestat fungovat. Modifikace je určena jen pro verzi 2.9.2, pro žádnou jinou.

Dobrá zpráva na závěr: tento problém jsem již před časem nahlásil vývojovému týmu WordPressu a lze předpokládat, že nějakým způsobem se s ní popasují a v budoucnu bude možné, aby oficiální čeština měla korektní formátování čísel tak, jak má být. Zatím se řeší, jakým způsobem toto zařídit, jestli tak, jak jsem to udělal já, nebo nějakým filtrem, ale to je méně podstatné; nyní je milestone nastavený na verzi 3.0, tzn. vývojový tým by to chtěl mít v této verzi již vyřešené (ale na druhé straně si můžete v logu všimnout, že už se oprava plánovala pro verzi 2.9 a pak se to zrušilo). Tak držme palce, že řešení popsané a nabídnuté ke stažení v tomto článku je pouze dočasným workaroundem.

Naučíme děti psát špatně česky nebo špatně polsky?

Rubrika: Jen tak

Když mi bylo 6 let, rodiče mi kupovali Mateřídoušku. Malý Honzík si v tomto dětském časopise vybarvoval, plnil jednoduché úkoly, počítal do desíti a na jednoduchých slovech se učil číst a psát. Šťastné dětství.

Dnes je časopisů pro tuto věkovou kategorii spousta. Jdete do trafiky a můžete vybírat. Případně se Vám některé dostanou domů, aniž byste je sami koupili. Přijdou příbuzní nebo známí a přinesou malý dárek dětem. A Vy jako rodiče jste neskonale šťastní, že se tentokrát nejedná o bonbóny nebo jiné sladkosti.

A tak se k nám domů dostal časopis 6-letý, číslo #38. Dle editorialu časopis pro děti, které se učí číst, psát a počítat. No, já si teda nepředstavuji, že moje dítě bude psát tak, jak redaktoři tohoto časopisu. Fail.

image0

VMware beta versus čeština resp. angličtina

Rubrika: Počítače

Byl jsem přizván k testování beta příštího VMware Workstation. Bohužel se jedná o privátní betu a nemohu zatím sdělovat nic ohledně nových vlastností apod. Možná Vás teď napadá, proč o tom teda píšu, když nesmím psát o ničem konkrétním, jestli se chci jenom chlubit. Ne, kupodivu tomu tak není ;-).

Setkal jsem se s problémem, který může potkat spoustu potenciální českých testerů a chci napsat, jak problém vyřešit (třeba tento článek vygooglí dříve než najdou řešení ve fórech na webu výrobce). Chyba se totiž vyskytuje na ne–anglických Windows (typicky u nás českých), případně i na všech anglických, na kterých je nainstalován jazykový balíček (Vista Ultimate s češtinou, resp. Windows 7 RC s češtinou). Pokud česká Windows máte (a to má u nás většina uživatelů), pak když instalačku bety spustíte, nic se nestane. Tedy pokud se podíváte do Správce úloh, tak tam uvidíte, že instalace běží — ovšem po třinácti hodinách přestanete věřit, že se skutečně něco instaluje.

Ano, setup obsahuje chybu, která způsobí popsané chování na libovolných ne–anglických Windows. Chyba je samozřejmě již dávno nahlášena a předpokládám, že bude i opravena, pokud ale nechcete čekat na další verzi, spusťte instalaci VMware Workstation z příkazové řádky takto:

VMware-workstation-e.x.p-169612.exe -L English

Takto instalace proběhne tak jak má (i na českých Windows) a můžeme se směle vrhnout do objevování nových fíčurek… Pssst! Nic jsem neřek’.

vmware-workstation-exp-169612