Jump to content

Module:Wt/sas/lang

From Wikimedia Incubator

Documentation for this module may be created at Module:Wt/sas/lang/doc

-- Tebait dari Wt/bew. Nyeken tekerisaq [2025-07-22]
local p = {}

local langNames = {
	["mul"] = "Kelapuq base",
	
	-- Kode basa hurup dua (ISO 639-1)
	["aa"] = "Apar",
	["ab"] = "Abasian",
	["ae"] = "Apéstan",
	["af"] = "Aprikan",
	["ak"] = "Akan",
	["am"] = "Amharik",
	["an"] = "Aragon",
	["ar"] = "Arab",
	["as"] = "Asamis",
	["av"] = "Awarik",
	["ae"] = "Awéstan",
	["ay"] = "Aymara",
	["az"] = "Asérbaijan",
	["ba"] = "Baskir",
	["bm"] = "Bambara",
	["be"] = "Bélarusia",
	["bg"] = "Bulgari",
	["bh"] = "Bihari",
	["bi"] = "Bislama",
	["bm"] = "Bambara",
	["bn"] = "Benggala",
	["bo"] = "Tibet",
	["br"] = "Bréton",
--  ["bs"] = "Bosni", gabung ke [sh]
	["ca"] = "Katalan",
	["ce"] = "Cécén",
	["ch"] = "Camoro",
	["co"] = "Korsikan",
--  ["cr"] = "Kri", kudu dimasupin per logat
	["cs"] = "Cék",
	["cv"] = "Cuwas",
	["cy"] = "Wéles",
	["da"] = "Dénmak",
	["de"] = "Jérman",
	["dv"] = "Diwéhi",
	["dz"] = "Jongka",
	["ee"] = "Éwé",
	["el"] = "Yunani",
	["en"] = "Inggris",
	["eo"] = "éspéranto",
	["es"] = "Spanyol",
	["et"] = "éstonia",
	["eu"] = "Basken",
	["fa"] = "Parsi",
	["ff"] = "Pula",
	["fi"] = "Pinlan",
	["fj"] = "Piji",
	["fo"] = "Péronés",
	["fr"] = "Prancis",
	["fy"] = "Prisan Bat",
	["ga"] = "Irlan",
	["gd"] = "Gaélik Skotlan",
	["gl"] = "Galisi",
	["gn"] = "Guarani",
	["gu"] = "Gujarati",
	["gv"] = "Mang",
	["ha"] = "Hausa",
	["he"] = "Ibrani",
	["hi"] = "Hindi",
	["ho"] = "Hiri Motu",
--  ["hr"] = "Kroasi", gabung ama [sh]
	["ht"] = "Anakn Haiti",
	["hu"] = "Hungaria",
	["hy"] = "Arménia",
	["hz"] = "Héréro",
	["ia"] = "Interlingua",
	["id"] = "Indonésa",
	["ie"] = "Interlingué",
	["ig"] = "Igbo",
	["ii"] = "Nuosu",
	["ik"] = "Inupiak",
	["io"] = "Ido",
	["is"] = "Islan",
	["it"] = "Itali",
	["iu"] = "Inuktitut",
	["ja"] = "Jepun",
	["jv"] = "Jawe",
	["ka"] = "Géorgia",
	["kg"] = "Kongo",
	["ki"] = "Kikuyu",
	["kj"] = "Kuanyama",
	["kk"] = "Kasaktan",
	["kl"] = "Grinlan",
	["km"] = "Kemboja",
	["kn"] = "Kanada",
	["ko"] = "Koréa",
	["kr"] = "Kanuri",
	["ks"] = "Kasmir",
	["ku"] = "Kurdi",
	["kw"] = "Kornis",
	["ky"] = "Kirgis",
	["la"] = "Latin",
	["lb"] = "Leksembereh",
	["lg"] = "Luganda",
	["li"] = "Limbereh",
	["ln"] = "Lingala",
	["lo"] = "Laos",
	["lt"] = "Litowen",
	["lu"] = "Luba-Katanga",
	["lv"] = "Létvia",
	["mg"] = "Madagaskar",
	["mh"] = "Malagasi",
	["mi"] = "Maori",
	["mk"] = "Makédoni",
	["ml"] = "Malayalam",
	["mn"] = "Mongol",
	["mr"] = "Marati",
	["ms"] = "Melayu",
	["mt"] = "Malta",
	["my"] = "Birma",
	["na"] = "Nauru",
	["nb"] = "Bokmal",
	["nd"] = "Ndébélé Daye",
	["ne"] = "Népal",
	["ng"] = "Ndonga",
	["nl"] = "Belande",
	["nn"] = "Norwégia Baru",
	["no"] = "Norwégia",
	["nr"] = "Ndébélé Lauq",
	["nv"] = "Nabaho",
	["ny"] = "Nyanja",
	["oc"] = "Oksitan",
	["oj"] = "Ojibwé",
	["om"] = "Oromo",
	["or"] = "Odia",
	["os"] = "Oséti",
	["pa"] = "Panjabi",
	["pi"] = "Pali",
	["pl"] = "Polandia",
	["ps"] = "Pastun",
	["pt"] = "Portugis",
	["qu"] = "Kécua",
	["rm"] = "Roma",
	["ro"] = "Rumania",
	["ru"] = "Rusia",
	["rw"] = "Kinyarwanda",
	["sa"] = "Sangsekerta",
	["sc"] = "Sardéni",
	["sd"] = "Sindi",
	["se"] = "Sami Daye",
	["sg"] = "Sango",
	["sh"] = "Sérwi-Kroasi",
	["si"] = "Singala",
	["sk"] = "Slowak",
	["sl"] = "Slowén",
	["sm"] = "Samoa",
	["sn"] = "Sona",
	["so"] = "Somali",
	["sq"] = "Albani",
	["ss"] = "Swasi",
	["st"] = "Soto",
	["su"] = "Sunda",
	["sv"] = "Swédia",
	["sw"] = "Swahili",
	["ta"] = "Tamil",
	["te"] = "Telugu",
	["tg"] = "Tajik",
	["th"] = "Siam",
	["ti"] = "Tigrinya",
	["tk"] = "Turkemén",
	["tl"] = "Tegalog",
	["tn"] = "Cuana",
	["to"] = "Tonga",
	["tr"] = "Turki",
	["ts"] = "Conga",
	["tt"] = "Tatar",
	["ty"] = "Taiti",
	["ug"] = "Uygur",
	["uk"] = "Ukrain",
	["ur"] = "Urdu",
	["uz"] = "Usbék",
	["ve"] = "Wénda",
	["vi"] = "Piétnam",
	["vo"] = "Wolapek",
	["wa"] = "Walon",
	["wo"] = "Wolop",
	["xh"] = "Ngkosa",
	["yi"] = "Yédi",
	["yo"] = "Yoruba",
	["za"] = "Cueng",
	["zh"] = "Cine",
	["zu"] = "Julu",

	-- Kode basa hurup tiga (ISO 639-3)
	["abl"] = "Lampung Nyo",
	["abq"] = "Abasa",
	["abs"] = "Ambon",
    ["abz"] = "Abui",
	["ace"] = "Acéh",
	["ady"] = "Adigé",
	["aho"] = "Ahom",
	["ain"] = "Ainu",
	["aiw"] = "Aari",
	["akb"] = "Angkola",
	["akl"] = "Aklanon",
	["alp"] = "Aluné",
	["ami"] = "Amis",
	["aoz"] = "Méto",
	["arz"] = "Arab Mesir",
	["ast"] = "Asturi",
	["bac"] = "Baduy",
	["ban"] = "Bali",
	["bbc"] = "Toba",
    ["bcl"] = "Bikol Tenga",
	["bdq"] = "Bahnar",
	["bdr"] = "Bajo Pesisir Kulon",
	["bew"] = "Betawi",
	["bgz"] = "Banggai",
	["bhp"] = "Mbojo",
	["bhw"] = "Biak",
	["bjn"] = "Banjar",
	["bkr"] = "Bekumpé",
	["blj"] = "Bulungan",
	["blz"] = "Belantak",
	["bnd"] = "Bandan",
	["bnn"] = "Bunun",
	["bpz"] = "Bilba",
	["bsb"] = "Bisaya Bruné",
	["bts"] = "Simelungun",
	["btx"] = "Karo",
	["bug"] = "Bugis",
	["bve"] = "Bero",
	["ceb"] = "Sébu",
	["cia"] = "Cia-Cia",
	["cje"] = "Ceru",
	["cjm"] = "Cam Wétan",
	["crh"] = "Tatar Krim",
	["dbn"] = "Duriankari",
	["dru"] = "Rukay",
	["dun"] = "Dayak Déah",
	["duo"] = "Agta Dupaningan",
	["ert"] = "Eritay",
	["fon"] = "Pon",
	["fos"] = "Siraya",
	["frm"] = "Prancis Tengaq",
	["gag"] = "Gagaos",
	["gal"] = "Galoli",
	["gay"] = "Gayo",
	["gbi"] = "Galéla",
	["gor"] = "Gorontalo",
	["hak"] = "Khé'",
	["haw"] = "Hawai",
	["iba"] = "Iban",
	["ill"] = "Iranun",
	["ilo"] = "Iloko",
	["itd"] = "Tidung Lauq",
	["izh"] = "Ingri",
	["jax"] = "Jambi",
	["jmd"] = "Yamdéna",
	["kem"] = "Kemak",
	["kge"] = "Kumering",
	["kkv"] = "Kangéan",
	["kmk"] = "Kalinga Limos",
	["kmr"] = "Kurdi Daye",
	["knb"] = "Kalinga Lubuagan",
	["knx"] = "Kendayan",
	["kxd"] = "Melayu Bruné",
	["kzp"] = "Kaidipang-Bolangitang",
	["ljl"] = "Lio",
	["ljp"] = "Lampung Api",
	["lkj"] = "Remun",
	["lmo"] = "Lombardi",
	["lti"] = "Léti",
	["mad"] = "Medura",
	["mak"] = "Mengkasar",
	["max"] = "Melayu Maluku Daye",
	["mba"] = "Higonon",
	["mbb"] = "Manobo Bukidnon Kulon",
	["mbf"] = "Melayu Baba",
	["mbt"] = "Manobo Matigsalug",
	["mdh"] = "Magindano",
	["mdr"] = "Mandar",
	["min"] = "Minangkabo",
	["mkn"] = "Melayu Kupang",
	["mqg"] = "Kuté Kota Bangun",
	["mqy"] = "Manggarai",
	["mui"] = "Musi",
	["mvp"] = "Duri",
	["mvv"] = "Murut Tagal",
	["nia"] = "Nias",
	["nij"] = "Ngaju",
	["pag"] = "Pengasinan",
	["pam"] = "Papanggo",
	["pap"] = "Papiaméntu",
	["pey"] = "Peco",
	["plh"] = "Paulohi",
	["plm"] = "Pelémbang", --aselinya udah apkir, cuming masing kita paké
	["pmf"] = "Pamona",
	["pms"] = "Pimontés",
	["pmy"] = "Melayu Papua",
	["ppu"] = "Papora",
	["pse"] = "Melayu Tenga",
	["ptu"] = "Bambam",
	["pwn"] = "Paiwan",
	["rej"] = "Rejang",
	["rob"] = "Taé'",
	["sas"] = "Sasaq",
	["scn"] = "Sisili",
	["sda"] = "Toraja",
	["slr"] = "Salar",
	["smr"] = "Simelur",
	["smw"] = "Sumbawa",
	["sxn"] = "Sangir",
	["szy"] = "Sakijaya",
	["tao"] = "Yami",
	["tay"] = "Atayal",
	["tby"] = "Tabaru",
	["tes"] = "Tengger",
	["tet"] = "Tétun",
	["tnt"] = "Tontemboan",
	["tok"] = "Toki Pona",
	["tpi"] = "Tok Pisin",
	["trv"] = "Taroko",
	["tsg"] = "Suluk",
	["tvl"] = "Tuwalu",
	["tvx"] = "Tayboan",
    ["txn"] = "Tarangan Kulon",
	["vkt"] = "Kuté Tenggarong",
	["vot"] = "Wot",
    ["wlo"] = "Wolio",
    ["wod"] = "Wolani",
	["xmm"] = "Menado",
	["xxt"] = "Tambora",
	["yka"] = "Yakan",
	["yue"] = "Kanton",
	
	-- Kode basa bikinan en.wt
--	["ms-cla"] = "Melayu Tinggi",
--	["nan-hbl"] = "Hokkién",
	
	-- Kode basa lama
	["cu"] = "Slawik Geréja Laéq",
	["kaw"] = "Jawa Laéq",
	["osn"] = "Sunda Laéq",
	["ota"] = "Turki Usmani",
	
	-- Kode base pongkol (protolanguage)
	["ine-pro"] = "Keluarga Hindi-éropa",
	["map-pro"] = "Keluarga Ostronésia",
	["poz-pro"] = "Keluarga Melayu-Polinésia",
	["poz-mly-pro"] = "Keluarga Kemelayuan",
	
	-- Rumpun base
	["ine"] = "Hindi-éropa",	
	["map"] = "Ostronésia",
	["poz"] = "Melayu-Polinésia",
	["poz-mly"] = "Kemelayuan"
}

local protoLangs = {
	["ine-pro"] = true,
	["map-pro"] = true,
	["poz-pro"] = true,
	["poz-mly-pro"] = true
}

local langFamilies = {
	["ine"] = true,
	["map"] = true,
	["ms-eit"] = true,
	["poz"] = true,
	["poz-mly"] = true
}

-- Interwiki table
local interwikis = {
	aa = true, ab = true, af = true, ak = true, am = true, an = true, ang = true,
	ar = true, as = true, ast = true, av = true, ay = true, az = true, bcl = true,
	be = true, bew = true, bg = true, bh = true, bi = true, bjn = true, blk = true,
	bm = true, bn = true, bo = true, br = true, bs = true, btm = true, ca = true,
	ch = true, chr = true, ckb = true, co = true, cr = true, cs = true, csb = true,
	cy = true, da = true, de = true, diq = true, dv = true, dz = true, el = true,
	en = true, eo = true, es = true, et = true, eu = true, fa = true, fi = true,
	fj = true, fo = true, fr = true, fy = true, ga = true, gd = true, gl = true,
	gn = true, gom = true, gor = true, gu = true, guw = true, gv = true, ha = true,
	he = true, hi = true, hif = true, hr = true, hsb = true, hu = true, hy = true,
	ia = true, ie = true, ig = true, ik = true, ["io"] = true, ["is"] = true, it = true,
	iu = true, ja = true, jbo = true, jv = true, ka = true, kaa = true, kbd = true,
	kcg = true, kk = true, kl = true, km = true, kn = true, ko = true, ks = true,
	ku = true, kw = true, ky = true, la = true, lb = true, li = true, lmo = true,
	ln = true, lo = true, lt = true, lv = true, mad = true, mg = true, mh = true,
	mi = true, ["min"] = true, mk = true, ml = true, mn = true, mni = true, mnw = true,
	mr = true, ms = true, mt = true, my = true, na = true, nah = true, nds = true,
	ne = true, nia = true, nl = true, nn = true, no = true, oc = true, om = true,
	["or"] = true, pa = true, pi = true, pl = true, pnb = true, ps = true, pt = true,
	qu = true, rm = true, rn = true, ro = true, ru = true, rw = true, sa = true,
	sat = true, sc = true, scn = true, sd = true, sg = true, sh = true, shn = true,
	shy = true, si = true, sk = true, skr = true, sl = true, sm = true, sn = true,
	so = true, sq = true, sr = true, ss = true, st = true, su = true, sv = true,
	sw = true, ta = true, tcy = true, te = true, tg = true, th = true, ti = true,
	tk = true, tl = true, tn = true, to = true, tpi = true, tr = true, ts = true,
	tt = true, tw = true, ug = true, uk = true, ur = true, uz = true, vec = true,
	vi = true, vo = true, wa = true, wo = true, xh = true, yi = true, yo = true,
	za = true, zh = true, zu = true, ["id"] = true,

	-- Mapped codes
	mly = "ms", msa = "ms", msi = "ms", zlm = "ms", zsm = "ms"
}

-- Return interwiki link
function p.getInterwikiLink(lang, title)
	local targetLang = interwikis[lang]
	if targetLang == nil then
		return lang
	elseif targetLang == true then
		return string.format("[[:%s:%s|%s]]", lang, title, lang)
	else
		return string.format("[[:%s:%s|%s]]", targetLang, title, lang)
	end
end

-- Get full language name (returns nil if invalid)
function p.getLangName(frame)
    local args = frame.args
    local code = mw.text.trim(args[1] or "")
    local nocap = args.nocap or ""

    local name = langNames[code]
    if not name then return nil end

    local prefix = ""
	if langFamilies[code] then
        prefix = "Rumpun base "
    elseif code ~= "mul" then
        prefix = "Base "
    end

    local fullName = prefix .. name

    if nocap == "1" and mw.ustring.len(fullName) > 0 then
        local first = mw.ustring.sub(fullName, 1, 1)
        local rest = mw.ustring.sub(fullName, 2)
        fullName = mw.ustring.lower(first) .. rest
    end

    return fullName
end

function p.getLangNameByCode(code, nocap)
    code = mw.text.trim(code or "")
    nocap = nocap or ""

    local name = langNames[code]
    if not name then return nil end

    local prefix = ""

	if langFamilies[code] then
        prefix = "Rumpun bahasa "
    elseif code ~= "mul" then
        prefix = "Bahasa "
    end

    local fullName = prefix .. name

    if nocap == "1" and mw.ustring.len(fullName) > 0 then
        local first = mw.ustring.sub(fullName, 1, 1)
        local rest = mw.ustring.sub(fullName, 2)
        fullName = mw.ustring.lower(first) .. rest
    end

    return fullName
end

-- Get language code (returns nil if invalid)
function p.getLangCode(frame)
    local code = mw.text.trim((frame.args and frame.args[1]) or "")
    if langNames[code] then
        return code
    else
        return nil
    end
end

function p.getLangCodeByCode(code)
    code = mw.text.trim(code or "")
    if langNames[code] then
        return code
    end
    return nil
end

-- Expose tables
p.langFamilies = langFamilies
p.protoLangs = protoLangs
p.langNames = langNames
p.interwikis = interwikis

return p