České názvy měsíců a dnů v týdnu
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, https://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, https://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";
?>
Diskuse
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
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
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
fos4:
Proc jsou $nazvy static ? Ma to nejake opodstatneni nebo to je jen zvyk ?
13.11.2009 08:12:08
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
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
fos4:
zajimalo jestli v tom neni neco vice :-)
13.11.2009 09:08:53
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
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
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
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
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
Názvy dnů se přece v českém jazyce nepíšou velkým písmenkem…
23.11.2009 19:56:34
True, sem to zamotal s angličtinou :) Ale ty měsíce pořád platí :)
24.11.2009 07:29:23
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
Kart:
A aj kdyby, tak tech 12 znaku si snad prepises, ne? :P
19.4.2014 18:55:26
Jindra:
No možná by to někomu i pomohlo, ale odkaz by musel být funkční ;-)
20.12.2011 11:43:12
Martin:
Přesně tohle jsem hledal. Děkuji!
14.5.2014 11:57:45
Petr:
Pomohlo. Díky moc!
1.3.2019 09:03:29