Module:tg-translit

This module will transliterate Tajik language text per WT:TG TR. It is also used to transliterate Wakhi and Yagnobi. 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:tg-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",
	["ш"] = "š",
	["Ш"] = "Š",
	["ҳ"] = "h",
	["Ҳ"] = "H",
	["ъ"] = "ʾ",
	["Ъ"] = "ʾ",
	["н"] = "n",
	["Н"] = "N",
	["п"] = "p",
	["П"] = "P",
	["й"] = "y",
	["Й"] = "Y",
	["л"] = "l",
	["Л"] = "L",
	["з"] = "z",
	["З"] = "Z",
	["е"] = "e",
	["Е"] = "E",
	["г"] = "g",
	["Г"] = "G",
	["б"] = "b",
	["Б"] = "B",
	["у"] = "u",
	["У"] = "U",
	["с"] = "s",
	["С"] = "S",
	["х"] = "x",
	["Х"] = "X",
	["ч"] = "č",
	["Ч"] = "Č",
	["я"] = "ya",
	["Я"] = "Ya",
	["м"] = "m",
	["М"] = "M",
	["о"] = "o",
	["О"] = "O",
	["и"] = "i",
	["И"] = "I",
	["ё"] = "yo",
	["Ё"] = "Yo",
	["ж"] = "ž",
	["Ж"] = "Ž",
	["к"] = "k",
	["К"] = "K",
	["д"] = "d",
	["Д"] = "D",
	["в"] = "v",
	["В"] = "V",
	["а"] = "a",
	["А"] = "A",
	["ҷ"] = "j",
	["Ҷ"] = "J",
	["ӯ"] = "ü",
	["Ӯ"] = "Ü",
	["э"] = "e",
	["Э"] = "E",
	["ӣ"] = "ī",
	["Ӣ"] = "Ī",
	["қ"] = "q",
	["Қ"] = "Q",
	["ғ"] = "ġ",
	["Ғ"] = "Ġ",
	-- dated, removed in the 1998 reform
	["Ц"] = "Ts",
	["ц"] = "ts", -- replaced with "тс", sometimes "с"
	["Щ"] = "Šč",
	["щ"] = "šč", -- replaced with "шч"
	["Ы"] = "Y",
	["ы"] = "y", -- replaced with "и"
	["Ь"] = "",
	["ь"] = "" -- removed entirely
};

function export.tr(text, lang, sc)
	if not sc then
		sc = require("Module:languages").getByCode(lang):findBestScript(text):getCode()
	end

	if sc ~= "Cyrl" then
		text = nil
	else
		text = mw.ustring.gsub(text,
							   "([АОӮУЕЯЁЮИӢЕЪаоуӯэяёюиӣе][́̀]?)([ЕеИиӢӣ])",
							   function(a, e)
			local iotated = {
				['е'] = 'ye',
				['Е'] = 'Ye',
				['и'] = 'yi',
				['И'] = 'Yi',
				['ӣ'] = 'yī',
				['Ӣ'] = 'Yī'				
			}
			return a .. iotated[e]
		end)
		
		text = text
			:gsub("^Е", 'Ye')
			:gsub("^е", 'ye')
		
		text = mw.ustring.gsub(text, '.', tt)
	end

	return text
end

return export