FANDOM


local lang = {}
 
local function langData(code)
	if not code or (#code == 0) then
		-- brak kodu języka
		mw.log("Pusty kod języka: "..code);
		return
	end
 
	local data = mw.loadData( 'Module:lang/data' )
 
	-- bezbłędny kod
	local lang = data[code]
	if lang then
		return lang, code
	end
 
	-- może kod jest podany dużymi literami lub ma spacje przed i po
	local lcode = mw.text.trim(string.lower(code)) -- dobre kody języka są tylko w ASCII
	lang = data[lcode]
	if lang then
		mw.log('kod "'..code..'" został zamieniony na "'..lcode..'"')
		return lang, lcode
	end
 
	-- może kod jest podany z variantem
	local scode = string.match(lcode, "^([a-z]+)[_-]")
	lang = data[scode]
	if scode then
		mw.log('kod "'..code..'" został zinterpretowany jako "'..scode..'"')
		return lang, scode
	end
 
	-- poddaje się
	mw.log('Nieznany kod języka: "'..code..'"');
	return false, code
end
 
function lang.istnieje(frame)
    local languageData, code = langData(frame.args[1])
    return languageData and code or nil
end
 
function lang.kursywa(frame)
    local languageData, code = langData(frame.args[1])
    return (languageData and (languageData.kursywa ~= false)) and "''" or ""
end
 
lang["hasło"] = function(frame)
    local languageData, _ = langData(frame.args[1])
    return languageData['hasło']
end
 
lang["skrót"] = function(frame)
    local languageData, _ = langData(frame.args[1])
    return languageData['skrót'] or languageData['mianownik']
end
 
function lang.mianownik(frame)
    local languageData, _ = langData(frame.args[1])
    return languageData['mianownik']
end
 
lang["dopełniacz"] = function(frame)
    local languageData, _ = langData(frame.args[1])
    return languageData['dopełniacz']
end
 
function lang.miejscownik(frame)
    local languageData, _ = langData(frame.args[1])
    return languageData['miejscownik']
end
 
function list(frame, multi, showPL)
    -- konwersja kodów języków na kod wiki text opisujący kody
    local items = {}       -- tabela na skonwertowane kody
 
    -- flagi informujące, że na liście znajdują się podejrzane kody
    local invalid = false  -- nieznany kod języka
    local warning = false  -- język z listy częstych błędów
    local hiddenpl = false -- ukryty język polski
    local modified = false -- kod języka z automatyczną korektą
    local duplicated = false -- wielokrotnie podany (prawie) taki sam kod języka
 
    local args = frame.args;
    if not args[1] then
        -- brak argumentów sugeruje wywołanie z szablonu
        local parent = frame:getParent()
        if parent then
            args = parent.args
        end
    end
 
    if not args[1] then
        return "<span style=\"color:red\">'''Błąd! Brak kodu języka.'''</span>"
    end
 
    -- języki wpadające do [[wikipedia:pl:Kategoria:Częste błędy kodu w szablonie lang]]
    local warnings = {
    	ee = true,
    	am = true,
    	an = true,
    	ang = true,
    	ng = true,
    	kr = true,
    	se = true,
    	si = true
    }
 
    local formatLanguageItem = function(langCode, languageData)
        local skrot = languageData['skrót'] or languageData['mianownik']
        local nativeName = mw.language.fetchLanguageName(langCode)
        if nativeName and #nativeName > 0 and langCode ~= "pl" then
            return string.format("[[wikipedia:pl:%s|<span style=\"color:#005\" title=\"Treść w języku %s (%s)\">%s</span>]]", languageData['hasło'], languageData['miejscownik'], nativeName, skrot)
        else
            return string.format("[[wikipedia:pl:%s|<span style=\"color:#005\" title=\"Treść w języku %s\">%s</span>]]", languageData['hasło'],  languageData['miejscownik'], skrot)
        end
    end
 
	local parsedLanguages = {}
    local countGood = 0
 
    local formatItem = function(languageCode)
	    local languageData, langCode = langData(languageCode)
	    if langCode and (languageCode ~= langCode) then
	    	modified = true
	    end
 
    	if languageData then
    		if warnings[langCode] then
                warning = true
            end
 
 			local item = formatLanguageItem(langCode, languageData)
 			if parsedLanguages[langCode] then
 				duplicated = true
 				mw.log("Powtórne przywołanie języka ("..languageCode..")")
 			else
 				parsedLanguages[langCode] = item;
				if (langCode == "pl") and not showPL then
					-- pomiń język polski
					hiddenpl = true
					mw.log("Ukrywam język polski")
				else
	 				table.insert(items, item)
	 				countGood = countGood + 1
		 		end
 			end
        elseif not langCode or #langCode == 0 then
            if #items == 0 then
                -- pierwszy kod nie może być pusty, reszta może, bo jest przekazywana jako pusta w szablonach cytowania
                invalid = true
                table.insert(items, "<span style=\"color:red\">'''Błąd! Brak kodu języka.'''</span>")
            end
        else
            invalid = true
            local item = string.format("<span style=\"color:red\">'''Błąd! Nieznany kod języka: %s. Sprawdź [[wikipedia:pl:Pomoc:Interwiki|listę kodów]].'''</span>", languageCode)
 			if parsedLanguages[languageCode] then
 				duplicated = true
 				mw.log("Powtórne przywołanie języka ("..languageCode..")")
 			else
 				parsedLanguages[languageCode] = item;
 				table.insert(items, item)
 			end
        end
    end
 
    if args[2] or multi then
        -- wiele argumentów sugeruje przekazywnie każdego kodu języka w oddzielnych argumentach
        for i, v in ipairs(args) do
            if #v > 0 then
                formatItem(v)
            end
        end
    else
        -- jeden argument pozwala także wysłać wszystkie kody oddzielone spacją
        for languageCode in string.gmatch(args[1], "%S+") do
            formatItem(languageCode)
        end
    end
 
    if #items == 0 then
    	if hiddenpl then
    		-- podano tylko język polski, który jest ukryty
    	else
	        -- pusta lista kodów
	        invalid = true
	        table.insert(items, "<span style=\"color:red\">'''Błąd! Brak kodu języka.'''</span>")
        end
    end
 
    -- ostateczne formatowanie wyniku
    local result = {}
 
    if #items > 0 then
    	if (countGood > 0) and hiddenpl then
    		-- przywracam język polski jeśli lista zawiera więcej niż jeden język 
    		table.insert(items, 1, parsedLanguages.pl)
    		hiddenpl = false
    	end
 
	    table.insert(result, "<span style=\"color:#009\">(")
	    table.insert(result, table.concat(items, "&nbsp;•&nbsp;"))
	    table.insert(result, ")</span>")
	end
 
    if mw.title.getCurrentTitle().namespace == 0 then
        if warning then
            table.insert(result, "[[wikipedia:pl:Kategoria:Częste błędy kodu w szablonie lang]]")
        end
        if invalid then
            table.insert(result, "[[wikipedia:pl:Kategoria:Nierozpoznany kod języka w szablonie lang]]")
        end
        if hiddenpl then
            table.insert(result, "[[wikipedia:pl:Kategoria:Szablon lang z ukrytym językiem polskim]]")
        end
        if modified or duplicated then
            table.insert(result, "[[wikipedia:pl:Kategoria:Szablon lang z kodem języka wymagającym poprawki]]")
        end
    end
 
    return table.concat(result, "")
end
 
function lang.lang(frame)
	return list(frame, true, true)
end
 
lang["język"] = function(frame)
	return list(frame, false, true)
end
 
return lang

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Więcej z Fandomu

Losowa wiki