Diferencia entre revisiones de «Módulo:Personaje»
De Inkipedia
(Cambiada la optimización de la plantilla para soportar cuando una imagen no está disponible, necesario comprobar lo que está fallando) |
(Código añadido) |
||
Línea 1: | Línea 1: | ||
local m = {} | local m = {} | ||
local function generateKey(nombre, juego) | |||
if not nombre then | |||
return juego or "" | |||
end | |||
return juego and nombre .. "_" .. juego or nombre | |||
end | |||
local function safeIndex(tabla, key) | |||
if not key then | |||
return nil | |||
end | |||
return tabla[key] | |||
end | |||
local translatedPersonaje = { | |||
[generateKey("Sheldon", nil)] = "Ammo Knights", | |||
[generateKey("Sheldon", "OC")] = "Sheldon", | |||
[generateKey("Annie", "S")] = "Cooler Heads", | |||
[generateKey("Annie", "S2")] = "SplatNet Gear Shop", | |||
[generateKey("Annie", "S3")] = "Cooler Heads", | |||
[generateKey("Jelonzo", nil)] = "Jelly Fresh", | |||
[generateKey("Crusty Sean", "S")] = "Shrimp Kicks", | |||
[generateKey("Crusty Sean", "S2")] = "Crust Bucket", | |||
[generateKey("Flow", nil)] = "Headspace", | |||
[generateKey("Jelfonzo", nil)] = "Ye Olde Cloth Shoppe", | |||
[generateKey("Bisk", nil)] = "Shella Fresh", | |||
[generateKey("Teléfono", nil)] = "Telephone", | |||
[generateKey("Teléfono roto", nil)] = "Broken Telephone", | |||
[generateKey("Gnarly Eddy", nil)] = "Naut Couture", | |||
[generateKey("Jel La Fleur", nil)] = "Man-o'-Wardrobe", | |||
[generateKey("Mr. Coco", nil)] = "Crush Station", | |||
[generateKey("Harmony", nil)] = "Hotlantis", | |||
} | |||
local translatedEstado = { | |||
["oculto"] = "hidden", | |||
["orden"] = "order", | |||
["base"] = "Outpost", | |||
["roto"] = "broken", | |||
["cuadrado"] = "square", | |||
["dron"] = "Drone", | |||
} | |||
local posicionEstado = { | |||
["S2"] = { | |||
[generateKey("Telephone", "S2")] = "antes", | |||
[generateKey(nil, "S2")] = "despues", | |||
}, | |||
["S3"] = { | |||
[generateKey("Cuttlefish", "S3")] = { | |||
[generateKey("dry", "S3")] = "antes", | |||
[generateKey(nil, "S3")] = "despues", | |||
}, | |||
[generateKey(nil, "S3")] = "despues", | |||
}, | |||
[generateKey(nil)] = "despues", | |||
} | |||
-- Función para normalizar el tipo de traducción | -- Función para normalizar el tipo de traducción | ||
Línea 37: | Línea 96: | ||
function m.main(frame) | function m.main(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local juego = args[" | local juego = args["juego"] or args[1] | ||
local nombre = args["nombre"] or args[2] | local nombre = args["nombre"] or args[2] | ||
local estado = args["estado"] or args[3] | local estado = args["estado"] or args[3] | ||
Línea 44: | Línea 103: | ||
-- Normalizar el nombre del juego | -- Normalizar el nombre del juego | ||
juego = require('Módulo:Acortar_juego').getGame(juego) | juego = require('Módulo:Acortar_juego').getGame(juego) or juego | ||
-- Traducir el personaje | -- Traducir el personaje | ||
local nombreIngles = require('Módulo:Castellano').getPersonaje(nombre) | local nombreIngles = require('Módulo:Castellano').getPersonaje(nombre) or nombre | ||
nombreIngles = translatedPersonaje[generateKey(nombre, juego)] or translatedPersonaje[nombre] or nombreIngles | |||
--Otras comprobaciones | |||
if tamano == "icono" then | if tamano == "icono" then | ||
icono = tamano or icono | icono = tamano or icono | ||
Línea 56: | Línea 117: | ||
if estado ~= nil and not tonumber(estado) and estado ~="icono" then | if estado ~= nil and not tonumber(estado) and estado ~="icono" then | ||
estado = genericType(estado) | estado = genericType(estado) | ||
estado = translatedEstado[estado] | |||
elseif estado == "icono" then | elseif estado == "icono" then | ||
icono = estado or icono | icono = estado or icono | ||
Línea 65: | Línea 127: | ||
-- Lógica para determinar la imagen | -- Lógica para determinar la imagen | ||
local constructorProvisional | local constructorProvisional | ||
if estado ~= nil then | if estado ~= nil then | ||
local keyJuego = generateKey(juego) | |||
local keyNombre = generateKey(nombreIngles) | |||
local keyEstado = generateKey(estado) | |||
local subTabla = safeIndex(posicionEstado, keyJuego) | |||
if subTabla then | |||
local posicion = safeIndex(subTabla[keyNombre], keyEstado) or "despues" | |||
else | else | ||
local posicion = "despues" | |||
end | end | ||
local posicion = safeIndex(posicionEstado[generateKey(juego)], generateKey(nombreIngles))[generateKey(estado)] or "despues" | |||
if posicion == "antes" then | |||
constructorProvisional = string.format("[[File:%s Icon %s %s %s.png|%dpx|link=%s]]", juego, estado, nombreIngles, tamano, nombre) | |||
else | |||
constructorProvisional = string.format("[[File:%s Icon %s %s.png|%dpx|link=%s]]", juego, nombreIngles, estado, tamano, nombre) | |||
end | |||
else | |||
constructorProvisional = string.format("[[File:%s Icon %s.png|%dpx|link=%s]]", juego, nombreIngles, tamano, nombre) | |||
end | |||
if icono == nil then | if icono == nil then | ||
constructorProvisional = string.format("%s [[%s]]", constructorProvisional, nombre) | |||
return constructorProvisional | |||
end | end | ||
return constructorProvisional | return constructorProvisional | ||
end | end | ||
return m | return m |
Revisión actual - 15:28 21 mar 2024
La documentación para este módulo puede ser creada en Módulo:Personaje/doc
local m = {} local function generateKey(nombre, juego) if not nombre then return juego or "" end return juego and nombre .. "_" .. juego or nombre end local function safeIndex(tabla, key) if not key then return nil end return tabla[key] end local translatedPersonaje = { [generateKey("Sheldon", nil)] = "Ammo Knights", [generateKey("Sheldon", "OC")] = "Sheldon", [generateKey("Annie", "S")] = "Cooler Heads", [generateKey("Annie", "S2")] = "SplatNet Gear Shop", [generateKey("Annie", "S3")] = "Cooler Heads", [generateKey("Jelonzo", nil)] = "Jelly Fresh", [generateKey("Crusty Sean", "S")] = "Shrimp Kicks", [generateKey("Crusty Sean", "S2")] = "Crust Bucket", [generateKey("Flow", nil)] = "Headspace", [generateKey("Jelfonzo", nil)] = "Ye Olde Cloth Shoppe", [generateKey("Bisk", nil)] = "Shella Fresh", [generateKey("Teléfono", nil)] = "Telephone", [generateKey("Teléfono roto", nil)] = "Broken Telephone", [generateKey("Gnarly Eddy", nil)] = "Naut Couture", [generateKey("Jel La Fleur", nil)] = "Man-o'-Wardrobe", [generateKey("Mr. Coco", nil)] = "Crush Station", [generateKey("Harmony", nil)] = "Hotlantis", } local translatedEstado = { ["oculto"] = "hidden", ["orden"] = "order", ["base"] = "Outpost", ["roto"] = "broken", ["cuadrado"] = "square", ["dron"] = "Drone", } local posicionEstado = { ["S2"] = { [generateKey("Telephone", "S2")] = "antes", [generateKey(nil, "S2")] = "despues", }, ["S3"] = { [generateKey("Cuttlefish", "S3")] = { [generateKey("dry", "S3")] = "antes", [generateKey(nil, "S3")] = "despues", }, [generateKey(nil, "S3")] = "despues", }, [generateKey(nil)] = "despues", } -- Función para normalizar el tipo de traducción local function genericType(input) if input == nil then return nil end -- Convertir a minúsculas input = input:lower() -- Tabla de mapeo para reemplazar letras con tildes y diéresis local mapping = { ["á"] = "a", ["é"] = "e", ["í"] = "i", ["ó"] = "o", ["ú"] = "u", ["à"] = "a", ["è"] = "e", ["ì"] = "i", ["ò"] = "o", ["ù"] = "u", ["ä"] = "a", ["ë"] = "e", ["ï"] = "i", ["ö"] = "o", ["ü"] = "u", ["ã"] = "a", ["ẽ"] = "e", ["ĩ"] = "i", ["õ"] = "o", ["ũ"] = "u", ["ñ"] = "n", ["ç"] = "c", ["Á"] = "a", ["É"] = "e", ["Í"] = "i", ["Ó"] = "o", ["Ú"] = "u", ["À"] = "a", ["È"] = "e", ["Ì"] = "i", ["Ò"] = "o", ["Ù"] = "u", ["Ä"] = "a", ["Ë"] = "e", ["Ï"] = "i", ["Ö"] = "o", ["Ü"] = "u", ["Ã"] = "a", ["Ẽ"] = "e", ["Ĩ"] = "i", ["Õ"] = "o", ["Ũ"] = "u", ["Ñ"] = "n", ["Ç"] = "c" } -- Reemplazar letras con tilde y diéresis según la tabla de mapeo for k, v in pairs(mapping) do input = input:gsub(k, v) end -- Eliminar caracteres especiales y espacios input = input:gsub("[%s%p%c]", "") return input end function m.main(frame) local args = frame:getParent().args local juego = args["juego"] or args[1] local nombre = args["nombre"] or args[2] local estado = args["estado"] or args[3] local tamano = args[4] or args["tamaño"] or 24 local icono = args[5] or args["icono"] or nil -- Normalizar el nombre del juego juego = require('Módulo:Acortar_juego').getGame(juego) or juego -- Traducir el personaje local nombreIngles = require('Módulo:Castellano').getPersonaje(nombre) or nombre nombreIngles = translatedPersonaje[generateKey(nombre, juego)] or translatedPersonaje[nombre] or nombreIngles --Otras comprobaciones if tamano == "icono" then icono = tamano or icono tamano = 24 end if estado ~= nil and not tonumber(estado) and estado ~="icono" then estado = genericType(estado) estado = translatedEstado[estado] elseif estado == "icono" then icono = estado or icono estado = nil elseif tonumber(estado) then tamano = tonumber(estado) or tamano estado = nil end -- Lógica para determinar la imagen local constructorProvisional if estado ~= nil then local keyJuego = generateKey(juego) local keyNombre = generateKey(nombreIngles) local keyEstado = generateKey(estado) local subTabla = safeIndex(posicionEstado, keyJuego) if subTabla then local posicion = safeIndex(subTabla[keyNombre], keyEstado) or "despues" else local posicion = "despues" end local posicion = safeIndex(posicionEstado[generateKey(juego)], generateKey(nombreIngles))[generateKey(estado)] or "despues" if posicion == "antes" then constructorProvisional = string.format("[[File:%s Icon %s %s %s.png|%dpx|link=%s]]", juego, estado, nombreIngles, tamano, nombre) else constructorProvisional = string.format("[[File:%s Icon %s %s.png|%dpx|link=%s]]", juego, nombreIngles, estado, tamano, nombre) end else constructorProvisional = string.format("[[File:%s Icon %s.png|%dpx|link=%s]]", juego, nombreIngles, tamano, nombre) end if icono == nil then constructorProvisional = string.format("%s [[%s]]", constructorProvisional, nombre) return constructorProvisional end return constructorProvisional end return m