OK, the following bit of code should do what required. Let me know if there are any issues with it. Date and month are now optional. Next step would be to change the "add composer" interface to use the #makedate. For this, we would probably want to add a dropdown box for the month. In this case, the arrays should probably go somewhere else in the code, in order to access them from different points.
Code: Select all
function renderIMSLPDate( &$parser, $year = FALSE, $month = FALSE, $date = FALSE )
{
global $wgLang;
if( !$month && !$date ) return $year;
// nominative case:
$monthnames = array (
'de' => array ('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'),
'el' => array ('Ιανουάριος', 'Φεβρουάριος', 'Μάρτιος', 'Απρίλιος', 'Μάιος', 'Ιούνιος', 'Ιούλιος', 'Αύγουστος', 'Σεπτέμβριος', 'Οκτώβριος', 'Νοέμβριος', 'Δεκέμβριος'),
'en' => array ('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
'es' => array ('enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'),
'fr' => array ('janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'août', 'septembre', 'octobre', 'novembre', 'décembre'),
'it' => array ('gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno', 'luglio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dicembre'),
'nl' => array ('januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'),
'pl' => array ('styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec', 'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad', 'grudzień'),
'tr' => array ('Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık')
);
// where declined form differs from the nominative:
$monthnames_d = array (
'el' => array ('Ιανουαρίου', 'Φεβρουαρίου', 'Μαρτίου', 'Απριλίου', 'Μαΐου', 'Ιουνίου', 'Ιουλίου', 'Αυγούστου', 'Σεπτεμβρίου', 'Οκτωβρίου', 'Νοεμβρίου', 'Δεκεμβρίου'),
'pl' => array ('stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia')
);
// %1$u = year, %2$s = month name, %3$u = date
$format = array (
'de' => '%3$u. %2$s %1$u',
'el' => '%3$u %2$s %1$u',
'en' => '%2$s %3$u, %1$u',
'es' => '%3$u de %2$s de %1$u',
'fr' => '%3$u %2$s %1$u',
'it' => '%3$u %2$s %1$u',
'nl' => '%3$u %2$s %1$u',
'pl' => '%3$u %2$s %1$u',
'tr' => '%3$u %2$s, %1$u'
);
// default to English
$lang = 'en';
if( array_key_exists($wgLang->getCode(), $monthnames) )
$lang = $wgLang->getCode();
if( !array_key_exists($month-1, $monthnames[$lang]) ) return 'MKDATEERROR';
$monthname = $monthnames[$lang][$month-1];
$monthname_d = $monthname;
if( array_key_exists($lang, $monthnames_d) )
$monthname_d = $monthnames_d[$lang][$month-1];
if( !$date ) return "$monthname $year";
return sprintf($format[$lang], $year, $monthname_d, $date);
}