Moduł:Lang

 Dokumentacja modułu[zobacz] [edytuj] [historia] • [odśwież] • § podstrony

Moduł techniczny do obsługi kodów językowych.

istnieje

Funkcja sprawdzająca, czy dla podanego kodu języka istnieje wpis w module danych z danymi opisowymi. Jeśli dane istnieją, to wynikiem jest rozpoznany kod języka, w przeciwnym razie funkcja zwraca pusty tekst.

parametry

Pole Do czego służy? Jak wypełnić?
1 Kod języka Np. en lub pl.

przykłady

wywołanie efekt
{{#if:{{#invoke:lang|istnieje|en}}|tak|nie}} tak
{{#if:{{#invoke:lang|istnieje}}|tak|nie}} nie
{{#if:{{#invoke:lang|istnieje|xxxx}}|tak|nie}} nie
{{#invoke:lang|istnieje|pl}} pl
{{#invoke:lang|istnieje|pl-PL}} pl
{{#invoke:lang|istnieje|uuuu}}
{{#if:{{#invoke:lang|istnieje|}}|tak|nie}} nie
{{#if:{{#invoke:lang|istnieje}}|tak|nie}} nie
{{#ifeq:{{#invoke:lang|istnieje|en}}|en|tak|nie}} tak
{{#ifeq:{{#invoke:lang|istnieje|xxx}}|xxx|tak|nie}} nie
{{#ifeq:{{#invoke:lang|istnieje|}}||tak|nie}} tak

kursywa

Funkcja zwracająca wikikod kursywy (''), jeśli język o podanym kodzie zapisywany jest łacińskim alfabetem. Wspiera ona działanie szablonu {{w języku}} oraz funkcji {{#invoke:Wikidane|P}} dla cech, których typ to Tekst jednojęzyczny.

parametry

Pole Do czego służy? Jak wypełnić?
1 Kod języka Np. en lub ru.

przykłady

wywołanie efekt
i{{#invoke:lang|kursywa|en}}i{{#invoke:lang|kursywa|en}} ii
i{{#invoke:lang|kursywa|ru}}i{{#invoke:lang|kursywa|ru}} ii
{{#invoke:lang|kursywa|en}}{{j|en|Hello}}{{#invoke:lang|kursywa|en}} Hello
{{#invoke:lang|kursywa|ru}}{{j|ru|привет}}{{#invoke:lang|kursywa|ru}} привет

hasło, skrót, mianownik, dopełniacz, miejscownik

Funkcje zwracające opis stowarzyszony z podanym kodem języka odpowiednio:

hasło
Zwraca nazwę artykułu w Wikipedii, który opisuje język o zadanym kodzie.
skrót
Skrót nazwy języka, jeśli istnieje, w przeciwnym razie mianownik nazwy języka.
mianownik
Nazwa języka w mianowniku.
dopełniacz
Nazwa języka w dopełniaczu.
miejscownik
Nazwa języka w miejscowniku.

Funkcja wymaga prawidłowego kodu języka, tj. niepustego wyniku z funkcji istnieje, w przeciwnym razie generuje błąd skryptu.

parametry

Pole Do czego służy? Jak wypełnić?
1 Kod języka Np. en lub pl.

przykłady

wywołanie \ X en pl aa pl_PL
[[{{#invoke:lang|hasło|X}}]] język angielski język polski język afar język polski
{{#invoke:lang|skrót|X}} ang. pol. afar pol.
{{#invoke:lang|mianownik|X}} angielski polski afar polski
{{#invoke:lang|dopełniacz|X}} angielskiego polskiego afar polskiego
{{#invoke:lang|miejscownik|X}} angielskim polskim afar polskim

dopełniacz?, miejscownik?

Funkcje wspierające {{język infobox}} i zwracające opis stowarzyszony z podanym kodem języka odpowiednio:

dopełniacz?
Nazwa języka w dopełniaczu.
miejscownik?
Nazwa języka w miejscowniku.

Jeśli kod języka nie jest rozpoznawalny przez funkcje, wynikiem jest pusty tekst.

parametry

Pole Do czego służy? Jak wypełnić?
1 Kod języka Np. en lub pl.

przykłady

wywołanie \ X en pl aa pl_PL zzzz
{{#invoke:lang|dopełniacz?|X}} angielskiego polskiego afar polskiego
{{#invoke:lang|miejscownik?|X}} angielskim polskim afar polskim

lang

Funkcja konwertująca kody języka zgodnie z definicją w szablonie {{lang}}. Pomija w wyświetlaniu kod języka polskiego.

parametry

Pole Do czego służy? Jak wypełnić?
1..N Kod języka Np. en lub pl.

przykłady

wywołanie efekt
{{#invoke:lang|lang|en}} (ang.)
{{#invoke:lang|lang|X}} (Błąd! Nieznany kod języka: X. Sprawdź listę kodów.)
{{#invoke:lang|lang|}} (Błąd! Brak kodu języka.)
{{#invoke:lang|lang}} Błąd! Brak kodu języka.
{{#invoke:lang|lang|en|pl|ru|it|ee|roa-rup|zh-min-nan|be-x-old|tum|de|et|hak|xal|ilo|id|ia|ie}} (ang. • pol. • ros. • wł. • ewe • arum. • minnański • biał. (tar.) • tumbuka • niem. • est. • hakka • kałm. • ilokański • indonez. • interlingua • occidental)

język

Funkcja konwertująca kody języka zgodnie z definicją w szablonie {{lang}}. Pomija w wyświetlaniu kod języka polskiego.

parametry

Pole Do czego służy? Jak wypełnić?
1 Kody języków oddzielone odstępami Np. en lub en pl de.

przykłady

wywołanie efekt
{{#invoke:lang|język|en}} (ang.)
{{#invoke:lang|język|X}} (Błąd! Nieznany kod języka: X. Sprawdź listę kodów.)
{{#invoke:lang|język|}} (Błąd! Brak kodu języka.)
{{#invoke:lang|język}} Błąd! Brak kodu języka.
{{#invoke:lang|język|en pl ru it ee roa-rup zh-min-nan be-x-old tum de et hak xal ilo id ia ie}} (ang. • pol. • ros. • wł. • ewe • arum. • minnański • biał. (tar.) • tumbuka • niem. • est. • hakka • kałm. • ilokański • indonez. • interlingua • occidental)

Błędy

Błędy należy zgłaszać na stronie Wikipedia:Kawiarenka/Kwestie techniczne.

Zobacz też

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, vcode = string.match(code, "%s*([a-zA-Z]+)%-([^%s]+)%s*$")
	if not scode then
		scode, vcode = string.match(code, "%s*([a-zA-Z]+)_([^%s]+)%s*$")
	end
	
	if scode then
		--mw.log('kod "'..code..'" został rozdzielony na "'..scode..'" i wariant "'..vcode..'"')
		lang = data[scode]
		if not lang then
			--mw.log('kod "'..scode..'" został zamieniony na "'..string.lower(scode)..'"')
			scode = string.lower(scode)
			lang = data[scode]
		end
		
		if lang then
			-- test variant
			if lang.warianty then
				local lvcode = string.lower(vcode)
				for k, v in pairs(lang.warianty) do
					if (type(k) == "number") and (type(v) == "string") and (lvcode == string.lower(v)) then
						--mw.log('kod "'..code..'" w formie kanonicznej "'..scode..'-'..v..'"')
						return lang, scode, scode.."-"..v
					elseif (type(k) == "string") and (type(v) == "table") and (lvcode == string.lower(k)) then
						--mw.log('zindywizualizowany kod "'..code..'" w formie kanonicznej "'..scode..'-'..k..'"')
						local fields = { "hasło", "mianownik", "dopełniacz", "miejscownik", "skrót" }
						local vlang = {}
						for _, f in ipairs(fields) do
							vlang[f] = v[f] or lang[f]
						end
						return vlang, scode, scode.."-"..k
					end
				end
			end
		
			--mw.log('kod "'..code..'" z nieznanym wariantem')
			return lang, scode
		end
	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 langCode = frame.args[1]
    local languageData, code, _ = langData(langCode)
    if langCode and (langCode ~= code) and string.match(langCode, "^%a+%-[Ll][Aa][Tt][Nn]$") or string.match(langCode, "^%a+%-[Ll][Aa][Tt][Nn]%-") then
    	-- Latn script
    	return "''"
    end
    
    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

lang["dopełniacz?"] = function(frame)
    local languageData, _, _ = langData(frame.args[1])
    return languageData and languageData['dopełniacz'] or nil
end

function lang.miejscownik(frame)
    local languageData, _, _ = langData(frame.args[1])
    return languageData['miejscownik']
end

lang["miejscownik?"] = function(frame)
    local languageData, _, _ = langData(frame.args[1])
    return languageData and languageData['miejscownik'] or nil
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 and frame:getParent() or nil
        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 [[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,
        ba = true
    }
    
    local formatLanguageItem = function(langCode, languageData, alt)
    	local class = alt and "lang-link-warning" or "" 
    	if #class > 0 then
    		class = 'class="'..class..'"'
    	end
        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("<abbr %s title=\"Treść w języku %s (%s)\">%s</abbr>", class, languageData['miejscownik'], nativeName, skrot)
        else
            return string.format("<abbr %s title=\"Treść w języku %s\">%s</abbr>", class, languageData['miejscownik'], skrot)
        end
    end

	local parsedLanguages = {}
    local countGood = 0
    
    local formatItem = function(languageCode)
	    local languageData, langCode, langTag = langData(languageCode)
	    local altFormat = false
	    if langCode and (languageCode ~= langCode) then
	    	altFormat = languageCode ~= langTag
	    	modified = modified or altFormat
	    end

    	if languageData then
    		if warnings[langCode] then
                warning = true
            end
 
 			local item = formatLanguageItem(langCode, languageData, altFormat)
 			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ź [[Moduł:Lang/data|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 class="lang-list')
	    if (#items == 1) and parsedLanguages.pl then
	    	table.insert(result, " tylko-pl")
	    end
	    
	    table.insert(result, '">(')
	    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, "[[Kategoria:Częste błędy kodu w szablonie lang]]")
        end
        if invalid then
            table.insert(result, "[[Kategoria:Nierozpoznany kod języka w szablonie lang]]")
        end
        if hiddenpl then
            table.insert(result, "[[Kategoria:Szablon lang z ukrytym językiem polskim]]")
        end
        if modified or duplicated then
            table.insert(result, "[[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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Kembali kehalaman sebelumnya