Module:Month translator

require('strict') local getArgs = require ('Module:Arguments').getArgs;

local data = mw.loadData ('Module:month translator/data');

--[[--< _ M O N T H _ X L A T E >--

]]

local function _month_xlate (args_t) local t = {}; local day, month, year; if 'dump' == args_t[1] then													-- args_t[1] = 'dump' to dump  table; return mw.dumpObject (data.month_names_t); end if not args_t[1] then return nil end for i, pattern in ipairs (data.patterns) do									-- spin through the patterns table looking for a match local c1, c2, c3;														-- captures in the 'pattern' from the pattern table go here

c1, c2, c3 = mw.ustring.match (mw.text.trim (args_t[1]), pattern[1]);	-- one or more captures set if source matches patterns[i][1])		if c1 then																-- c1 always set on match

t = { [pattern[2] or 'x'] = c1,										-- fill the table of captures with the captures [pattern[3] or 'x'] = c2,										-- take index names from pattern table and assign sequential captures [pattern[4] or 'x'] = c3,										-- index name may be nil in pattern table so "or 'x'" spoofs a name for this index in this table };			day = t.d or '';													-- translate table contents to named variables; month = mw.ustring.lower (t.m or '');								-- absent table entries are nil so set unused parts to empty string; lowercase for indexing month = data.override_names[month] or data.month_names_t[month];	-- replace non-English name with English name from translation tables year= t.y or '';

if month then local df = table.concat ({pattern[2], pattern[3], pattern[4]}, '');	-- extract date format from pattern table (pattern[2], pattern[3], pattern[4])

if 'dmy' == df then												-- for dmy dates return table.concat ({day, month, year}, ' ');				-- assemble an English language dmy date elseif 'my' == df then											-- for month year dates return table.concat ({month, year}, ' ');					-- assemble an English language dmy date elseif 'mdy' == df then											-- for mdy dates return string.format ('%s %s, %s', month, day, year);		-- assemble an English language mdy date elseif 'm' == df then											-- must be month (only valid option remaining) return month;												-- none of the above, return the translated month; end end break;																-- and done; if here found pattern match but did not find non-English month name in  end end return args_t[1];															-- if here, couldn't translate so return the original date end

--[[--< M O N T H _ X L A T E >

]]

local function month_xlate (frame) return _month_xlate (getArgs (frame)); end

----< E X P O R T E D  F U N C T I O N S >--

return { month_xlate = month_xlate, _month_xlate = _month_xlate };