Modul:translations

Vun Wiktionary

This module is used for the translation templates {{t}}, {{t+}} {{t-}}, {{}}. It contains a single function which is invoked by these templates. See their documentation for more information.


local m_links = require("Modul:links")

local export = {}

local interwiki_langs = {
    ["nan"] = "zh-min-nan",
    ["yue"] = "zh-yue",
    ["cmn"] = "zh",
    ["nb"] = "no",
    ["rup"] = "roa-rup",
    ["kmr"] = "ku",
    ["nds-de"] = "nds",
    ["nds-nl"] = "nds" }

-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
    local args = frame:getParent().args
    local interwiki = frame.args["interwiki"]
    
    NAMESPACE = mw.title.getCurrentTitle().nsText
    local categories = {}
    
    local lang = args[1] or (NAMESPACE == "Vörlaag" and "und") or error("Language code has not been specified. Please pass parameter 1 to the template.")
    local sc = args["sc"] or ""; if sc == "" then sc = nil end
    lang = require("Modul:languages").getByCode(lang) or error("The language code \"" .. lang .. "\" is not valid.")
    sc = (sc and (require("Modul:scripts").getByCode(sc) or error("The script code \"" .. sc .. "\" is not valid.")) or nil)
    
    local term = args[2] or (NAMESPACE == "Vörlaag" and "term" or ""); if term == "" then term = nil end
    local alt = args["alt"]; if alt == "" then alt = nil end
    
    local tr = args["tr"]; if tr == "" then tr = nil end
    
    -- Gender and number
    -- Iterate over all numbered parameters starting from 3, until one is empty.
    local genders = {}
    local i = 3
    local g = args[i] or ""
    
    while g ~= "" do
        table.insert(genders, g)
        i = i + 1
        g = args[i] or ""
    end
    
    -- Don't show the interwiki link if there is nothing to link to.
    if term then
    	local wmlangs = {}

    	if interwiki_langs[lang:getCode()] then
    		wmlangs = {require("Module:wikimedia languages").getByCode(interwiki_langs[lang:getCode()])}
    	else
    		wmlangs = lang:getWikimediaLanguages()
    	end

    	-- Don't show the interwiki link if the language is not recognised by MediaWiki
    	-- or if the term contains links (for SOP translations)
    	if term:find("[[", nil, true) or #wmlangs == 0 then
        	interwiki = false
    	end
    	
    	if interwiki then
        	interwiki = "<span class=\"" .. interwiki .. "\">&nbsp;[[:"
        	.. (interwiki_langs[lang:getCode()] or lang:getCode()) .. ":"
        	.. lang:makeEntryName(term)
        	.. "|(" .. (interwiki_langs[lang:getCode()] or lang:getCode()) .. ")]]</span>"
    	end
    end
    
    return m_links.full_link(term, alt, lang, sc, nil, nil, {interwiki = interwiki, tr = tr, genders = genders})
end

return export