Jump to content

Module:Month translator/data: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
No edit summary
m fixed typo
Line 21: Line 21:
--[[--------------------------< P A T T E R N S >--------------------------------------------------------------
--[[--------------------------< 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 reconstrution
table of tables that hold pattern and other information used to extract date parts for translation and reconstruction


Tables have the form:
Tables have the form:

Revision as of 00:48, 14 March 2023

--[[--------------------------< 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 = {'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,
	}