České názvy měsíců a dnů v týdnu
Školení, která pořádám
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
já:
případně původnější
http://www.den94ek.cz verze:
bleden, úmor, bředen, duden, kreten, čerten, čertenec, svrben, žháří, říhen, psychopat, kosinec
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)
fos4:
Proc jsou $nazvy static ? Ma to nejake opodstatneni nebo to je jen zvyk ?
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.
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é.
fos4:
zajimalo jestli v tom neni neco vice :-)
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í).
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...
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í
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ášť
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.
David Grudl:
Názvy dnů se přece v českém jazyce nepíšou velkým písmenkem…
Richard:
True, sem to zamotal s angličtinou :) Ale ty měsíce pořád platí :)
David Grudl:
Nikoliv, názvy měsíců se v českém jazyce taky píšou s malým písmenkem ;)
Kart:
A aj kdyby, tak tech 12 znaku si snad prepises, ne? :P
Jindra:
No možná by to někomu i pomohlo, ale odkaz by musel být funkční ;-)
Martin:
Přesně tohle jsem hledal. Děkuji!
Diskuse je zrušena z důvodu spamu.