Ir al contenido

Módulo:Traducción de plantillas

De Wikipedia, la enciclopedia libre

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 prefijo http://
  • p_url2: Nombre del parámetro de una segunda web sobre el que se quiere que se eliminen corchetes y prefijo http://
  • 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