Moduuli:kielikoodit

Kohteesta Wikisanakirja
Loikkaa: valikkoon, hakuun

Kielten nimien ja tunnusten hakemiseen.

Kielikoodimääritykset tehdään tiedostoon Module:kielikoodit/taulukot.

Funktiot[muokkaa]

nimi[muokkaa]

  • nimi(tunnus)

Palauttaa tunnusta vastaavan kielen nimen. Huom. saman asian saa tehtyä mw.language.fetchLanguageName-funktiolla.

tunnus[muokkaa]

tunnus(nimi) Palauttaa nimeä vastaavan kielitunnuksen. Huom. saman asian saa tehtyä kieliolion mw.language:getCode-metodilla.

tunnus_genetiiville[muokkaa]

tunnus_genetiiville(nimi) Palauttaa nimeä vastaavan kielitunnuksen.

genetiivissa[muokkaa]

genetiivissa(tunnus) Palauttaa tunnusta vastaavan kielen genetiivimuodon.

partitiivissa[muokkaa]

partitiivissa(tunnus) Palauttaa tunnusta vastaavan kielen partitiivimuodon.

translatiivissa[muokkaa]

translatiivissa(tunnus) Palauttaa tunnusta vastaavan kielen translatiivimuodon.

lajitteluarvo[muokkaa]

lajitteluarvo(tunnus) Palauttaa tunnusta vastaavan kielen lajitteluarvon, joita vertaamalla tietää kahden kielen välisen järjestyksen.

lajitteluarvo_nimelle[muokkaa]

lajitteluarvo_nimelle(nimi) Palauttaa nimeä vastaavan kielen lajitteluarvon, joita vertaamalla tietää kahden kielen välisen järjestyksen.

#invokella kutsuttavat funktiot[muokkaa]

Nimi[muokkaa]

  • {{#invoke:kielikoodit|Nimi|tunnus}}
  • {{#invoke:kielikoodit|Nimi|tunnus|isolla=1}}

Palauttaa tunnusta vastaavan kielen nimen. Jos parametri isolla on annettu, palauttaa nimen isolla alkukirjaimella.

Tunnus[muokkaa]

  • {{#invoke:kielikoodit|Tunnus|nimi}}

Palauttaa nimeä vastaavan kielen tunnuksen.

  • {{#invoke:kielikoodit|Tunnus|nimi[|kielikoodistandardi]}}

Palauttaa nimeä vastaavan kielen tunnuksen. Jos kielikoodistandardi on annettu, palauttaa sen mukaisen kielikoodin, muuten oletuksksi asetetun.

Genetiivissa[muokkaa]

  • {{#invoke:kielikoodit|Genetiivissa|tunnus}}
  • {{#invoke:kielikoodit|Genetiivissa|tunnus|isolla=1}}

Palauttaa tunnusta vastaavan kielen genetiivimuodon. Jos parametri isolla on annettu, palauttaa nimen isolla alkukirjaimella.

Tunnus_genetiiville[muokkaa]

  • {{#invoke:kielikoodit|Tunnus_genetiiville|nimen genetiivi}}

Palauttaa nimen genetiiviä vastaavan kielen tunnuksen.

Partitiivissa[muokkaa]

  • {{#invoke:kielikoodit|Partitiivissa|tunnus}}
  • {{#invoke:kielikoodit|Partitiivissa|tunnus|isolla=1}}

Palauttaa tunnusta vastaavan kielen partitiivimuodon. Jos parametri isolla on annettu, palauttaa nimen isolla alkukirjaimella.

Translatiivissa[muokkaa]

  • {{#invoke:kielikoodit|Translatiivissa|tunnus}}
  • {{#invoke:kielikoodit|Translatiivissa|tunnus|isolla=1}}

Palauttaa tunnusta vastaavan kielen translatiivimuodon. Jos parametri isolla on annettu, palauttaa nimen isolla alkukirjaimella.

Testit[muokkaa]

Nimi
  • KOODI: {{#invoke:kielikoodit|Nimi|hu}}
    TULOS: unkari
  • KOODI: {{#invoke:kielikoodit|Nimi|hu|isolla=1}}
    TULOS: Unkari
  • KOODI: {{#invoke:kielikoodit|Nimi|kud}}
    TULOS: 'auhelawa OK
  • KOODI: {{#invoke:kielikoodit|Nimi|kud|isolla=1}}
    TULOS: 'Auhelawa OK
  • KOODI: {{#invoke:kielikoodit|Nimi|ovd}}
    TULOS: älvdalska OK
  • KOODI: {{#invoke:kielikoodit|Nimi|ovd|isolla=1}}
    TULOS: Älvdalska OK
Genetiivissa
  • KOODI: {{#invoke:kielikoodit|Genetiivissa|hu}}
    TULOS: unkarin
  • KOODI: {{#invoke:kielikoodit|Genetiivissa|hu|isolla=1}}
    TULOS: Unkarin
  • KOODI: {{#invoke:kielikoodit|Genetiivissa|dlm}}
    TULOS: dalmatian
  • KOODI: {{#invoke:kielikoodit|Genetiivissa|dlm|isolla=1}}
    TULOS: Dalmatian
  • KOODI: {{#invoke:kielikoodit|Genetiivissa|kud}}
    TULOS: 'auhelawan OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa|kud|isolla=1}}
    TULOS: 'Auhelawan OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa|ovd}}
    TULOS: älvdalskan OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa|ovd|isolla=1}}
    TULOS: Älvdalskan OK
Partitiivissa
  • KOODI: {{#invoke:kielikoodit|Partitiivissa|hu}}
    TULOS: unkaria
  • KOODI: {{#invoke:kielikoodit|Partitiivissa|hu|isolla=1}}
    TULOS: Unkaria
Translatiivissa
  • KOODI: {{#invoke:kielikoodit|Translatiivissa|hu}}
    TULOS: unkariksi
  • KOODI: {{#invoke:kielikoodit|Translatiivissa|hu|isolla=1}}
    TULOS: Unkariksi
Tunnus
  • KOODI: {{#invoke:kielikoodit|Tunnus|pandžabi}}
    TULOS: pa
  • KOODI: {{#invoke:kielikoodit|Tunnus|pörde}}
    TULOS:
  • KOODI: {{#invoke:kielikoodit|Tunnus|saksa|ISO 639-1}}
    TULOS: de OK
  • KOODI: {{#invoke:kielikoodit|Tunnus|saksa|ISO 639-2}}
    TULOS: ger OK
  • KOODI: {{#invoke:kielikoodit|Tunnus|saksa|ISO 639-3}}
    TULOS: deu OK
  • KOODI: {{#invoke:kielikoodit|Tunnus|saksa}}
    TULOS: de OK
Tunnus_tunnukselle
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|de|ISO 639-1}}
    TULOS: de OK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|de|ISO 639-2}}
    TULOS: ger OK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|de|ISO 639-3}}
    TULOS: deu OK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|ger|ISO 639-1}}
    TULOS: de OK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|ger|ISO 639-2}}
    TULOS: ger OK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|ger|ISO 639-3}}
    TULOS: deu OK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|deu|ISO 639-1}}
    TULOS: de OK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|deu|ISO 639-2}}
    TULOS: ger OK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|deu|ISO 639-3}}
    TULOS: deu OK
Tunnus_genetiiville
  • KOODI: {{#invoke:kielikoodit|Tunnus_genetiiville|liivin}}
    TULOS: liv
  • KOODI: {{#invoke:kielikoodit|Tunnus_genetiiville|Liivin}}
    TULOS: liv
Tunnus_genetiiville
  • KOODI: {{#invoke:kielikoodit|Tunnus_genetiiville|klassisen pörden}}
    TULOS:
  • KOODI: {{#invoke:kielikoodit|Tunnus_genetiiville|dalmatian}}
    TULOS: dlm
  • KOODI: {{#invoke:kielikoodit|Tunnus_genetiiville|dalmaatin}}
    TULOS: dlm
Nimi2
  • KOODI: {{#invoke:kielikoodit|Nimi2|dak|isolla=1}}
    TULOS: Dakota OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dakota|isolla=1}}
    TULOS: Dakota OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dakota|isolla=1}}
    TULOS: Dakota OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dakotan|isolla=1}}
    TULOS: Dakota OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dakotan|isolla=1}}
    TULOS: Dakota OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Mouk-Aria|isolla=1}}
    TULOS: NG
    ODOTETTU: mouk-aria
  • KOODI: {{#invoke:kielikoodit|Nimi2|mouk-Aria|isolla=1}}
    TULOS: NG
    ODOTETTU: mouk-aria
Nimi2 - kielellä vaihtoehtoinen nimi
  • KOODI: {{#invoke:kielikoodit|Nimi2|dlm|isolla=1}}
    TULOS: Dalmatia OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dalmatia|isolla=1}}
    TULOS: Dalmatia OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmatia|isolla=1}}
    TULOS: Dalmatia OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dalmatian|isolla=1}}
    TULOS: Dalmatia OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmatian|isolla=1}}
    TULOS: Dalmatia OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dalmaatti|isolla=1}}
    TULOS: Dalmatia OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmaatti|isolla=1}}
    TULOS: Dalmatia OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dalmaatin|isolla=1}}
    TULOS: Dalmatia OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmaatin|isolla=1}}
    TULOS: Dalmatia OK
Nimi2 - tulostus pienellä
  • KOODI: {{#invoke:kielikoodit|Nimi2|dak}}
    TULOS: dakota OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dakotan}}
    TULOS: dakota OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmatia}}
    TULOS: dalmatia OK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmaatin}}
    TULOS: dalmatia OK
Genetiivissa2
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dak}}
    TULOS: Dakotan OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|nmn}}
    TULOS: !Xóõn NG
    ODOTETTU: ǃXóõn
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|kud}}
    TULOS: 'Auhelawan OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|ǃxóõ}}
    TULOS: !Xóõn NG
    ODOTETTU: ǃXóõn
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dakota}}
    TULOS: Dakotan OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dakota}}
    TULOS: Dakotan OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dakotan}}
    TULOS: Dakotan OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dakotan}}
    TULOS: Dakotan OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Mouk-Aria}}
    TULOS: NG
    ODOTETTU: mouk-arian
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|mouk-Aria}}
    TULOS: NG
    ODOTETTU: mouk-arian
Genetiivissa2 - kielellä vaihtoehtoinen nimi
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dlm}}
    TULOS: Dalmatian OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dalmatia}}
    TULOS: Dalmatian OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dalmatia}}
    TULOS: Dalmatian OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dalmatian}}
    TULOS: Dalmatian OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dalmatian}}
    TULOS: Dalmatian OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dalmaatti}}
    TULOS: Dalmatian OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dalmaatti}}
    TULOS: Dalmatian OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dalmaatin}}
    TULOS: Dalmatian OK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dalmaatin}}
    TULOS: Dalmatian OK

 -- http://fi.wiktionary.org/wiki/Wikisanakirja:Kielimallineet

local m = {}

local taulukot = mw.loadData('Module:kielikoodit/taulukot')

-- Muuttaa sanan s ensimmäisen kirjaimen isoksi vaikka sana ei alkaisi 
-- kirjaimella. Esim. versaaliksi("'auhelawa") --> "'Auhelawa"
function m.versaalilla (s)
	local lang_fi = mw.language.new("fi");

   -- Erotetaan erikoismerkit alusta, koska mw.lang:ucfirst ei muuta nillä
   -- alkavia nimiä oikein
   s = string.gsub(s, "^(['ǃ!]*)(.+)", function (a, b)
	                         	      return a .. lang_fi:ucfirst(b)
					                end)

   return s
end

function m.gemenalla (s)
	local lang_fi = mw.language.new("fi");

   s = string.gsub(s, "^(['ǃ!]*)(.+)", function (a, b)
	                         	      return a .. lang_fi:lcfirst(b)
					                end)

   return s
end



-- Palauttaa annetun tunnuksen kielen nimen nominatiivissa. 
-- Jos valinnainen parametri 'isolla' on true, alkaa palautettu sana isolla kirjaimella.
function m.nimi(tunnus, isolla)
    kt = taulukot.tunnukset[tunnus]
    if kt then
        if isolla then
            return m.versaalilla(kt[2])
        end
        return kt[2]
    end
    return nil
end



-- Palauttaa annetun tunnuksen kielen nimen genetiivissä.
-- Jos valinnainen parametri 'isolla' on true, alkaa palautettu sana isolla kirjaimella.
function m.genetiivi_tunnukselle(tunnus, isolla)
    kt = taulukot.tunnukset[tunnus]
    if kt and kt[3] then
        if isolla then
            return m.versaalilla(kt[3])
        end
        return kt[3]
    end
    return nil
end

function m.genetiivi_nimelle(kieli, isolla)
    if taulukot.nimet[kieli] then
        return taulukot.nimet[kieli][3]
    end
    return nil
end

function m.genetiivissa(k, isolla)
	local t = m.tunnus_genetiiville(k) or m.tunnus(k, nil) or k
	return m.genetiivi_tunnukselle(t, isolla) or k
end

function m.tunnus_genetiiville(gen)
    -- muutetaan pienellä alkavaksi
    local s = m.gemenalla(gen)
    if taulukot.genetiivit[s] then
        return taulukot.genetiivit[s][5][1]
    end
    return nil
end 

-- Palauttaa annetun tunnuksen kielen nimen partitiivissa.
-- Jos valinnainen parametri 'isolla' on true, alkaa palautettu sana isolla kirjaimella.
-- TODO
function m.partitiivissa(tunnus, isolla)
    kt = taulukot.tunnukset[tunnus]
    if kt then
        if isolla and kt[4] then
            return m.versaalilla(kt[4])
        end
        return kt[4]
    end
    return nil
end

function m.partitiivi_nimelle(kieli, isolla)
    if taulukot.nimet[kieli] then
        return taulukot.nimet[kieli][4]
    end
    return nil
end


function m.translatiivissa(tunnus, isolla)
    g = m.genetiivissa(tunnus, isolla)
    if g then
		return string.match(g, "^(.*)n$") .. "ksi"
    end
    return nil
end

-- Palauttaa arvon, joka kertoo kielen paikan akkosjärjesyksessä.
-- TODO
function m.lajitteluarvo(tunnus)
    kt = taulukot.tunnukset[tunnus]
    if kt then
        return kt[1]
    end
    return -1
end 


function m.lajitteluarvo_nimelle(nimi)
    kt = taulukot.nimet[nimi]
    if kt then
        return kt[1]
    end
    return -1
end 

function m._tunnus(tunnukset, tark)
    local iso1 = nil
    local iso2 = nil
    local iso3 = nil

    if tark == nil then
        return tunnukset[1]
    end
    
    for i,v in ipairs(tunnukset) do
        if v:len() == 2 then
	    iso1 = v
	    if tark == "ISO 639-1" then
	        return v
	    end
	    elseif v:len() == 3 and iso3 == nil then
	        iso3 = v
	        if tark == "ISO 639-3" then
	            return v
	        end
	    elseif v:len() == 3 and iso3 ~= nil  then
	        iso2 = v
	        if tark == "ISO 639-2" then
	            return v
	        end
	    end
    end
    return nil
end

-- Palauttaa annetun kielen kielitunnuksen.
function m.tunnus(kieli, tark)
	local s = m.gemenalla(kieli)
    if taulukot.nimet[s] then
        return m._tunnus(taulukot.nimet[s][5], tark)
    end
    return nil
end



-- #invokella kutsuttavat funktiot

function m.Nimi(frame)
    return m.nimi(frame.args[1], frame.args.isolla and frame.args.isolla ~= "")
end

function m.Tunnus(frame)
    local ret = m.tunnus(frame.args[1], frame.args[2])
    if ret then
    	return ret
    end	
    return frame.args.oletus or ""
end

function m.Tunnus_tunnukselle(frame)
    kt = taulukot.tunnukset[frame.args[1]]
    if kt then
        local ret = m._tunnus(kt[5], frame.args[2])
        if ret then
    	    return ret
        end	
    end
    return frame.args.oletus or ""
end

function m.Genetiivissa(frame)
    local ret = m.genetiivissa(frame.args[1], frame.args.isolla and frame.args.isolla ~= "")
    if ret then
    	return ret
    end	
    return frame.args.oletus or ""
end

function m.Tunnus_genetiiville(frame)
    local ret = m.tunnus_genetiiville(frame.args[1])
    if ret then
    	return ret
    end	
    return frame.args.oletus or ""
end

function m.Partitiivissa(frame)
    local ret = m.partitiivissa(frame.args[1], frame.args.isolla and frame.args.isolla ~= "")
    if ret then
    	return ret
    end	
    return frame.args.oletus or ""
end

function m.Translatiivissa(frame)
    local ret = m.translatiivissa(frame.args[1], frame.args.isolla and frame.args.isolla ~= "")
    if ret then
    	return ret
    end	
    return frame.args.oletus or ""
end

function m.Tulosta_kielet(frame)

    local teksti = "{| class='wikitable sortable' border=1\n|-\n! Kielikoodi !! Nimi!!Wikisanakirjassa käytetty nimi\n"

    for i,v in ipairs(taulukot.tiedot) do
    	local jnro = v[1]
    	local nimi = v[2]
    	local kielikoodit = v[5]
    	local viittaus = v[6]
    	local kaytetty_nimi = ""
    	if (kielikoodit == nil or next(kielikoodit) == nil) and viittaus then
    		rivi = taulukot.tunnukset[viittaus]
    		if rivi then
    				kielikoodit = rivi[5]
    				kaytetty_nimi = "[[" .. rivi[2] .. "]]"
    		end
    	end
    	if kielikoodit then
	        for j,koodi in ipairs(kielikoodit) do
        		teksti = teksti .. "|-\n| " .. koodi .. " ||data-sort-value=\"" .. jnro .. "\"| [[" .. nimi .. "]] || " .. kaytetty_nimi .. "\n"
        	end
       	end
    end
    teksti = teksti .. "|}"
    return teksti
end

-- Yhteensopivuusfunkto vanhoille {{Kieliaakkostus}}- ja {{Kieliaakkostus-2}} -mallineille.
-- Palauttaa kielen nominatiivin, kun kieli on annettu genetiivimuodossa tai kielikoodina.
function m.Nimi2(frame)
	local tunnus = frame.args[1]
    -- Etsitään ensisijaisesti kielikoodilla, koska toisen kielen kielikoodi
    -- ja toisen nimi voivat olla samat (iiri, ga).
    if m.nimi(tunnus) == nil then
    	tunnus = m.tunnus(tunnus, nil) or m.tunnus_genetiiville(tunnus)
    end
    if tunnus then
 		local ret = m.nimi(tunnus, frame.args.isolla and frame.args.isolla ~= "")
    	if ret then
    		if frame.args.isolla == 1 then
    			return m.versaalilla(ret)
    		else
    			return ret
    		end
    	end
    end
    return frame.args.oletus or ""
end

-- Yhteensopivuusfunkto vanhoille {{Kieliaakkostus}}- ja {{Kieliaakkostus-2}} -mallineille.
-- Palauttaa kielen nominatiivin, kun kieli on annettu nominatiivimuodossa tai kielikoodina.
function m.Genetiivissa2(frame)
	local tunnus = frame.args[1]
    -- Etsitään ensisijaisesti kielikoodilla, koska toisen kielen kielikoodi
    -- ja toisen nimi voivat olla samat (iiri, ga).
    if m.nimi(tunnus) == nil then
    	tunnus = m.tunnus(tunnus, nil) or m.tunnus_genetiiville(tunnus)
    end
    if tunnus then
 		local ret = m.genetiivi_tunnukselle(tunnus, 1)
    	if ret then
    		return ret
    	end
    end
    return frame.args.oletus or ""
end

function m.Testi(frame)
	return m.nimi(frame.args[1]) .. "<br/>" .. m.lajitteluarvo_nimelle(frame.args[2]) .. "<br/>" .. m.lajitteluarvo_nimelle(m.nimi(frame.args[1]))
end


return m