Module:Languages

From Elwiki

Documentation for this module may be created at Module:Languages/doc

-- pystart
require('Module:CommonFunctions')
local getArgs = require('Module:Arguments').getArgs
local p = {}

local LANG_CONFIG = { 
    ["af"] = { ["label"] = "Taal:" },
    ["aln"] = { ["label"] = "Gjuha:" },
    ["am"] = { ["label"] = "ቋምቋ፦" },
    ["an"] = { ["label"] = "Idioma:" },
    ["ang"] = { ["label"] = "Sprǣc:" },
    ["ar"] = { ["label"] = ":اللغة" },
    ["arc"] = { ["label"] = "ܠܫܢܐ:" },
    ["arn"] = { ["label"] = "Dungun:" },
    ["arz"] = { ["label"] = ":اللغة" },
    ["as"] = { ["label"] = "ভাষা:" },
    ["ast"] = { ["label"] = "Llingua:" },
    ["avk"] = { ["label"] = "Ava:" },
    ["ay"] = { ["label"] = "Aru:" },
    ["az"] = { ["label"] = "Dil:" },
    ["bat-smg"] = { ["label"] = "Kalba:" },
    ["bcc"] = { ["label"] = "زبان:" },
    ["bcl"] = { ["label"] = "Tataramon:" },
    ["be"] = { ["label"] = "Мова:" },
    ["be-tarask"] = { ["label"] = "Мова:" },
    ["bg"] = { ["label"] = "Език:" },
    ["bn"] = { ["label"] = "ভাষা:" },
    ["br"] = { ["label"] = "Yezh :" },
    ["bs"] = { ["label"] = "Jezik:" },
    ["ca"] = { ["label"] = "Llengua:" },
    ["cdo"] = { ["label"] = "Ngṳ̄-ngiòng:" },
    ["ce"] = { ["label"] = "Мотт:" },
    ["ceb"] = { ["label"] = "Pinulongan:" },
    ["ch"] = { ["label"] = "Lengguahe:" },
    ["ckb-arab"] = { ["label"] = "زمان:" },
    ["co"] = { ["label"] = "Lingua:" },
    ["crh-cyrl"] = { ["label"] = "Тиль:" },
    ["crh-latn"] = { ["label"] = "Til:" },
    ["cs"] = { ["label"] = "Jazyk:" },
    ["cu"] = { ["label"] = "ѩꙁꙑ́къ :" },
    ["cv"] = { ["label"] = "Чĕлхе:" },
    ["cy"] = { ["label"] = "Iaith:" },
    ["da"] = { ["label"] = "Sprog:" },
    ["de"] = { ["label"] = "Sprache:" },
    ["diq"] = { ["label"] = "Zıwan:" },
    ["dsb"] = { ["label"] = "Rěc:" },
    ["ee"] = { ["label"] = "Gbe:" },
    ["el"] = { ["label"] = "Γλώσσα:" },
    ["en"] = { ["label"] = "Language:" },
    ["eo"] = { ["label"] = "Lingvo:" },
    ["es"] = { ["label"] = "Idioma:" },
    ["et"] = { ["label"] = "Keel:" },
    ["eu"] = { ["label"] = "Hizkuntza:" },
    ["ext"] = { ["label"] = "Palra:" },
    ["fa"] = { ["label"] = "زبان:" },
    ["fi"] = { ["label"] = "Kieli:" },
    ["fo"] = { ["label"] = "Mál:" },
    ["fr"] = { ["label"] = "Langue :" },
    ["frc"] = { ["label"] = "Langue :" },
    ["frp"] = { ["label"] = "Lengoua :" },
    ["fur"] = { ["label"] = "Lenghe :" },
    ["fy"] = { ["label"] = "Taal:" },
    ["ga"] = { ["label"] = "Teanga:" },
    ["gag"] = { ["label"] = "Dil:" },
    ["gan-hans"] = { ["label"] = "语言:" },
    ["gan-hant"] = { ["label"] = "語言:" },
    ["gl"] = { ["label"] = "Lingua:" },
    ["gn"] = { ["label"] = "Ñe'ẽ:" },
    ["got"] = { ["label"] = "Razda:" },
    ["grc"] = { ["label"] = "Γλῶσσα:" },
    ["gsw"] = { ["label"] = "Sproch:" },
    ["gu"] = { ["label"] = "ભાષા:" },
    ["gv"] = { ["label"] = "Çhengey:" },
    ["hak"] = { ["label"] = "Ngî-ngièn:" },
    ["haw"] = { ["label"] = "Kou 'ōlelo:" },
    ["he"] = { ["label"] = "שפה:" },
    ["hi"] = { ["label"] = "भाषा:" },
    ["hif-latn"] = { ["label"] = "Bhasa:" },
    ["hr"] = { ["label"] = "Jezik:" },
    ["hsb"] = { ["label"] = "Rěč:" },
    ["ht"] = { ["label"] = "Lang:" },
    ["hu"] = { ["label"] = "Nyelv:" },
    ["hy"] = { ["label"] = "Լեզու." },
    ["ia"] = { ["label"] = "Lingua:" },
    ["id"] = { ["label"] = "Bahasa:" },
    ["ie"] = { ["label"] = "Lingue:" },
    ["ilo"] = { ["label"] = "Lengguahe:" },
    ["io"] = { ["label"] = "Linguo:" },
    ["is"] = { ["label"] = "Tungumál:" },
    ["it"] = { ["label"] = "Lingua:" },
    ["ja"] = { ["label"] = "言語:" },
    ["jv"] = { ["label"] = "Basa:" },
    ["ka"] = { ["label"] = "ენა:" },
    ["kaa"] = { ["label"] = "Til:" },
    ["kab"] = { ["label"] = "Tutlayt:" },
    ["kg"] = { ["label"] = "Ndinga:" },
    ["kiu"] = { ["label"] = "Zon:" },
    ["kk-arab"] = { ["label"] = ":ٴتىل" },
    ["kk-cyrl"] = { ["label"] = "Тіл:" },
    ["kk-latn"] = { ["label"] = "Til:" },
    ["km"] = { ["label"] = "ភាសា៖" },
    ["kn"] = { ["label"] = "ಭಾಷೆ:" },
    ["ko"] = { ["label"] = "언어:" },
    ["ksh"] = { ["label"] = "Sproch:" },
    ["ku-latn"] = { ["label"] = "Ziman:" },
    ["kv"] = { ["label"] = "Кыв:" },
    ["kw"] = { ["label"] = "Yeth:" },
    ["ky"] = { ["label"] = "Тил:" },
    ["la"] = { ["label"] = "Lingua:" },
    ["lb"] = { ["label"] = "Sprooch:" },
    ["lfn"] = { ["label"] = "Lingua:" },
    ["li"] = { ["label"] = "Taol:" },
    ["lij"] = { ["label"] = "Lengoa:" },
    ["loz"] = { ["label"] = "Zwa Siselect:" },
    ["lt"] = { ["label"] = "Kalba:" },
    ["lv"] = { ["label"] = "Valoda:" },
    ["lzh"] = { ["label"] = "語:" },
    ["mdf"] = { ["label"] = "Кяль:" },
    ["mg"] = { ["label"] = "fiteny:" },
    ["mhr"] = { ["label"] = "Йылме:" },
    ["min"] = { ["label"] = "Bahaso:" },
    ["mk"] = { ["label"] = "Јазик:" },
    ["ml"] = { ["label"] = "ഭാഷ:" },
    ["mn"] = { ["label"] = "Хэл:" },
    ["mr"] = { ["label"] = "भाषा:" },
    ["ms"] = { ["label"] = "Bahasa:" },
    ["mt"] = { ["label"] = "Lingwa:" },
    ["mwl"] = { ["label"] = "Lhéngua:" },
    ["my"] = { ["label"] = "ဘာသာ:" },
    ["myv"] = { ["label"] = "Кель:" },
    ["nah"] = { ["label"] = "Tlahtōlli:" },
    ["nap"] = { ["label"] = "Lengua:" },
    ["nds"] = { ["label"] = "Spraak:" },
    ["nds-nl"] = { ["label"] = "Taal:" },
    ["ne"] = { ["label"] = "भाषा:" },
    ["new"] = { ["label"] = "भाषा:" },
    ["nl"] = { ["label"] = "Taal:" },
    ["nn"] = { ["label"] = "Språk:" },
    ["no"] = { ["label"] = "Språk:" },
    ["nso"] = { ["label"] = "Polelo:" },
    ["oc"] = { ["label"] = "Lenga:" },
    ["os"] = { ["label"] = "Æвзаг:" },
    ["pa"] = { ["label"] = "ਭਾਸ਼ਾ:" },
    ["pam"] = { ["label"] = "Amanu:" },
    ["pdc"] = { ["label"] = "Schprooch:" },
    ["pdt"] = { ["label"] = "Sproak:" },
    ["pl"] = { ["label"] = "Język:" },
    ["pms"] = { ["label"] = "Lenga:" },
    ["pnb"] = { ["label"] = "بولی:" },
    ["pnt"] = { ["label"] = "Γλώσσαν:" },
    ["prg"] = { ["label"] = "Bilā:" },
    ["ps"] = { ["label"] = "ژبه:" },
    ["pt|pt-br"] = { ["label"] = "Língua:" },
    ["qu"] = { ["label"] = "Rimay:" },
    ["rm"] = { ["label"] = "Lingua:" },
    ["ro"] = { ["label"] = "Limba:" },
    ["roa-tara"] = { ["label"] = "Lénga:" },
    ["ru"] = { ["label"] = "Язык:" },
    ["sa"] = { ["label"] = "भाषा:" },
    ["sah"] = { ["label"] = "Омугун тыла:" },
    ["sc"] = { ["label"] = "Limba:" },
    ["scn"] = { ["label"] = "Lingua:" },
    ["sco"] = { ["label"] = "Leid:" },
    ["sdc"] = { ["label"] = "Linga:" },
    ["se"] = { ["label"] = "Giella:" },
    ["sei"] = { ["label"] = "Itom:" },
    ["sh"] = { ["label"] = "Jezik:" },
    ["shi"] = { ["label"] = "tutlayt:" },
    ["si"] = { ["label"] = "භාෂාව:" },
    ["sk"] = { ["label"] = "Jazyk:" },
    ["sl"] = { ["label"] = "Jezik:" },
    ["sli"] = { ["label"] = "Sproache:" },
    ["so"] = { ["label"] = "Luqada:" },
    ["sq"] = { ["label"] = "Gjuha:" },
    ["sr-ec"] = { ["label"] = "Језик:" },
    ["sr-el"] = { ["label"] = "Jezik:" },
    ["srn"] = { ["label"] = "Tongo:" },
    ["ss"] = { ["label"] = "Lúlwîmi:" },
    ["stq"] = { ["label"] = "Sproake:" },
    ["su"] = { ["label"] = "Basa:" },
    ["sv"] = { ["label"] = "Språk:" },
    ["sw"] = { ["label"] = "Lugha:" },
    ["szl"] = { ["label"] = "Godka:" },
    ["ta"] = { ["label"] = "மொழி:" },
    ["te"] = { ["label"] = "భాష:" },
    ["tet"] = { ["label"] = "Lian:" },
    ["tg-cyrl"] = { ["label"] = "Забон:" },
    ["th"] = { ["label"] = "ภาษา:" },
    ["ti"] = { ["label"] = "ቋንቋ:" },
    ["tk"] = { ["label"] = "Dil:" },
    ["tl"] = { ["label"] = "Wika:" },
    ["to"] = { ["label"] = "Lea:" },
    ["tr"] = { ["label"] = "Dil:" },
    ["tt-cyrl"] = { ["label"] = "Тел:" },
    ["tyv"] = { ["label"] = "Дыл:" },
    ["ug-arab"] = { ["label"] = ":تىل" },
    ["ug-latn"] = { ["label"] = "Til:" },
    ["uk"] = { ["label"] = "Мова:" },
    ["vec"] = { ["label"] = "Lengua:" },
    ["vep"] = { ["label"] = "Kel’:" },
    ["vi"] = { ["label"] = "Ngôn ngữ:" },
    ["vo"] = { ["label"] = "Pük:" },
    ["vro"] = { ["label"] = "Kiil:" },
    ["wa"] = { ["label"] = "Lingaedje:" },
    ["war"] = { ["label"] = "Yinaknan:" },
    ["wo"] = { ["label"] = "Làkk:" },
    ["wuu"] = { ["label"] = "语言:" },
    ["xal"] = { ["label"] = "Келн:" },
    ["xh"] = { ["label"] = "Ulwimi:" },
    ["xmf"] = { ["label"] = "ნინა:" },
    ["yi"] = { ["label"] = "שפראך:" },
    ["yo"] = { ["label"] = "Èdè:" },
    ["yue"] = { ["label"] = "語言:" },
    ["zea"] = { ["label"] = "Taele:" },
    ["zh-hans"] = { ["label"] = "语言:" },
    ["zh-hant"] = { ["label"] = "語言:" },
    ["zu"] = { ["label"] = "Ulimi:" },
}
local LANG_CONFIG_DEFAULT = { ["label"] = "Language:" }
local LANG_LIST = { "en", "af", "ar", "ast", "az", "bcc", "bg", "br", "bn", "bs", "ca", "cs", "da", "de", "diq", "el", "eo", "es", "fa", "fi", "fr", "gl", "gu", "he", "hi", "hu", "hy", "id", "io", "it", "ja", "ka", "kk", "km", "ko", "ksh", "kw", "la", "min", "mk", "ml", "mr", "ms", "nl", "no", "oc", "or", "pl", "pt", "pt-br", "ro", "ru", "si", "sk", "sl", "so", "sq", "sr", "sv", "ta", "th", "tr", "uk", "vi", "yi", "yue", "zh", "zh-hans", "zh-hant", "zh-tw" }

-- Main process
function p.main(frame)
    local args = getArgs(frame)

    local default_lang = frame:preprocess('{{CONTENTLANGUAGE}}')
    local title_full = frame:preprocess('{{FULLPAGENAME}}')
    local title_parts = split(title_full, '/', true)
    local current_lang = inArray(title_parts[#title_parts], LANG_CONFIG) and title_parts[#title_parts] or default_lang

    local function getLangSuffix(lc)
        if lc == default_lang then
            return ''
        elseif inArray(lc, LANG_CONFIG) then
            return '/' .. lc
        end
        return nil
    end

    local current_suffix = getLangSuffix(current_lang)

    local OPTS = {
        title = args[1] or '',
        title_full = title_full,
        default_lang = default_lang,
        current_lang = current_lang,
        current_suffix = current_suffix,
        header_link = frame:preprocess(
            '{{#ifexist:Elwiki:Elwiki_Languages' .. current_suffix ..
            '|Elwiki:Elwiki_Languages' .. current_suffix ..
            '|Elwiki:Elwiki_Langauges}}'
        ),
        header_title = (LANG_CONFIG[lang_code] or LANG_CONFIG_DEFAULT)['label'];
    }

    local function createSuffixedPage(page, lc)
        local suffix = getLangSuffix(lc)
        if suffix ~= nil then
            return page .. suffix
        end
        return ''
    end

    local function createTitle()
        return link(OPTS.header_link, OPTS.header_title, "'''", "'''", true)
    end

    local function createLang(lc)
        local lang_page = createSuffixedPage(OPTS.title, lc)
        local lang_page_exist = frame:preprocess('{{#ifexist:' .. lang_page .. '|true|false}}') == 'true'

        if lang_page_exist then
            local lang_is_current = lc == OPTS.current_lang
            local lang_text = frame:preprocess('{{#language:' .. lc .. '}}')
            local lang_link = link(
                lang_page,
                lang_text,
                ('<li lang="' .. lc .. '">') .. (lang_is_current and "'''" or ''),
                (lang_is_current and "'''" or '') .. ('</li>'),
                not lang_is_current
            )
            return lang_link
        end

        return ''
    end

    local lang_full_text = ''
    for _, langCode in ipairs(LANG_LIST) do
        lang_full_text = lang_full_text .. createLang(langCode)
    end

    return frame:expandTemplate {
        title = 'Nmbox2',
        args = {
            header = createTitle(),
            text = lang_full_text,
        }
    }
end

return p
-- pyend