Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Month translator/data

From Wikipedia, the free encyclopedia
--[[--------------------------< L A N G U A G E S >------------------------------------------------------------

Table of ISO 639 codes for languages supported by this module.    List of MediaWiki supported languages and their
codes can be found at: Template:Citation_Style_documentation/language/doc

]]

local langs = {'ar', 'ca', 'da', 'de', 'es', 'fi', 'fr', 'it', 'nb', 'pl', 'pt', 'ru', 'sv', 'tr'};


--[[--------------------------< E N G L I S H   M O N T H   N A M E S >----------------------------------------

Table of local language month names filled by month_names_get()

]]

local en_months_t = {};


--[[--------------------------< P A T T E R N S >--------------------------------------------------------------

table of tables that hold pattern and other information used to extract date parts for translation and reconstruction

Tables have the form:
	[1] - pattern for a particular date format; must include captures for the requiste date components:
			day, month, year which ever are included in the date format
	[2] - a letter 'd', 'm', or 'y' that identified the content of the first (left-most) capture
	[3] - same as [2] for the second capture
	[4] - same as [2] for the last (right-most) capture

ymd numeric dates have no hames so are not translated; use |df= parameter in the cs1|2 template for that.

]]

local patterns = {
	{'^(%d%d?) +(%a+) +(%d%d%d%d%a?)$', 'd', 'm', 'y'},							-- dd Mmm yyyy
	{'^(%d%d?)%. +(%a+) +(%d%d%d%d%a?)$', 'd', 'm', 'y'},						-- dd. Mmm yyyy – for Danish
	{'^(%d%d?) +de +(%a+) +de +(%d%d%d%d%a?)$', 'd', 'm', 'y'},					-- dd de Mmm de yyyy
	{'^(%a+) +(%d%d%d%d%a?)$', 'm', 'y'},										-- Mmm yyyy
	{'^(%a+) +de +(%d%d%d%d%a?)$', 'm', 'y'},									-- Mmm de yyyy
	{'^(%a+) +(%d%d?) *, +(%d%d%d%d%a?)$', 'm', 'd', 'y'},						-- Mmm dd, yyyy
	{'^(%a+)$', 'm'},															-- month only; mostly for debug purposes
	};


--[[--------------------------< O V E R R I D E _ N A M E S >--------------------------------------------------

table of non-English month names that are valid but are not in the list of names taken from MediaWiki with 
month_names_get().  Items in this list have the form:
	['<non-English month name>'] = 'English month name',
		'<non-English month name>' must be lowercase
]]

local override_names = {
	[''] = '',
	}


--[[--------------------------< M O N T H _ N A M E S _ G E T >------------------------------------------------

creates a translation table of non-English month names listed in lang{} mapped to English month names listed in
<en_months_t> (which this function also fills).

lang_obj:formatDate() must be given a day in addition to <en_month> else it will use the current day so, if today
is 31 August 2021, without the expicit '1' preceding the month from <en_month>, when creating a translation for
February, April, June, September, or October lang_obj:formatDate() will return the 'next' month.

To dump this table: =mw.dumpObject (p.month_names_t)

]]

local function month_names_get ()
	local month_names_t = {};

	local lang_obj = mw.language.getContentLanguage();							-- make a language object for the local language 
	for i=1, 12 do																-- loop 12x and 
		en_months_t[i] = lang_obj:formatDate('F', '2018-' .. i);				-- get month names for each i
	end

	for _, lang in ipairs (langs) do											-- spin through the languages table
		lang_obj = mw.getLanguage (lang);										-- make a language object for the current language
		for i, en_month in ipairs (en_months_t) do								-- spin through the English month-names table
			local en_date = '1 ' .. en_month;
			local month_name = mw.ustring.lower (lang_obj:formatDate('F', en_date));	-- translate the English date '1 <en month>' to <month_name>; ustring requred for tr February (Şubat)
			month_names_t[month_name] = en_month;								-- add to translations table; first day of month required

																				-- for pl and other languages that have nominative and genitive forms
			month_name = mw.ustring.lower (lang_obj:formatDate('xg', en_date));	-- translate the English date '1 <en month>' to <month_name> (genitive form)
			month_names_t[month_name] = en_month;								-- add to translations table; when 'xg' is same as 'F', this overwrites the 'F' month name
		end
	end

	return month_names_t;
end


--[[--------------------------< E X P O R T E D   T A B L E S >------------------------------------------------
]]

return {
	month_names_t = month_names_get (),
	override_names = override_names,
	patterns = patterns,
	}