Módulo:Traducción de plantillas
Apariencia
Uso
Este módulo vale para traducir una plantilla a otra. Su función principal es eliminar los parámetros sin valor y eleiminar los prefijos sufijos y otros elementos de las imágenes o url siempre que se aporten los parámetros correspondientes.
Parámetros
{{#invoke:Traducción de plantillas|parametro}}
p_nombre
: Nombre de la plantilla a la que se quiere traducir.p_imagen
: Nombre del parámetro imagen sobre la que se quiere que se eliminen corchetes, prefijos y sufijos.p_imagen2
: Nombre del parámetro de una segunda imagen sobre la que se quiere que se eliminen corchetes, prefijos y sufijos.p_url
: Nombre del parámetro web sobre el que se quiere que se eliminen corchetes y prefijohttp://
p_url2
: Nombre del parámetro de una segunda web sobre el que se quiere que se eliminen corchetes y prefijohttp://
p_ordenar
: Orden en que se quiere que se devuelvan los parámetros. Se deben incluir una lista con todos los parámetros separados por una coma sin espacios y si se omite devolverá los parámetros en un orden aleatorio diferente al que se da en la plantilla.
--Módulo para traducir plantillas
local p = {}
local args
function imagenSinPrefijos(archivo)--Función auxiliar para quitar prefijos y sufijos al enlace de una imagen
local imagen = {}
if archivo ~= nil then
if string.find(archivo, '[Aa]rchivo') then
imagen = string.gsub(archivo,'..[Aa]rchivo:(.*\.%a%a%a)|.*','%1')
elseif string.find(archivo, '[Ff]ile') then
imagen = string.gsub(archivo,'..[Ff]ile:(.*\.%a%a%a)|.*','%1')
elseif string.find(archivo, '[Ii]magen') then
imagen = string.gsub(archivo,'..[Ii]magen:(.*\.%a%a%a)|.*','%1')
elseif string.find(archivo, '[Ii]mage') then
imagen = string.gsub(archivo,'..[Ii]mage:(.*\.%a%a%a)|.*','%1')
else
imagen = archivo
end
else
imagen = ''
end
return imagen
end
function url(web)
-- Función auxiliar para quitar prefijos y corchetes a una url
-- Ejemplos:
-- - ''[http://www.basketfrance.com www.basketfrance.com]'' --> www.basketfrance.com
-- - ''[http://www.fab.ad Ir al sitio.]'' --> www.fab.ad
-- - ''No tiene'' -->
local cambio = web
if not cambio then return cambio end -- Salir si la dirección a convertir está vacía
-- Eliminar negritas y cursivas
cambio=string.gsub(cambio,"'''","")
if not cambio then return cambio end
cambio=string.gsub(cambio,"''","")
if not cambio then return cambio end
-- Eliminar corchetes
cambio = string.gsub(cambio,'%[(.+)%]','%1',1)
if not cambio then return cambio end
-- Eliminar el texto del enlace externo
cambio = string.match(cambio,'%S+')
if not cambio then return cambio end
-- Eliminar el protocolo
cambio = string.gsub(cambio,'http:%/%/(.*)','%1')
if not cambio then return cambio end
--Eliminar la url si no comienza por www
cambio = string.match(cambio,'www.*')
return cambio
end
function ordenar(parametro)
local ordenar = parametro['p_ordenar']
if ordenar then
nombreParametro = mw.text.split (ordenar,',')
return nombreParametro
else
return ''
end
end
function indexNum(tabla) --Convierte en númericos los índices que son string
local copia = {}
local cont = 0
for k, v in pairs(tabla) do
cont = cont + 1
copia[cont] = v
end
-- return table.sort(copia,ordenar)
return copia
end
function traductor(parametro,separador)
local plantilla = {}
if args['p_nombre'] then
plantilla = parametro['p_nombre']
else
plantilla = ''
end
if plantilla ~= '' then
if next(parametro) ~= '' then
if parametro['p_url'] and parametro[parametro['p_url']] then
parametro[parametro['p_url']] = url(parametro[parametro['p_url']]) --Quitamos prefijos de URL
end
if parametro['p_url2'] and parametro[parametro['p_url2']] then
parametro[parametro['p_url2']] = url(parametro[parametro['p_url2']]) --Quitamos prefijos de URL2
end
if parametro['p_imagen'] and parametro[parametro['p_imagen']] then
parametro[parametro['p_imagen']] = imagenSinPrefijos(parametro[parametro['p_imagen']]) -- Quitamos prefijos de imagen
end
if parametro['p_imagen2'] and parametro[parametro['p_imagen2']] then
parametro[parametro['p_imagen2']] = imagenSinPrefijos(parametro[parametro['p_imagen2']]) -- Quitamos prefijos de imagen2
end
local ordenar = ordenar(parametro)
local par = {}
for k, v in pairs (parametro) do -- Quitamos los parámetros internos
k=tostring(k)
if mw.ustring.sub(k, 1, 2) ~= 'p_' then
par[k] = v
end
end
local cont = 0
local linea = {}
local np = {}
if ordenar[1] then
np = ordenar
else
np = par
end
for k, v in pairs(np) do -- Creamos linea de la plantilla
local ko = {}
local vo = {}
if ordenar[1] then
ko = par[v]
vo = v
else
ko = v
vo = k
end
cont = cont + 1
-- Elimino líneas cuyo parámetro valga '?' o no tenga valor
if not ko or ko == '?' or ko=='' then
linea[cont] = ''
elseif separador == '' then
linea[cont] = tostring('|' .. vo .. '=' .. ko)
else
local espacio = string.rep (' ', 17 - mw.ustring.len(vo)) -- Separación Param =
linea[cont] = tostring(separador..'| ' .. vo .. espacio .. '= ' .. ko)
end
end
if next(linea) then
if separador=='' then
return marco:preprocess('{{' .. plantilla .. table.concat(linea) ..'}}')
else
return marco:preprocess('{{' .. plantilla .. table.concat(linea) ..'\n}}') -- Crea la plantilla con sus parámetros
end
else
return ''
end
else
return ''
end
else
return '<span class="error">No se ha definido la plantilla</span>'
end
end
function p.ficha(frame)
marco = frame
local origArgs = {}
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return traductor(args,'\n')
end
function p.plantilla(frame)
marco = frame
local origArgs = {}
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return traductor(args,'')
end
return p