Módulo:Convertir
Ir a la navegación
Ir a la búsqueda
La documentación para este módulo puede ser creada en Módulo:Convertir/doc
local p = {}
local es = mw.language.new('es')
local elementoTabla = require('Módulo:Tablas').elemento
local enlazar = require('Módulo:Wikidata/Formatos').enlazar
local redondear = require('Módulo:Math')._round
-- Constantes
local unidades = {
['Q25343'] = {
['etiqueta'] = 'metro cuadrado',
['abreviatura'] = 'm²',
['cambio unidad'] = {
{'Q712226', 1000000, '>'}, -- km²
{'Q35852', 10000, '>'} -- ha
},
['unidad SI'] = true,
},
['Q712226'] = {
['etiqueta'] = 'kilómetro cuadrado',
['abreviatura'] = 'km²',
['conversionSI'] = { 1000000, 'Q25343'}, -- 1 km² = 1000 000 m²
['unidad SI'] = true,
},
['Q35852'] = {
['etiqueta'] = 'hectárea',
['abreviatura'] = 'ha',
['conversionSI'] = {10000, 'Q25343'}, -- 1 hectárea = 10.000 m²
['unidad SI'] = true,
},
['Q81292'] = {
['etiqueta'] = 'acre',
['enlace'] = 'acre (unidad de superficie)',
['plural'] = 'acres',
['conversionSI'] = { 4046.8564224, 'Q25343'} -- 1 acre = 4046,8564224 m²
},
['Q232291'] = {
['etiqueta'] = 'milla cuadrada',
['abreviatura'] = 'mi²',
['conversionSI'] = {2589988.110336, 'Q25343'} -- 1 milla cuadrada = 2 589 988,110336 m²
},
-- Unidades de longitud
['Q11573'] = {
['etiqueta'] = 'metro',
['abreviatura'] = 'm',
['plural'] = 'metros',
['cambio unidad'] = {
{'Q828224', 1000, '>'}, -- km
},
['unidad SI'] = true,
},
['Q1811'] = {
['etiqueta'] = 'unidad astronómica',
['abreviatura'] = 'ua',
['conversionSI'] = { 149597870691, 'Q11573'}, -- 1 unidad astronómica = 149 597 870 691 metros
['unidad SI'] = true,
},
['Q12129'] = {
['etiqueta'] = 'pársec',
['abreviatura'] = 'pc',
['conversionSI'] = {30856775814913672.7891393795779647161073192116040917980140401922770232921869992968698321353388065559933270120238005882778325, 'Q11573'},
['unidad SI'] = true,
},
['Q531'] = {
['etiqueta'] = 'año luz',
--['abreviatura'] = 'mi',
['plural'] = 'años luz',
['conversionSI'] = {9460730472580800 , 'Q11573'}, -- 1 año luz = 9460730472580800 m
['unidad SI'] = true,
},
['Q93318'] = {
['etiqueta'] = 'milla náutica',
--['abreviatura'] = 'mi',
['plural'] = 'millas náuticas',
['conversionSI'] = {1852 , 'Q11573'}, -- 1 milla náutica = 1852 m
--['unidad SI'] = true,
},
['Q253276'] = {
['etiqueta'] = 'milla',
['abreviatura'] = 'mi',
['conversionSI'] = {1609.344, 'Q11573'} -- 1 milla = 1609,344 m
},
['Q828224'] = {
['etiqueta'] = 'kilómetro',
['abreviatura'] = 'km',
['conversionSI'] = { 1000, 'Q11573'}, -- 1 kilómetro = 1000 metros
['unidad SI'] = true,
},
['Q3710'] = {
['etiqueta'] = 'pie',
--['abreviatura'] = 'ft',
['plural'] = 'pies',
['conversionSI'] = {0.3048006, 'Q11573'}, -- 1 pie = 0,3048006 m
['enlace'] = 'pie (unidad)',
},
['Q218593'] = {
['etiqueta'] = 'pulgada',
--['abreviatura'] = 'in',
['plural'] = 'pulgadas',
['conversionSI'] = {0.0254, 'Q11573'} -- 1 pulgada = 0,0254 m
},
['Q174728'] = {
['etiqueta'] = 'centímetro',
['abreviatura'] = 'cm',
['conversionSI'] = {0.01, 'Q11573'}, -- 1 centímetro = 0.01 m
['unidad SI'] = true,
},
['Q174789'] = {
['etiqueta'] = 'milímetro',
['abreviatura'] = 'mm',
['conversionSI'] = {0.001, 'Q11573'}, -- 1 milímetro = 0.001 m
['unidad SI'] = true,
},
['Q175821'] = {
['etiqueta'] = 'micrómetro',
['abreviatura'] = 'µm',
['conversionSI'] = {0.000001, 'Q11573'}, -- 1 micrómetro = 0.000001 m
['unidad SI'] = true,
},
['Q178674'] = {
['etiqueta'] = 'nanómetro',
['abreviatura'] = 'nm',
['conversionSI'] = {0.000000001, 'Q11573'}, -- 1 nanómetro = 0,000000001 m
['unidad SI'] = true,
},
-- Unidades de masa
['Q11570'] = {
['etiqueta'] = 'kilogramo',
['abreviatura'] = 'kg',
['plural'] = 'kilogramos',
--['cambio unidad'] = {
-- {'Q828224', 1000, '>'}, -- km
--},
['unidad SI'] = true,
},
}
local function formatearMagnitud(cantidad, unidad, opciones)
if not unidadConversion and unidad['cambio unidad'] then
for k, v in pairs( unidad['cambio unidad'] ) do
if cantidad >= v[2] then
return formatearMagnitud(cantidad / v[2], unidades[v[1]], opciones)
end
end
end
--if true then return require('Módulo:Tablas').tostring(opciones) end
local precision = opciones['precisión'] or 2
unidad.enlace = unidad.enlace or unidad.etiqueta
--if true then return require('Módulo:Tablas').tostring(opciones) end
-- Redondear a dos decimales, formatear y añadir la unidad enlazada en su caso
if unidad.abreviatura then
return es:formatNum(redondear(cantidad, precision)) .. ' ' .. enlazar(unidad.enlace, unidad.abreviatura, nil, opciones)
elseif cantidad == 1 or not unidad.plural then
return es:formatNum(redondear(cantidad, precision)) .. ' ' .. enlazar(unidad.enlace, unidad.etiqueta, nil, opciones)
else
return es:formatNum(redondear(cantidad, precision)) .. ' ' .. enlazar(unidad.enlace, unidad.plural, nil, opciones)
end
end
function p.mostrarValor(valor, unidadOriginal, opciones)
if not valor then
return
end
if not unidadOriginal then
return valor
end
opciones = opciones or {}
--if true then return valor end
local datosUnidadOriginal = unidades[unidadOriginal]
if not datosUnidadOriginal then
datosUnidadOriginal = {}
local entidad = mw.wikibase.getEntityObject(unidadOriginal)
--if true then return require('Módulo:Tablas').tostring(entidad) end
datosUnidadOriginal.etiqueta = elementoTabla(entidad, 'labels', 'es', 'value')
datosUnidadOriginal.enlace = elementoTabla(entidad, 'sitelinks', 'eswiki', 'title')
datosUnidadOriginal.conversionSI = {
[1]=tonumber((elementoTabla(entidad,'claims','P2370',1,'mainsnak','datavalue','value','amount'):gsub('+','') or ''))
, [2]=elementoTabla(entidad,'claims','P2370',1,'mainsnak','datavalue','value','unit'):gsub('^.-/(Q%d+)$', '%1')
}
--if true then return require('Módulo:Tablas').tostring(datosUnidadOriginal) end
end
--if true then return require('Módulo:Tablas').tostring(opciones) end
local conversionSI = datosUnidadOriginal.conversionSI
if opciones.unidadConversion and opciones.unidadConversion ~= '' then
elseif not conversionSI then
return formatearMagnitud(tonumber(valor), datosUnidadOriginal, opciones)
elseif conversionSI and datosUnidadOriginal['unidad SI'] then
return formatearMagnitud(tonumber(valor) * conversionSI[1], unidades[conversionSI[2]], opciones)
else
return formatearMagnitud(tonumber(valor), datosUnidadOriginal, opciones) ..
' (' .. formatearMagnitud(tonumber(valor) * conversionSI[1], unidades[conversionSI[2]], opciones) .. ')'
end
end
function p.mostrar(frame)
local args = frame.args
return p.mostrarValor(args[1], args[2], {unidadConversion=args[3], ['precisión']=args[4], disp=args.disp,enlace=args.enlace})
end
return p