I recently ran into a problem where I needed to display the same date several times on one page, but in different locales. The solution that I came up with was to extend the {(ftime...)} function to take an optional third parameter 'lc' which takes a locale in which to render the date. Since I use ftime in a number of places on my site, I was very careful to preserve all existing functionality, so the following should be a safe drop-in replacement. If you have a use for it, you can just copy what follows into config.php. I would like to see this extension added to the core, if other folks find it useful too.
$MarkupExpr['ftime'] = 'lc_ftime($args, $argp)'; ## lc_ftime handles {(ftime fmt=x when=y lc=z)} expressions. ## function lc_ftime($args = NULL, $argp = NULL) { global $TimeFmt, $Now, $FTimeFmt; ## get the format string if( isset($argp['fmt']) ) $fmt = $argp['fmt']; else if (strpos(@$args[0], '%') !== false) $fmt = array_shift($args); else if (strpos(@$args[1], '%') !== false) list($fmt) = array_splice($args,1,1); else { SDV($FTimeFmt, $TimeFmt); $fmt = $FTimeFmt; } ## determine the timestamp if( isset($argp['when']) ) list($time, $x) = DRange($argp['when']); else if (@$args[0] > '') list($time, $x) = DRange(array_shift($args)); else $time = $Now; ## get the locale if( isset($argp['lc']) ) $locale=$argp['lc']; else $locale=array_shift($args); ## make sure we have %F for ISO dates, %s for unix timestamps. $fmt = str_replace(array('%F', '%s'), array('%Y-%m-%d', $time), $fmt); ## handle locale switch, if need be. if( isset($locale) ) { $oldlc = setlocale(LC_ALL,'0'); setlocale(LC_ALL,$locale); $ret = strftime($fmt,$time); setlocale(LC_ALL,$oldlc); } else $ret = strftime($fmt,$time); return $ret; } _______________________________________________ pmwiki-devel mailing list pmwiki-devel@pmichaud.com http://www.pmichaud.com/mailman/listinfo/pmwiki-devel