Module:Sandbox/CXuesong/Translations

local translations = { ["Warrior Cats"] = {       de = "Warrior Cats", fi = "Soturikissat", fr = "La Guerre des Clans", hu = "Harcosok Törzse", ja = "ウォーリアーズ", ko = "고양이 전사들", lt = "Klanų Kariai", nl = "Warrior Cats", no = "Kattekrigerne", pl = "Wojownicy", ru = "Коты-воители", cz = "Divoké kočky(first book) Válečníci(other books)", es = "Los Gatos Guerreros", zh_cn = "猫武士", zh_tw = "貓戰士" },   cat = {       de = "Katze", fi = "kissa", fr = "chat", hu = "macska", ja = "猫", ko = "고양이", lt = "katinas", nl = "kat", no = "katt", pl = "kot", ru = "кот (tom-cat)/кошка (she-cat)", cz = "kocour(tom-cat) kočka(she-cat)", es = "gato", zh_cn = "猫", zh_tw = "貓" },   leader = {       de = "Anführer", fi = "päällikkö", fr = "chef", hu = "vezér", ja = "族長", ko = "지도자", lt = "vadas", nl = "leider", no = "leder", pl = "przywódca", ru = "предводитель (tom-cat)/предводительница (she-cat)", cz = "velitel klanu", es = "líder", zh_cn = "族长", zh_tw = "族長" },   Leafpool = {       de = "Blattsee", fi = "Lehtilampi", fr = "Feuille de Lune", hu = nil, ja = "リーフプール", ko = nil, lt = nil, nl = "Loofpoel", no = "Løvtjern", pl = nil, ru = "Листвичка", cz = nil, es = "Hojarasca Acuática", zh_cn = "叶池", zh_tw = nil },   Bluestar = {       de = "Blaustern", fi = "Sinitähti", fr = "Étoile Bleue", hu = "Kékcsillag", ja = "ブルスター", ko = nil, lt = nil, nl = "Blauwster", no = "Blåstjerne", pl = nil, ru = "Синяя Звезда", cz = nil, es = "Estrella Azul", zh_cn = "蓝星", zh_tw = nil }, }

-- known languages (except for English)

local languages = { cz = "Czech", de = "German", es = "Spanish", fi = "Finnish", fr = "French", gr = "Greek", hu = "Hungarian", hr = "Croatian", it = "Italian", ja = "Japanese", ko = "Korean", lt = "Lithuanian", nl = "Dutch", no = "Norwegian", pl = "Polish", pt = "Portuguese (Brazilian)", ro = "Romanian", ru = "Russian", si = "Slovenian", sk = "Slovakian", tr = "Turkish", vi = "Vietnamese", zh_cn = "Chinese Simplified", zh_tw = "Chinese Traditional", }

local ENGLISH_TAG = "en" local ENGLISH = "English"

function orderedKeys(dict) local keys = {} local result = {} for k, v in pairs(dict) do       table.insert(keys, k)    end table.sort(keys) for i, k in ipairs(keys) do       table.insert(result, k)    end return result end

function NZ(value, valueifNil) if value == nil then return valueifNil end return value end

-- the module local p = { }

function p.getLanguageName(frame) return languages(frame.args[1]) end

-- Returns the translation of specific keyword (English) -- with the provided language tag, -- or nil, if no such translation is found. function p.translate(frame) local term = frame.args[1] local language = frame.args[2] -- Bypass English. if language == ENGLISH_TAG then return key end return translations[key][language] end

-- Generates a full glossary function p.glossaryTable local colhdr = mw.html.create("table") :attr("class", "wikitable") :css("float", "left") :css("margin", "0") :css("margin-right", "-1px") local body = mw.html.create("div") :css("overflow-x", "auto") :css("white-space", "nowrap") :tag("table") :attr("class", "wikitable") :css("margin", "0") :tag("tr") colhdr:tag("tr"):tag("th"):wikitext(ENGLISH) local langs = orderedKeys(languages) for i, langTag in ipairs(langs) do       body:tag("th"):wikitext(languages[langTag]) end body = body:done; local transKeys = orderedKeys(translations) for i, key in ipairs(transKeys) do       colhdr:tag("tr"):tag("th"):wikitext(key) body = body:tag("tr") local trans = translations[key] for i, langTag in ipairs(langs) do           t = trans[langTag] if t == nil then t = "-" end body:tag("td"):wikitext(t) end body = body:done --print(key) end body = body:allDone local div = mw.html.create("div") :node(colhdr) :node(body) return tostring(div) end

-- Generates a table of translations of a specific English term. -- Returns nil if no such term exists in the dictionary. function p.translationTable(frame) local term = frame.args[1] local trans = translations[term] if trans == nil then return nil end local body = mw.html.create("table") :attr("class", "wikitable") local transKeys = orderedKeys(trans) body:tag("tr") :tag("th") :wikitext(ENGLISH) :done :tag("th") :wikitext(term) :done for i, key in ipairs(transKeys) do       body:tag("tr") :tag("th") :wikitext(NZ(languages[key], key)) :done :tag("td") :wikitext(NZ(trans[key], "-")) :done end return tostring(body) end --print(p.glossary)

return p