Module:I18n/ordinal

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
Lua

CodeDiscussionEditHistoryLinksLink count Subpages:DocumentationTestsResultsSandboxLive code All modules

Translations used by Module:Ordinal

Translations are stored in 2 tables:

  • p.SchemeFromLang — Table matching individual languages with specific ordinal formatting schemes used by one or more languages. All unlisted languages default to the "period-scheme", i.e. "104." is the ordinal for the value "104". Languages will follow the regular language fallback chain. For example, "de-formal" would fallback to scheme for "de", and only if that does not exist would the "period-scheme" be used.
  • p.Scheme — Table of supported schemes. Each scheme has one or more parameters.
Possible parameters are:
  • rules — a value specifying the rules to apply when processing this scheme. Legal values are 'suffix', 'prefix', 'skip-tens', 'suffix-one', 'gendered-suffix', 'gendered-suffix-one', 'mod10-suffix', and 'mod10-gendered-suffix-skip-tens'.
  • superscript — if set to true, the ordinal indicator will be superscripted unless the caller specifically suppresses superscription.
  • period — if set to true, a period character is output between the numeral and a superscripted suffix
  • suffix — default suffix to append to numeral.
  • suffix_n — suffix to append if final digit of numeral is n
  • suffix_m — suffix to append if gender is male (used by 'gendered-suffix' and 'gendered-suffix-one')
  • suffix_f — suffix to append if gender is female (used by 'gendered-suffix' and 'gendered-suffix-one')
  • suffix_n — suffix to append if gender is neuter (used by 'gendered-suffix' and 'gendered-suffix-one')
  • suffix_1_m — suffix to append if value is one and gender is male (used by 'gendered-suffix-one')
  • suffix_1_f — suffix to append if value is one and gender is female (used by 'gendered-suffix-one')
  • suffix_1_n — suffix to append if value is one and gender is neuter (used by 'gendered-suffix-one')
  • suffix_n_m — suffix to append if value is n and gender is male (used by 'gendered-suffix-n', etc.)
  • suffix_n_f — suffix to append if value is n and gender is female (used by 'gendered-suffix-n', etc.)
  • suffix_n_n — suffix to append if value is n and gender is neuter (used by 'gendered-suffix-n', etc.)
  • prefix — default prefix to prepend to numeral.
  • formatlang — overrides the language value used when formatting the numeral

The heart of each ordinal formatting scheme is the rules parameter that specifies the rules to apply when processing a particular scheme. Supported values for rules include:

  • 'prefix' — the value in the prefix parameter is written before the numeral as the ordinal indicator. The superscript parameter is ignored by this rule.
  • 'suffix' — the value in the suffix parameter is written after the numeral as the ordinal indicator.
  • 'suffix-one' — If the numeral is 1 the value in the suffix_1 parameter is written after the numeral as the ordinal indicator, otherwise the value in the suffix parameter is written after the numeral as the ordinal indicator.
  • 'mod10-suffix' — the value in the suffix_n parameter is written after the numeral as the ordinal indicator if the final digit of the numeral is n. If the matching suffix_n parameter is not present, the value in the suffix parameter is written after the numeral as the ordinal indicator.
  • 'skip-tens' — works the same as 'mod10-suffix', except that numeral values in the range 10..19 don't use the matching suffix_n parameter, they alway use the value in the suffix parameter. This is the scheme used by English and a few other Germanic-related languages.
  • 'gendered-suffix' — based on the gender (m, f, n) the matching value in the suffix_gender parameter is written after the numeral as the ordinal indicator. If the matching suffix_gender parameter is not present or no gender is specified by the user, the value in the suffix parameter is written after the numeral as the ordinal indicator. This is the scheme used by the romance languages.
  • 'gendered-suffix-one' — A combination of 'gendered-suffix' and 'suffix-one'. If the numeral is 1, then based on the gender (m, f, n) the matching value in the suffix_1_gender parameter is written after the numeral as the ordinal indicator. If the matching suffix_1_gender parameter is not present or no gender is specified by the user, the value in the suffix_1 parameter is written after the numeral as the ordinal indicator. If the numeral is not 1, then based on the gender (m, f, n) the matching value in the suffix_gender parameter is written after the numeral as the ordinal indicator. If the matching suffix_gender parameter is not present or no gender is specified by the user, the value in the suffix parameter is written after the numeral as the ordinal indicator. This is the scheme used by the French language.
  • 'gendered-suffix-n' — An expansion of 'gendered-suffix-one'. If the numeral is n (where n <= 9), then based on the gender (m, f, n) the matching value in the suffix_n_gender parameter is written after the numeral as the ordinal indicator. If the matching suffix_n_gender parameter is not present or no gender is specified by the user, the value in the suffix_n parameter is written after the numeral as the ordinal indicator. If that is not present, the value in the matching value in the suffix_gender parameter is written after the numeral as the ordinal indicator. If the numeral is greater than 9, then based on the gender (m, f, n) the matching value in the suffix_gender parameter is written after the numeral as the ordinal indicator. If the matching suffix_gender parameter is not present or no gender is specified by the user, the value in the suffix parameter is written after the numeral as the ordinal indicator. This is the scheme used by the Catalan language.
  • 'mod10-gendered-suffix-skip-tens' — A combination of 'skip-tens' and 'gendered-suffix'. The value in the suffix_n_gender parameter is written after the numeral as the ordinal indicator if the final digit of the numeral is n and gender is gender. If the matching suffix_n_gender parameter is not present, or no gender is specified by the user, the value in the matching suffix_n parameter is written after the numeral as the ordinal indicator. If that is not present, the value in the matching value in the suffix_gender parameter is written after the numeral as the ordinal indicator. If that is not present, or no gender is specified by the user, the value in the suffix parameter is written after the numeral as the ordinal indicator. Numeral values in the range 10..19 only use gender. This is the scheme used by the Polish language.
  • 'uk-rules' — The Ukrainian rules, processed identically to 'mod10-gendered-suffix-skip-tens' with a special exception for when the final two digits are 40 or the number is a multiple of 1000. If the final two digits are 40, then based on the gender (m, f, n) the matching value in the suffix_40_gender parameter is written after the numeral as the ordinal indicator. If the matching suffix_40_gender parameter is not present or no gender is specified by the user, the value in the suffix parameter is written after the numeral as the ordinal indicator. If the number is a multiple of 1000, then based on the gender (m, f, n) the matching value in the suffix_1000_gender parameter is written after the numeral as the ordinal indicator. If the matching suffix_1000_gender parameter is not present or no gender is specified by the user, the value in the suffix parameter is written after the numeral as the ordinal indicator.

Code

local p = {}
 
--[[ Different languages use different schemes for ordinals, and some of these schemes are shared between languages. 
"SchemeFromLang" picks an ordinal scheme based on a specified language. 
All unlisted languages default to the "period-scheme", i.e. "104." is the ordinal for the value "104".
Languages will follow the regular language fallback chain. For example, "de-formal" would fallback to scheme for "de", 
and only if that does not exist would the "period-scheme" be used.
]]
 
p.SchemeFromLang = {
	['ast'] 	= 'ast-scheme', 	-- Asturian
	['bn'] 		= 'bn-scheme', 		-- Bengali
	['br']		= 'br-scheme',		-- Breton
	['ca'] 		= 'ca-scheme', 		-- Catalan
	['cs'] 		= 'period-scheme',	-- Czech
	['da']		= 'period-scheme',	-- Danish
	['de'] 		= 'period-scheme',	-- German
	['el']		= 'el-scheme',		-- Greek
	['en-gb'] 	= 'en-scheme', 		-- British English
	['en-ca'] 	= 'en-scheme', 		-- Canadian English
	['en'] 		= 'en-scheme', 		-- English
	['eo'] 		= 'eo-scheme', 		-- Esperanto
	['es'] 		= 'es-scheme',		-- Spanish
	['et']		= 'period-scheme',	-- Estonian
	['eu'] 		= 'roman-scheme',	-- Basque
	['fa'] 		= 'fa-scheme',		-- Persian
	['fi'] 		= 'period-scheme',	-- Finnish
	['fr'] 		= 'fr-scheme',		-- French
	['hr']		= 'period-scheme',	-- Croatian
	['hu'] 		= 'period-scheme',	-- Hungarian
	['hy']		= 'hy-scheme',		-- Armenian
	['ia'] 		= 'ia-scheme',		-- Interlingua
	['it']		= 'romance-scheme',	-- Italian
	['ja']		= 'ja-scheme',		-- Japanese
	['km']		= 'km-scheme',		-- Khmer
	['ko'] 		= 'ko-scheme',		-- Korean
	['la']		= 'la-scheme',		-- Latin
	['lo']		= 'lo-scheme',		-- Laothian
	['lt'] 		= 'lt-scheme',		-- Lithuanian
	['mk'] 		= 'mk-scheme',		-- Macedonian
	['ml'] 		= 'ml-scheme',		-- Malayalam
	['ms']		= 'ms-scheme',		-- Malay
	['nds']		= 'period-scheme',	-- Low German
	['nb']		= 'period-scheme',	-- Norwegian Bokmål
	['nl']		= 'nl-scheme',		-- Dutch
	['nn']		= 'period-scheme',	-- Norwegian Nynorsk
	['no']		= 'period-scheme',	-- Norwegian
	['pl'] 		= 'pl-scheme',		-- Polish
	['pt']		= 'romance-scheme',	-- Portuguese
	['ru'] 		= 'ru-scheme',		-- Russian
	['sk']		= 'period-scheme',	-- Slovak
	['sl']		= 'period-scheme',	-- Slovene
	['sv']		= 'sv-scheme',		-- Swedish
	['ta'] 		= 'ta-scheme',		-- Tamil
	['th'] 		= 'th-scheme',		-- Thai
	['uk']  	= 'uk-scheme',		-- Ukrainian
	['vi'] 		= 'vi-scheme',		-- Vietnamese
	['zh-hans'] = 'zh-scheme',		-- Simplified Chinese
	['zh-hant'] = 'zh-scheme',		-- Traditional Chinese
}
 
--[[ Text used to internationalize the various schemes. 
Styles are supported by suffixing "/style" to key. 
Styles that are superscripted set "superscript" to true (this style can be disabled, e.g. in category and page names not supporting HTML styling tags).
Scheme set was developed to match the output of the pre-Lua {{Ordinal}} template, preserved as {{Ordinal/old}}
]]
p.Scheme = {
	-- the null scheme, i.e. just the number (normally not used except in technical contexts expecting only numbers)
	['null-scheme'] = {
	},

	-- the period scheme, i.e. "<value>." used for at least: cs, de, fi, hu
	['period-scheme'] = {
		rules = 'suffix',
		suffix = '.'
	},
	
	-- Roman (Basque, Galician, Italian, and Classical Latin)
	['roman-scheme'] = {
		period = false,
		superscript = false,
		formatlang = 'roman'
	},

	-- Romance (Italian, Portuguese)
	['romance-scheme'] = {
		rules = 'gendered-suffix',
		superscript = true,
		period = false,
		suffix = 'o',
		suffix_m = 'o',
		suffix_f = 'a',
		suffix_n = 'o',
	},
	
	-- Asturian
	['ast-scheme'] = {
		rules = 'gendered-suffix',
		superscript = true,
		period = false,
		suffix = 'u',
		suffix_m = 'u',
		suffix_f = 'a',
		suffix_n = 'o',
	},

	-- Bengali (reference: https://www.bissoy.com/701365/)
	['bn-scheme'] = {
		rules = 'suffix',
		suffix = 'তম', 
		suffix_0 = 'ম',
		suffix_1 = 'ম',
		suffix_2 = 'য়',
		suffix_3 = 'য়',
		suffix_4 = 'র্থ',
		suffix_5 = 'ম',
		suffix_6 = 'ষ্ঠ',
		suffix_7 = 'ম',
		suffix_8 = 'ম',
		suffix_9 = 'ম',
	},

	-- Breton
	['br-scheme'] = {
		-- non-breaking hyphen ("‑", U+2011) is used below
		rules = 'suffix',
		suffix = '‑vet', 
		formatlang = 'eo' -- pre-Lua {{Ordinal}} template used "eo" number formatting for "br" ordinals (???FIXME???)
	},

	-- Catalan
	['ca-scheme'] = {
		rules = 'gendered-suffix-n',
		superscript = false,
		period = false,
		suffix = 'è',
		suffix_f = 'a',
		suffix_1 = 'r',
		suffix_1_f = 'a',
		suffix_2 = 'n',
		suffix_2_f = 'a',
		suffix_3 = 'r',
		suffix_3_f = 'a',
		suffix_4 = 't',
		suffix_4_f = 'a'
	},

	-- Greek
	['el-scheme'] = {
		rules = 'gendered-suffix',
		suffix = 'ος',
		suffix_m = 'ος',
		suffix_f = 'η',
		suffix_n = 'ο',
	},

	-- the English scheme, i.e. "1st", "2nd", "3rd", "4th".
	['en-scheme'] = {
		rules = 'skip-tens',
		superscript = true,
		suffix = 'th',
		suffix_1 = 'st',
		suffix_2 = 'nd',
		suffix_3 = 'rd',
	},

	-- the English scheme using the "d" style, i.e. "23d".
	['en-scheme/d'] = {
		rules = 'suffix',
		suffix = 'd'
	},
	
	-- Esperanto
	['eo-scheme'] = {
		rules = 'suffix',
		-- non-breaking hyphen ("‑", U+2011) is used below
		suffix = '‑a', 
	},
	
	-- Spanish (period plus Romance)
	['es-scheme'] = {
		rules = 'gendered-suffix',
		superscript = true,
		period = true,
		suffix = 'o',
		suffix_m = 'o',
		suffix_f = 'a',
		suffix_n = 'o',
	},
	
	-- Persian
	['fa-scheme'] = {
		rules = 'suffix',
		suffix = 'م', 
	},
	
	-- French
	['fr-scheme'] = {
		rules = 'gendered-suffix-one',
		superscript = true,
		suffix = 'e',
		suffix_1 = 'e', -- there's NO neutral gender in French (this is only for unspecified gender)
		suffix_1_m = 'er',
		suffix_1_f = 're',
	},
	
	-- French alternate specific style for 2nd (used only when the 2nd is also the *last* one in a pair, including World Wars)
	['fr-scheme/pair'] = {
		rules = 'gendered-suffix-n',
		superscript = true,
		suffix = 'e',
		suffix_1 = 'e',
		suffix_1_m = 'er',
		suffix_1_f = 're',
		suffix_2 = 'e',
		suffix_2_m = 'nd',
		suffix_2_f = 'de',
	},
	
	-- the French scheme using the "roman" style ("roman year" is a supported alias for "roman")
	['fr-scheme/roman'] = {
		rules = 'gendered-suffix-one',
		superscript = true,
		suffix = 'e',
		suffix_1 = 'e',
		suffix_1_m = 'er',
		suffix_1_f = 're',
		formatlang = 'roman' -- styled normally in small capitals (except milleniums using big capitals)
	},
	
	-- French specific roman ordinal style after names of personal titles (kings/queens/popes…) and of book chapters (suffixed only for 1st)
	['fr-scheme/roman-title'] = {
		rules = 'gendered-suffix-one',
		superscript = true,
		suffix = '', -- no suffix except for 1st
		suffix_1 = 'e',
		suffix_1_m = 'er',
		suffix_1_f = 're',
		suffix_1_n = 'е',
		formatlang = 'roman' -- style using only big capitals
	},
	
	-- Armenian
	['hy-scheme'] = {
		rules = 'suffix-one',
		-- non-breaking hyphens ("‑", U+2011) are used below
		suffix = '‑րդ',
		suffix_1 = '‑ին',
	},
	
	-- Interlingua
	['ia-scheme'] = {
		rules = 'mod10-suffix',
		superscript = true,
		suffix_0 = 'te',
		suffix_1 = 'me',
		suffix_2 = 'nde',
		suffix_3 = 'tie',
		suffix_4 = 'te',
		suffix_5 = 'te',
		suffix_6 = 'te',
		suffix_7 = 'me',
		suffix_8 = 've',
		suffix_9 = 'ne',
	},

	-- Japanese
	-- this is for the adjective in undetermined order before noun; otherwise Japanese use: <cardinal number><noun>目
	['ja-scheme'] = {
		rules = 'prefix',
		prefix = '第', 
	},

	-- Khmer
	['km-scheme'] = {
		rules = 'prefix',
		prefix = 'ទ', 
	},

	-- Korean
	['ko-scheme'] = {
		rules = 'suffix',
		suffix = '째', 
	},

	-- Latin
	['la-scheme'] = {
		rules = 'suffix',
		superscript = true,
		suffix = 'o', 
		formatlang = 'roman'
	},

	-- Laothian
	['lo-scheme'] = {
		rules = 'prefix',
		prefix = 'ທີ່', 
	},
	
	-- Lithuanian
	['lt-scheme'] = {
		rules = 'suffix',
		superscript = false,
		-- non-breaking hyphen ("‑", U+2011) is used below
		suffix = '‑as',
	},
	
	-- the Lithuanian scheme using the "roman" style without any suffix/prefix ("roman year" is a supported alias for "roman")
	['lt-scheme/roman'] = {
		rules = 'suffix',
		superscript = false,
		suffix = '', -- no suffix in Roman style
		formatlang = 'roman' -- styled normally in small capitals (except milleniums using big capitals)
	},
	-- Macedonian
	['mk-scheme'] = {
		rules = 'mod10-suffix',
		-- non-breaking hyphens ("‑", U+2011) are used below
		suffix_0 = '‑тиот',
		suffix_1 = '‑виот',
		suffix_2 = '‑риот',
		suffix_3 = '‑иот',
		suffix_4 = '‑иот',
		suffix_5 = '‑тиот',
		suffix_6 = '‑иот',
		suffix_7 = '‑миот',
		suffix_8 = '‑миот',
		suffix_9 = '‑тиот',
	},

	-- Malayalam
	['ml-scheme'] = {
		rules = 'suffix',
		-- non-breaking hyphen ("‑", U+2011) is used below
		suffix = '‑മത്തെ', 
	},

	-- Malay
	['ms-scheme'] = {
		rules = 'prefix',
		-- non-breaking hyphen ("‑", U+2011) is used below
		prefix = 'ke‑', 
	},
	
	-- Dutch
	['nl-scheme'] = {
		rules = 'suffix',
		suffix = 'e',
	},
	
	-- Polish
	['pl-scheme'] = {
		rules = 'mod10-gendered-suffix-skip-tens',
		-- non-breaking hyphens ("‑", U+2011) are used below
		suffix = '‑ty',
		suffix_f = '‑ta',
		suffix_n = '‑te',
		suffix_1 = '‑szy',
		suffix_1_f = '‑sza',
		suffix_1_n = '‑sze',
		suffix_2 = '‑gi',
		suffix_2_f = '‑ga',
		suffix_2_n = '‑gie',
		suffix_3 = '‑ci',
		suffix_3_f = '‑cia',
		suffix_3_n = '‑cie',
		suffix_7 = '‑my',
		suffix_7_f = '‑ma',
		suffix_7_n = '‑me',
		suffix_8 = '‑my',
		suffix_8_f = '‑ma',
		suffix_8_n = '‑me',
	},

	-- Russian
	['ru-scheme'] = {
		rules = 'gendered-suffix',
		-- non-breaking hyphens ("‑", U+2011) are used below
		suffix = '‑й',
		suffix_m = '‑й',
		suffix_f = '‑я',
		suffix_n = '‑е',
	},
	
	-- Swedish
	['sv-scheme'] = {
		rules = 'skip-tens',
		suffix = ':e',
		suffix_1 = ':a',
		suffix_2 = ':a',
	},
	
	-- Thai
	['th-scheme'] = {
		rules = 'prefix',
		prefix = 'ที่', 
	},
	
	-- Modern Tamil (using European digits for all numbers, with a hyphen before the suffix)
	['ta-scheme'] = {
		rules = 'suffix',
		-- non-breaking hyphen ("‑", U+2011) is used below
		suffix = '‑ஆம்',
		formatlang = 'en',
	},
	
	-- Traditional Tamil (using Tamil digits without any hyphen before the suffix, but a distinct prefix and suffix for 1st)
	['ta-scheme/trad'] = {
		rules = 'suffix-one',
		suffix = 'ஆம்',
		prefix_1 = 'மு',
		suffix_1 = 'லாம்',
	},

	-- Ukrainian: see [[:uk:Вікіпедія:Стиль/Нарощення порядкових числівників#Нарощення]] and [[:uk:Шаблон:-й]]
	-- FIXME: 0?
	['uk-scheme'] = {
		rules = 'uk-rules',
		-- non-breaking hyphens ("‑", U+2011) are used below
		suffix = '‑й',
		suffix_f = '‑та',
		suffix_n = '‑те',
		suffix_1_f = '‑ша',
		suffix_1_n = '‑ше',
		suffix_2_f = '‑га',
		suffix_2_n = '‑ге',
		suffix_3_f = '‑тя',
		suffix_3_n = '‑тє',
		suffix_7_f = '‑ма',
		suffix_7_n = '‑ме',
		suffix_8_f = '‑ма',
		suffix_8_n = '‑ме',
		suffix_40_f = '‑ва',
		suffix_40_n = '‑ве',
		suffix_1000_f = '‑на',
		suffix_1000_n = '‑не',
	},
	
	-- Vietnamese
	['vi-scheme'] = {
		rules = 'prefix',
		prefix = 'thứ ',
	},
	
	-- Chinese
	['zh-scheme'] = {
		rules = 'prefix',
		prefix = '第', 
	},
}
 
return p