Moduł:Lang

Z Wikipodróży

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

istnieje[edytuj]

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

parametry[edytuj]

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

przykłady[edytuj]

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|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[edytuj]

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}}.

parametry[edytuj]

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

przykłady[edytuj]

wywołanie efekt
i{{#invoke:lang|kursywa|en}}i ii
i{{#invoke:lang|kursywa|ru}}i ii

hasło, skrót, mianownik, dopełniacz, miejscownik[edytuj]

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[edytuj]

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

przykłady[edytuj]

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

lang[edytuj]

Funkcja konwertująca kody języka zgodnie z definicją w szablonie {{lang}}.

parametry[edytuj]

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

przykłady[edytuj]

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[edytuj]

Funkcja konwertująca kody języka zgodnie z definicją w szablonie {{lang}}.

parametry[edytuj]

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[edytuj]

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[edytuj]

Błędy należy zgłaszać na stronie Wikipodróże:Pub podróżnika/Kwestie techniczne.



Na stronie Moduł:Lang wykorzystano treści ze strony Moduł:Lang w polskiej Wikipedii (link do wersji).
Jej autorzy wymienieni są w historii edycji. Prawa autorskie: na licencji Creative Commons CC-BY-SA.



local lang = {}

local data = mw.loadData( 'Module:lang/data' )

function lang.istnieje(frame)
    local languageCode = frame.args[1]
    if data[languageCode] then
        return languageCode
    else
        return nil
    end
end

function lang.kursywa(frame)
    local languageCode = frame.args[1]
    if languageCode then
	    local languageData = data[languageCode]
	    if languageData and (languageData.kursywa == false) then
	    	return ""
	    end
    end

	return "''"
end

lang["hasło"] = function(frame)
    local languageCode = frame.args[1]
    assert(languageCode, "Brak kodu języka")
    local languageData = data[languageCode]
    assert(languageData, "Nieznany kod języka")
    return languageData['hasło']
end
 
lang["skrót"] = function(frame)
    local languageCode = frame.args[1]
    assert(languageCode, "Brak kodu języka")
    local languageData = data[languageCode]
    assert(languageData, "Nieznany kod języka")
    return languageData['skrót'] or languageData['mianownik']
end

function lang.mianownik(frame)
    local languageCode = frame.args[1]
    assert(languageCode, "Brak kodu języka")
    local languageData = data[languageCode]
    assert(languageData, "Nieznany kod języka")
    return languageData['mianownik']
end
 
lang["dopełniacz"] = function(frame)
    local languageCode = frame.args[1]
    assert(languageCode, "Brak kodu języka")
    local languageData = data[languageCode]
    assert(languageData, "Nieznany kod języka")
    return languageData['dopełniacz']
end

function lang.miejscownik(frame)
    local languageCode = frame.args[1]
    assert(languageCode, "Brak kodu języka")
    local languageData = data[languageCode]
    assert(languageData, "Nieznany kod języka")
    return languageData['miejscownik']
end

function list(frame, multi)
    -- konwersja kodów języków na kod wiki text opisujący kody
    local items = {}       -- tabela na skonwertowane kody
    local invalid = false  -- flaga informująca, że na liście znajduje się nieznany kod języka
    local warning = false  -- flaga informująca, że na liście znajduje się kod języka z listy częstych błędów
    local lang = mw.getContentLanguage() -- język wiki
    
    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
    
    local formatItem = function(languageCode)
        assert(#languageCode > 0, "Pusty kod języka")
        local languageData = data[languageCode]
        
        if languageData then
            if string.match("ee|am|an|ang|kr|se|si", languageCode) then
                warning = true
            end
 
            local skrot = languageData['skrót'] or languageData['mianownik']
            local nativeName = mw.language.fetchLanguageName(languageCode)
            if nativeName and #nativeName > 0 and languageCode ~= "pl" then
                table.insert(items, string.format("[[%s|<span style=\"color:#005\" title=\"Treść w języku %s (%s)\">%s</span>]]", languageData['hasło'], languageData['miejscownik'], nativeName, skrot))
            else
                table.insert(items, string.format("[[%s|<span style=\"color:#005\" title=\"Treść w języku %s\">%s</span>]]", languageData['hasło'],  languageData['miejscownik'], skrot))
            end
        elseif #languageCode == 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
            table.insert(items, string.format("<span style=\"color:red\">'''Błąd! Nieznany kod języka: %s. Sprawdź [[Pomoc:Interwiki|listę kodów]].'''</span>", languageCode))
        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(lang:lc(v))
            end
        end
    else
        -- jeden argument pozwala także wysłać wszystkie kody oddzielone spacją
        for languageCode in string.gmatch(lang:lc(args[1]), "%S+") do
            formatItem(languageCode)
        end
    end
    
    if #items == 0 then
        -- pusta lista kodów
        invalid = true
        table.insert(items, "<span style=\"color:red\">'''Błąd! Brak kodu języka.'''</span>")
    end

    -- ostateczne formatowanie wyniku
    local result = {}
    table.insert(result, "<span style=\"color:#009\">(")
    table.insert(result, table.concat(items, "&nbsp;•&nbsp;"))
    table.insert(result, ")</span>")
    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
    end

    return table.concat(result, "")
end

function lang.lang(frame)
	return list(frame, true)
end

lang["język"] = function(frame)
	return list(frame, false)
end

return lang