Mô đun:I18n/ordinal

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
	'co'		= 'co-scheme',		-- Corsu
	'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
	'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  template, preserved as 
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. "." 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  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',
	},
	
	-- Corsu
		'co-scheme' = {
		rules = 'suffix',
		suffix = 'è'
	},
	-- 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: 目
	'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 = 'ທີ່', 
	},
	
	-- 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