Moduuli:käännös

Wikisanakirjasta

Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:käännös/ohje

-- [[Malline:käännös]]-mallineen toteutus.

local m = {}

local apu = require('Moduuli:Mallinetyokalut')
local kielilinkki = require('Moduuli:Kielilinkki')
local kielikoodit = require('Moduuli:kielikoodit')
local kielitieto = require('Moduuli:Kielitieto/kentat')

local function kielella_on_painoparametri(kielikoodi)
	local tiedot = kielitieto["kielten kentät"][kielikoodi]
	return tiedot and tiedot:find(",paino,")
end

local function kielella_on_vokparametri(kielikoodi)
	local tiedot = kielitieto["kielten kentät"][kielikoodi]
	return tiedot and tiedot:find(",vok,")
end

local function hae_sanariviparametrit(args)
	local parametrit = {}
	
	if args[3] then
		if kielella_on_painoparametri(args[1]) then
			table.insert(parametrit, "paino=" .. args[3])
		elseif kielella_on_vokparametri(args[1]) then
			table.insert(parametrit, "vok=" .. args[3])
		else
			table.insert(parametrit, args[3])
		end
	end	
	
	for key, val in pairs(args) do
		if key ~= 1 and key ~= 2 and key ~= 3 then 
			table.insert(parametrit, key .. "=" .. val)
		end
	end

	if #parametrit == 0 then
		return ""
	end

	return "|" .. table.concat(parametrit, "|")
end	
	

m["Käännös"] = function (frame)
	local args = apu.poista_tyhjat(frame:getParent().args)
    local kielikoodi = args[1]
    
    if not kielikoodi then
        error("Pakollinen kielikoodi puuttuu (parametri 1)")
    end

    local kohde  = args[2]
    if not kohde then
        error("Pakollinen käännös puuttuu (parametri 2)")
    end

    local teksti = args[3]
    local pohja  = "käännös/*/$2/yleinen"
    local kieliotsikko = kielikoodit.nimi(kielikoodi, true)
    local sanariviparametrit = hae_sanariviparametrit(args)
    
    if not kieliotsikko then
    	return kielilinkki.linkki{ 
        	kieli = kielikoodi,
        	kohde = kohde,
        	teksti = teksti
        }
    end
    
    return kielilinkki.linkki{ 
        kieli = kielikoodi,
        kohde = kohde,
        teksti = teksti,
        kuvaus = pohja,
        ['kuvaus-param'] = {
        	[1] = kieliotsikko,
        	[5] = sanariviparametrit
        }
    }
end

return m