Modul:TranslateTemplate

Moduldokumentasjon

TranslateTemplate er en modul for oversettelsesmaler. Vi har lenge hatt oversettelsesmaler, som en har kunnet substituere for å få ut en norsk mal (f.eks. {{subst:Cite web|…}} → {{Kilde www|…}}). Ved oversettelse av artikler kan dette være veldig tidsbesparende, men tidligere fikk en med masse tomme parametre som en måtte fjerne i etterkant. Denne modulen er primært ment å løse det problemet. I fremtiden kan det også være den får støtte for f.eks. å automatisk konvertere datoer fra engelsk til norsk.

Eksempel rediger

For å oversette fra {{Cite web}} på enwp til {{Kilde www}} har vi lagt inn:

<includeonly>
{{ {{{|safesubst:}}}ifsubst
| {{{{{|safesubst:}}}#invoke:TranslateTemplate|translate|Cite web|raw}}
| {{#invoke:TranslateTemplate|translate|Cite web}}
}}</includeonly><noinclude>{{dokumentasjon}}</noinclude>

local p = {}

function p.translate(frame)

	local template
	local argtable = {}
	for k, v in pairs(frame.args) do
		if k == 1 then template = v
		else argtable[k] = v end
	end
	local pframe = frame:getParent()
	if pframe ~= nil then
		for k, v in pairs(pframe.args) do 
			if k == 1 then template = v
			else argtable[k] = v end
		end
	end
	
	-- Last inn konfigurasjonsfilen basert på malnavn gitt som 1= eller template= 
	if template == nil then
		return frame:preprocess('{{Feil|Ingen mal angitt}}')
	end
	local nb = mw.language.new('nb')
	local normName = string.gsub(nb:ucfirst(template), '_', ' ')
	local filename = 'Modul:TranslateTemplate/configuration/' .. normName
	local status, config = pcall(require, filename)
	if status == false then
		return frame:preprocess('{{Feil|Konfigurasjonsfilen [[:' .. filename .. ']] ble ikke funnet}}')
	end

	-- Oversett navngitte parametere basert på mapping fra konfigurasjonsfilen
	local args = ''
	for key, val in pairs( argtable ) do
		if string.match( key, '^[0-9]+$' ) == nil and val ~= '' then 
			newkey = config['args'][key]
			if newkey == nil then
				return frame:preprocess('{{Feil|Argumentet "' .. key .. '" ble ikke funnet i konfigurasjonsfilen [[:' .. filename .. ']]}}')
			end
			args = args .. '|' .. newkey .. '=' .. val
		end
	end

	local out = '{{' .. config['name'] .. args .. '}}'

	if argtable[2] == nil then
		return frame:preprocess(out)
	end
	if argtable[2] == 'raw' then
		return out
	end
	return frame:preprocess('{{Feil|TranslateTemplate forstår ikke: ' .. argtable[2] .. '}}')
end

return p