Módulo:Traduções

De RuneScape Wiki
Ir para: navegação, pesquisa
Documentação do módulo
Esta documentação é transcluída de Módulo:Traduções/doc. [editar] [atualizar]
Módulo:Traduções's a função main é invocada por Calculadora:Traduções/template.
Módulo:Traduções requer Módulo:Enum.
Módulo:Traduções requer Módulo:Traduções/data.
Módulo:Traduções requer Módulo:Traduções/data/missões.
Módulo:Traduções requer Módulo:Traduções/data/músicas.
Módulo:Traduções requer Módulo:Traduções/data/npcs.
Módulo:Traduções é solicitado por Módulo:Infobox monstro.
Módulo:Traduções é solicitado por Módulo:Infobox objeto.

Este módulo serve de base para a Calculadora:Traduções, que é transcluída para RS:Traduções. Utilizando os módulos de /data, traduz nomes de Objetos, NPCs, Músicas e Missões do jogo.


local p = {}
local enum = require('Módulo:Enum')

function p.main(frame)
	local args = frame:getParent().args
	local fuzzy = false
	if args.fuzzy == 'true' then
		fuzzy = true
	end
	return p._main(args.input, {dataType=args.dataType, fuzzy=fuzzy})
end

function p._main(inp, opts)
	local inp = tonumber(inp) or inp
	if not inp then
		return 'No search term given!'
	end
	
	opts = opts or {}
	mw.logObject( opts )
	local dtype = 'objecto'
	if opts.dataType then
		dtype = string.lower(opts.dataType) or 'objecto'
	end
	mw.log(dtype)
	local data = {}
	local transl = {}

	local hasfrde = false
	if dtype == 'npc' or dtype == 'npcs' or dtype == 'monstro' then
		data = require('Módulo:Traduções/data/npcs')
	elseif dtype == 'música' or dtype == 'faixa' then
		data = require('Módulo:Traduções/data/músicas')
	elseif dtype == 'missão' then
		data = require('Módulo:Traduções/data/missões')
		hasfrde = true
	else
		data = require('Módulo:Traduções/data')
	end

	if type(inp) == 'string' and opts.fuzzy == true and string.find(inp, '%S') then
		local query = string.lower(inp)
		for k, v in pairs(data.idTbl) do
			local search = v.en .. '%%' ..  v.pt
			if hasfrdde then
				search = search .. '%%' .. v.fr .. '%%' .. v.de
			end
			search = string.lower(search)
			
			if string.find(search, query) then
				local res = v
				v.id = k
				table.insert(transl, res)
			end
		end
	else
		local res = false
		if data.idTbl[inp] then
			res = data.idTbl[inp]
			res.id = inp
		elseif hasfrde then
			res = data.ptTbl[inp] or data.enTbl[inp] or data.frTbl[inp] or data.deTbl[inp] or false
		else
			res = data.ptTbl[inp] or data.enTbl[inp] or false
		end
		
		if res then
			table.insert(transl, res)
		end
	end

	transl = enum.unique(transl, function(x) return x.pt .. x.en end)
	table.sort(transl, function(x, y) return x.pt < y.pt end)

	local ret = mw.html.create('table'):addClass('wikitable sortable')
	ret:tag('th')
			:wikitext('ID')
		:done()
		:tag('th')
			:wikitext('Nome em Português')
		:done()
		:tag('th')
			:wikitext('Nome em Inglês')
		:done()
		:tag('th')
			:wikitext('Nome em Francês')
		:done()
		:tag('th')
			:wikitext('Nome em Alemão')
		:done()
		
	local na = '<td class="table-na" style="text-align: center; data-sort-value="0">N/A</td>'
	
	if #transl == 0 then
		ret:tag('tr'):tag('td'):attr('colspan','5'):wikitext('Nenhum resultado encontrado!')
		return ret
	end
	
	for _, v in ipairs(transl) do
		local ln = ret:tag('tr')
		if v.id then
			ln:tag('td')
				:wikitext(v.id)
			:done()
		else
			ln:node(na)
		end
		if v.pt then
			ln:tag('td')
				:wikitext(v.pt)
			:done()
		else
			ln:node(na)
		end
		if v.en then
			ln:tag('td')
				:wikitext(v.en)
			:done()
		else
			ln:node(na)
		end
		if v.fr then
			ln:tag('td')
				:wikitext(v.fr)
			:done()
		else
			ln:node(na)
		end
		if v.de then
			ln:tag('td')
				:wikitext(v.de)
			:done()
		else
			ln:node(na)
		end
	end

	return ret
end

function p._simple(inp, lang, dtype, out)
	dtype = string.lower(dtype) or 'objecto'
	if dtype == 'npc' or dtype == 'npcs' or dtype == 'monstro' then
		data = require('Módulo:Traduções/data/npcs')
	elseif dtype == 'música' or dtype == 'faixa' then
		data = require('Módulo:Traduções/data/músicas')
	elseif dtype == 'missão' then
		data = require('Módulo:Traduções/data/missões')
		hasfrde = true
	else
		data = require('Módulo:Traduções/data')
	end
	
	lang = string.lower(lang) or 'id'
	local res = false
	if lang == 'id' then
		res = data.idTbl[inp]
	elseif lang == 'en' then
		res = data.enTbl[inp]
	elseif lag == 'fr'then
		res = data.frTbl[inp]
	elseif land == 'de' then
		res = data.deTbl[inp]
	else
		res = data.ptTbl[inp]
	end
	
	if not res then
		mw.log('Not found\nInput: '..inp..'\nLang: '..lang)
		return false
	end
	
	out =  string.lower(out) or 'en'
	if res[out] then
		return res[out]
	else
		mw.log('No "'..out..'" translation found for:')
		mw.logObject(res)
		return false
	end
end

return p