České názvy měsíců a dnů v týdnu

Školení, která pořádám

Dopsal jsem knihu

Funkce date vrací vždy anglické názvy měsíců a dnů v týdnu. Funkce strftime je naproti tomu locale–aware, takže respektuje jazyk nastavený funkcí setlocale. Problém s funkcí setlocale je v tom, že podporované jazyky a kódování závisí na konfiguraci operačního systému, takže se na ni nedá spolehnout (na Windows např. není k dispozici čeština v kódování UTF-8). Preferuji tedy ruční překlad. Na vícejazyčném webu se dá použít běžná překladová funkce jako lang(date("F")), na jednojazyčném bych si vytvořil funkce jednoúčelové:

<?php
/** Vrácení českého názvu měsíce
* @param int 1-12
* @return string
* @copyright Jakub Vrána, http://php.vrana.cz/
*/
function cesky_mesic($mesic) {
    static $nazvy = array(1 => 'leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec');
    return $nazvy[$mesic];
}
echo cesky_mesic(date("n")) . "\n";

/** Vrácení českého názvu dne v týdnu
* @param int 0-6, 0 neděle
* @return string
* @copyright Jakub Vrána, http://php.vrana.cz/
*/
function cesky_den($den) {
    static $nazvy = array('neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota');
    return $nazvy[$den];
}
echo cesky_den(date("w")) . "\n";
?>
Jakub Vrána, Dobře míněné rady, 13.11.2009, diskuse: 17 (nové: 0)

Diskuse

ikona Jakub Vrána:

Případně http://www.latrine.cz/ verze:

ladem, úmor, řezen, dupem, kreten, červem, červec, srpem, žháří, říhnem, tysdopad, prsinec
# 10.11.2009 14:43:02 reagovat

já:

případně původnější http://www.den94ek.cz verze:

bleden, úmor, bředen, duden, kreten, čerten, čertenec, svrben, žháří, říhen, psychopat, kosinec
# 13.11.2009 01:35:43 reagovat

Tomas Petricek:

S tim puvodnim zdrojem to mozna bude jeste slozitejsi :-)...

Sněden úhoř.
Vezem buben.
Svět-ten čert-vem!
Na-věnec lupen.
Lháři, lži-jen!
Tys-dopad!
Blázinec.

(Christian Morgenstern, ze sbírky Beránek měsíc. Přel. Josef Hiršal)
# 13.11.2009 05:22:55 reagovat

kocour v botách:

Prudérní kalendář
http://hovnovbotach.wz.cz/index2.php?basen=4
# 15.11.2009 12:34:27 reagovat

crs:

Taky přispěju ;-) (vlastní výroba)
http://crs.bloguje.cz/721324-to-vrati-se-mi.php
# 15.11.2009 13:54:31 reagovat

fos4:

Proc jsou $nazvy static ? Ma to nejake opodstatneni nebo to je jen zvyk ?
# 13.11.2009 08:12:08 reagovat

R!:

Je to rychlejsi,
Tim ze je to static tak se pole vytvori jenom jednou a pri druhem volani funkce uz se pouzije to drive vytvorene. Proste neco jako jednoducha cache.
# 13.11.2009 08:55:38 reagovat

fos4:

Ale celou dobu běhu aplikace se udrzuje v pameti - takze je to zase pametove narocnejsi. A pokud se to vola jednou tak uplne zbytečné.
# 13.11.2009 09:08:17 reagovat

fos4:

zajimalo jestli v tom neni neco vice :-)
# 13.11.2009 09:08:53 reagovat

ikona Jakub Vrána:

Je to skutečně jenom forma cache. Obvykle upřednostňuji rychlost nad paměťovou náročností. Je pravda, že pokud se funkce zavolá jenom jednou, tak se to nijak pozitivně neprojeví, ale často se bude volat opakovaně (třeba pro každý termín vypsaných školení).
# 13.11.2009 10:24:39 reagovat

Marek Hrabě:

Také rád používám static. Znát je to hned, jakmile se pokusíte udělat například nějaký rekurzivní kód, kde se funkce zavolá třeba pětsetkrát...
# 13.11.2009 15:32:34 reagovat

HanziQ:

Dodal bych jen nepovinnost $mesic/$den a priradil bych jim defaultni hodnoty date("n")/("w") abych prostě jen mohl napsat cesky_mesic() a byl tam aktuální
# 14.11.2009 18:30:53 reagovat

ikona Techi:

IMHO diakritika do zdrojových kódů nepatří. Dejte si jí do db, xml, gettext, csv, template mě to je fuk, ale vždycky, když je v kodu diakritika tak se dřív nebo později po****
Např. V Zend Frameworku jsou tyto překlady uloženy v XML pro každý jazyk zvlášť
# 21.11.2009 01:52:47 reagovat

Richard:

Jen taková technická... Při pohledu na ten zdroják mi bije do očí to že názvy dnů a měsíců nezačínají velkým písmenem.
# 23.11.2009 08:17:26 reagovat

ikona David Grudl:

Názvy dnů se přece v českém jazyce nepíšou velkým písmenkem…
# 23.11.2009 19:56:34 reagovat

Richard:

True, sem to zamotal s angličtinou :) Ale ty měsíce pořád platí :)
# 24.11.2009 07:29:23 reagovat

ikona David Grudl:

Nikoliv, názvy měsíců se v českém jazyce taky píšou s malým písmenkem ;)
# 24.11.2009 08:37:35 reagovat

Vložit příspěvek

Používejte diakritiku. Nelze používat HTML značky, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

© 2005-2010 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.