Module:ba-translit

Revision as of 04:30, 4 April 2026 by wikt>Fish bowl (rv: this affects words like мәсьәлә. although "a lot of native speakers usually omit it completely" (w:Bashkir phonology), it has been given representation in the highly phonetic bashkir alphabet, and this should be reflected)

This module will transliterate Bashkir language text. The module should preferably not be called directly from templates or other modules. To use it from a template, use {{xlit}}. Within a module, use Module:languages#Language:transliterate.

For testcases, see Module:ba-translit/testcases.

Functions

tr(text, lang, sc)
Transliterates a given piece of text written in the script specified by the code sc, and language specified by the code lang.
When the transliteration fails, returns nil.

local export = {}

local tt = {
	["ү"]="ü",  ['Ү']='Ü',  ["т"]="t",  ['Т']='T',  ["р"]="r",  ['Р']='R',  ["ф"]="f",  ['Ф']='F',  ["ө"]="ö", ['Ө']='Ö',
	["ю"]="yu", ['Ю']='Yu', ["ш"]="ş",  ['Ш']='Ş',  ["ь"]="ʹ",  ['Ь']='ʹ',  ["ъ"]="ʺ",  ['Ъ']='ʺ',   ["н"]="n", ['Н']='N', 
	["п"]="p",  ['П']='P',  ["й"]="y",  ['Й']='Y',  ["л"]="l",  ['Л']='L',  ["з"]="z",  ['З']='Z',  ["е"]="e", ['Е']='E', 
	["г"]="g",  ['Г']='G',  ["б"]="b",  ['Б']='B',  ["у"]="u",  ['У']='U',  ["с"]="s",  ['С']='S',  ["х"]="x", ['Х']='X',
	["ч"]="ç",  ['Ч']='Ç',  ["щ"]="şç", ['Щ']='Şç', ["я"]="ya", ['Я']='Ya', ["ы"]="ı",  ['Ы']='I',  ["э"]="e", ['Э']='E', 
	["м"]="m",  ['М']='M',  ["о"]="o",  ['О']='O',  ["и"]="i",  ['И']='İ',  ["ё"]="yo", ['Ё']='Yo', ["ж"]="j", ['Ж']='j',
	["к"]="k",  ['К']='K',  ["д"]="d",  ['Д']='D',  ["в"]="v",  ['В']='V',  ["ц"]="ts", ['Ц']='Ts', ["а"]="a", ['А']='A',
	["ң"]="ñ",  ['Ң']='Ñ',  ["ғ"]="ğ",  ['Ғ']='Ğ',  ["ҙ"]="ź",  ['Ҙ']='Ź',  ["ҡ"]="q",  ['Ҡ']='Q',  ["ҫ"]="ś", ['Ҫ']='Ś',
	["һ"]="h",  ['Һ']='H',  ["ә"]="ə",  ['Ә']='Ə'
};

local iotated = {
	['е'] = 'ye',
	['Е'] = 'Ye',
}

function export.tr(text, lang, sc)
	local str_gsub = string.gsub
	local ugsub = mw.ustring.gsub
	-- ү/у should be transliterated as w before uniotated vowels and after all vowels
	text = ugsub(text, "([АаЕеЭэЁёИиОоӨөУуҮүЫыӘәЮюЯя])[уү]", "%1w")
	text = ugsub(text, "[уү]([АаЭэИиОоӨөЫыӘә])", "w%1")
	
	text = ugsub(text,
			"([АаЕеЭэЁёИиОоӨөУуҮүЪъЫыЬьӘәЮюЯя%A][́̀]?)([Ее])",
			function(a, e)
				return a .. iotated[e]
			end)
	text = ugsub(text,
		"^[Ее]",
		iotated)
	text = str_gsub(text, '[\1-\127\194-\244][\128-\191]*', tt)

	return text
end

return export