Ve vícejazyčné aplikaci můžeme chtít pro každý jazyk nastavit jiný formát data. Slušné formátovací možnosti nabízí funkce strftime, která pro některá formátování vrací i textovou reprezentaci měsíce nebo dne v týdnu v jazyce nastaveném funkcí setlocale. Problém však nastává v případě, kdy pro daný jazyk nemá systém odpovídající překlad nebo když chceme používat překlady vlastní. Tehdy je možné formát data rozložit na jazykově závislé a nezávislé části a závislé přeložit vlastní funkcí:
<?php /** Formátování data s přeložením textových částí funkcí lang() * @param string formát stejný jako u funkce date() * @param int timestamp nebo time() při neuvedení * @return string zformátované a přeložené datum * @copyright Jakub Vrána, https://php.vrana.cz/ */ function date_lang($format, $timestamp = null) { if (!isset($timestamp)) { $timestamp = time(); } $return = ""; $rest = ""; for ($i=0; $i < strlen($format); $i++) { if (strpos("DlSFMaAeT", $format[$i]) !== false) { $return .= (strlen($rest) ? date($rest, $timestamp) : "") . lang(date($format[$i], $timestamp)); $rest = ""; } else { $rest .= $format[$i]; } } return $return . (strlen($rest) ? date($rest, $timestamp) : ""); } ?>
Aby se funkce date nemusela volat zbytečně mockrát, ukládá se jazykově nezávislý formát do proměnné $rest
, na kterou se funkce zavolá až když to je potřeba. Volání po každém znaku by bylo jednodušší, ale neefektivnější.
Diskuse je zrušena z důvodu spamu.