Č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";
?>
Jakub Vrána, Dobře míněné rady, 13.11.2009, diskuse: 21 (nové: 0)

Diskuse

ikona Jakub Vrána OpenID:

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

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)

kocour v botách:

Prudérní kalendář
http://hovnovbotach.wz.cz/index2.php?basen=4

crs:

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

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 :-)

ikona Jakub Vrána OpenID:

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í

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ášť

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.

ikona 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í :)

ikona 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

tomdawayhet:

Zdravim

Mozno to niekomu ulahci pracu. Inspirovane Jakubom a troska rozsirene:

http://www.swapp.sk/library/public/LangDate.php.txt

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!

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, 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:

avatar © 2005-2018 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.