Moduuli:kielikoodit

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: 'auhelawaOK
  • KOODI: {{#invoke:kielikoodit|Nimi|kud|isolla=1}}
    TULOS: 'AuhelawaOK
  • KOODI: {{#invoke:kielikoodit|Nimi|ovd}}
    TULOS: älvdalskaOK
  • KOODI: {{#invoke:kielikoodit|Nimi|ovd|isolla=1}}
    TULOS: ÄlvdalskaOK
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: 'auhelawanOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa|kud|isolla=1}}
    TULOS: 'AuhelawanOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa|ovd}}
    TULOS: älvdalskanOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa|ovd|isolla=1}}
    TULOS: ÄlvdalskanOK
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: deOK
  • KOODI: {{#invoke:kielikoodit|Tunnus|saksa|ISO 639-2}}
    TULOS: gerOK
  • KOODI: {{#invoke:kielikoodit|Tunnus|saksa|ISO 639-3}}
    TULOS: deuOK
  • KOODI: {{#invoke:kielikoodit|Tunnus|saksa}}
    TULOS: deOK
Tunnus_tunnukselle
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|de|ISO 639-1}}
    TULOS: deOK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|de|ISO 639-2}}
    TULOS: gerOK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|de|ISO 639-3}}
    TULOS: deuOK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|ger|ISO 639-1}}
    TULOS: deOK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|ger|ISO 639-2}}
    TULOS: gerOK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|ger|ISO 639-3}}
    TULOS: deuOK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|deu|ISO 639-1}}
    TULOS: deOK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|deu|ISO 639-2}}
    TULOS: gerOK
  • KOODI: {{#invoke:kielikoodit|Tunnus_tunnukselle|deu|ISO 639-3}}
    TULOS: deuOK
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: DakotaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dakota|isolla=1}}
    TULOS: DakotaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dakota|isolla=1}}
    TULOS: DakotaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dakotan|isolla=1}}
    TULOS: DakotaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dakotan|isolla=1}}
    TULOS: DakotaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Mouk-Aria|isolla=1}}
    TULOS (0 tavua): NG
    ODOTETTU (9 tavua): mouk-aria
  • KOODI: {{#invoke:kielikoodit|Nimi2|mouk-Aria|isolla=1}}
    TULOS (0 tavua): NG
    ODOTETTU (9 tavua): mouk-aria
Nimi2 - kielellä vaihtoehtoinen nimi
  • KOODI: {{#invoke:kielikoodit|Nimi2|dlm|isolla=1}}
    TULOS: DalmatiaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dalmatia|isolla=1}}
    TULOS: DalmatiaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmatia|isolla=1}}
    TULOS: DalmatiaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dalmatian|isolla=1}}
    TULOS: DalmatiaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmatian|isolla=1}}
    TULOS: DalmatiaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dalmaatti|isolla=1}}
    TULOS: DalmatiaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmaatti|isolla=1}}
    TULOS: DalmatiaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|dalmaatin|isolla=1}}
    TULOS: DalmatiaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmaatin|isolla=1}}
    TULOS: DalmatiaOK
Nimi2 - tulostus pienellä
  • KOODI: {{#invoke:kielikoodit|Nimi2|dak}}
    TULOS: dakotaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dakotan}}
    TULOS: dakotaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmatia}}
    TULOS: dalmatiaOK
  • KOODI: {{#invoke:kielikoodit|Nimi2|Dalmaatin}}
    TULOS: dalmatiaOK
Genetiivissa2
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dak}}
    TULOS: DakotanOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|nmn}}
    TULOS (7 tavua): !XóõnNG
    ODOTETTU (8 tavua): ǃXóõn
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|kud}}
    TULOS: 'AuhelawanOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|ǃxóõ}}
    TULOS (7 tavua): !XóõnNG
    ODOTETTU (8 tavua): ǃXóõn
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dakota}}
    TULOS: DakotanOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dakota}}
    TULOS: DakotanOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dakotan}}
    TULOS: DakotanOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dakotan}}
    TULOS: DakotanOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Mouk-Aria}}
    TULOS (0 tavua): NG
    ODOTETTU (10 tavua): mouk-arian
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|mouk-Aria}}
    TULOS (0 tavua): NG
    ODOTETTU (10 tavua): mouk-arian
Genetiivissa2 - kielellä vaihtoehtoinen nimi
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dlm}}
    TULOS: DalmatianOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dalmatia}}
    TULOS: DalmatianOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dalmatia}}
    TULOS: DalmatianOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dalmatian}}
    TULOS: DalmatianOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dalmatian}}
    TULOS: DalmatianOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dalmaatti}}
    TULOS: DalmatianOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dalmaatti}}
    TULOS: DalmatianOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|dalmaatin}}
    TULOS: DalmatianOK
  • KOODI: {{#invoke:kielikoodit|Genetiivissa2|Dalmaatin}}
    TULOS: DalmatianOK

ɧ


 -- 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)
    local kt = taulukot.tunnukset[tunnus]
    if kt then
        if isolla then
            return m.versaalilla(kt[2])
        end
        return kt[2]
    end
    return nil
end

--- Kielen osioiden otsikkona käytetty teksti.
--
-- Yleensä sama kuin m.nimi isolla, muttei aina.
function m.kieliotsikko(tunnus)
	if tunnus == "rmf" then
		return "Suomen romani"
	end
	return m.nimi(tunnus, true)
end



-- Palauttaa annetun tunnuksen kielen nimen genetiivissä.
-- Jos valinnainen parametri 'isolla' on true, alkaa palautettu sana isolla kirjaimella.
function m.genetiivi_tunnukselle(tunnus, isolla)
    local 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
	
	if taulukot.tunnukset[k] then
		t = k
	else
		t = m.tunnus_genetiiville(k) or m.tunnus(k, nil)
	end
	
	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