Módulo:Convertir
La documentación para este módulo puede ser creada en Módulo:Convertir/doc
local p = {}
local es = mw.language.new('an')
local elementoTabla = require('Módulo:Tablas').elemento
local enlazar = require('Módulo:Wikidata/Formatos').enlazar
local redondear = require('Módulo:Math')._round
-- Constantes
local unidatz = {
['Q794261'] = {
['etiqueta'] = 'metro cubico por segundo',
['abreviadura'] = 'm³/s',
['cambio unidat'] = {
},
['unidat SI'] = true,
},
['Q25343'] = {
['etiqueta'] = 'metro quadrau',
['abreviadura'] = 'm²',
['cambio unidat'] = {
{'Q712226', 1000000, '>'}, -- km²
{'Q35852', 10000, '>'} -- ha
},
['unidat SI'] = true,
},
['Q712226'] = {
['etiqueta'] = 'kilometro quadrau',
['abreviadura'] = 'km²',
['conversionSI'] = { 1000000, 'Q25343'}, -- 1 km² = 1000 000 m²
['unidat SI'] = true,
},
['Q35852'] = {
['etiqueta'] = 'hectaria',
['abreviadura'] = 'ha',
['conversionSI'] = {10000, 'Q25343'}, -- 1 hectaria = 10.000 m²
['unidat SI'] = true,
},
['Q81292'] = {
['etiqueta'] = 'acre',
['enlace'] = 'acre (unidat de superficie)',
['plural'] = 'acres',
['conversionSI'] = { 4046.8564224, 'Q25343'} -- 1 acre = 4046,8564224 m²
},
['Q232291'] = {
['etiqueta'] = 'milla quadrada',
['abreviadura'] = 'mi²',
['conversionSI'] = {2589988.110336, 'Q25343'} -- 1 milla quadrada = 2 589 988,110336 m²
},
['Q216795'] = {
['etiqueta'] = 'dunam',
['conversionSI'] = {1000, 'Q25343'}
},
['Q23931109'] = {
['etiqueta'] = 'dunam metrico',
['conversionSI'] = {1000, 'Q25343'}
},
-- Unidades de longitud
['Q11573'] = {
['etiqueta'] = 'metro',
['abreviadura'] = 'm',
['plural'] = 'metros',
['cambio unidat'] = {
{'Q828224', 1000, '>'}, -- km
},
['unidat SI'] = true,
},
['Q1811'] = {
['etiqueta'] = 'unidat astronomica',
['abreviadura'] = 'ua',
['conversionSI'] = { 149597870691, 'Q11573'}, -- 1 unidat astronomica = 149 597 870 691 metros
['unidat SI'] = true,
},
['Q12129'] = {
['etiqueta'] = 'pársec',
['abreviadura'] = 'pc',
['conversionSI'] = {30856775814913672.7891393795779647161073192116040917980140401922770232921869992968698321353388065559933270120238005882778325, 'Q11573'},
['unidat SI'] = true,
},
['Q531'] = {
['etiqueta'] = 'anyo luz',
--['abreviadura'] = 'mi',
['plural'] = 'anyos luz',
['conversionSI'] = {9460730472580800 , 'Q11573'}, -- 1 anyo luz = 9460730472580800 m
['unidat SI'] = true,
},
['Q93318'] = {
['etiqueta'] = 'milla nautica',
--['abreviadura'] = 'mi',
['plural'] = 'millas náuticas',
['conversionSI'] = {1852 , 'Q11573'}, -- 1 milla nautica = 1852 m
--['unidat SI'] = true,
},
['Q253276'] = {
['etiqueta'] = 'milla',
['abreviadura'] = 'mi',
['conversionSI'] = {1609.344, 'Q11573'} -- 1 milla = 1609,344 m
},
['Q828224'] = {
['etiqueta'] = 'kilometro',
['abreviadura'] = 'km',
['conversionSI'] = { 1000, 'Q11573'}, -- 1 kilometro = 1000 metros
['unidat SI'] = true,
},
['Q3710'] = {
['etiqueta'] = 'piet',
--['abreviadura'] = 'ft',
['plural'] = 'pies',
['conversionSI'] = {0.3048006, 'Q11573'}, -- 1 piet = 0,3048006 m
['enlace'] = 'piet (unidat)',
},
['Q218593'] = {
['etiqueta'] = 'pulgada',
--['abreviadura'] = 'in',
['plural'] = 'pulgadas',
['conversionSI'] = {0.0254, 'Q11573'} -- 1 pulgada = 0,0254 m
},
['Q174728'] = {
['etiqueta'] = 'centimetro',
['abreviadura'] = 'cm',
['conversionSI'] = {0.01, 'Q11573'}, -- 1 centimetro = 0.01 m
['unidat SI'] = true,
},
['Q174789'] = {
['etiqueta'] = 'milimetro',
['abreviadura'] = 'mm',
['conversionSI'] = {0.001, 'Q11573'}, -- 1 milimetro = 0.001 m
['unidat SI'] = true,
},
['Q175821'] = {
['etiqueta'] = 'micrometro',
['abreviadura'] = 'µm',
['conversionSI'] = {0.000001, 'Q11573'}, -- 1 micrometro = 0.000001 m
['unidat SI'] = true,
},
['Q178674'] = {
['etiqueta'] = 'nanometro',
['abreviadura'] = 'nm',
['conversionSI'] = {0.000000001, 'Q11573'}, -- 1 nanometro = 0,000000001 m
['unidat SI'] = true,
},
-- Unidades de masa
['Q11570'] = {
['etiqueta'] = 'kilogramo',
['abreviadura'] = 'kg',
['plural'] = 'kilogramos',
--['cambio unidat'] = {
-- {'Q828224', 1000, '>'}, -- km
--},
['unidat SI'] = true,
},
}
local function formatearMagnitut(cantidad, unidat, opcions)
if not unidadConversion and unidat['cambio unidat'] then
for k, v in pairs( unidat['cambio unidat'] ) do
if cantidad >= v[2] then
return formatearMagnitut(cantidad / v[2], unidatz[v[1]], opcions)
end
end
end
--if true then return require('Módulo:Tablas').tostring(opcions) end
local precision = opcions['precisión'] or 2
unidat.enlace = unidat.enlace or unidat.etiqueta
--if true then return require('Módulo:Tablas').tostring(opcions) end
-- Redondear a dos decimales, formatear y anyadir la unidat enlazada en su caso
if unidat.abreviadura then
return es:formatNum(redondear(cantidad, precision)) .. ' ' .. enlazar(unidat.enlace, unidat.abreviadura, nil, opcions)
elseif cantidad == 1 or not unidat.plural then
return es:formatNum(redondear(cantidad, precision)) .. ' ' .. enlazar(unidat.enlace, unidat.etiqueta, nil, opcions)
else
return es:formatNum(redondear(cantidad, precision)) .. ' ' .. enlazar(unidat.enlace, unidat.plural, nil, opcions)
end
end
function p.amostrarValor(valor, unidatOrichinal, opcions)
if not valor then
return
end
if not unidatOrichinal then
return valor
end
opcions = opcions or {}
--if true then return valor end
local datosUnidatOrichinal = unidatz[unidatOrichinal]
if not datosUnidatOrichinal then
datosUnidatOrichinal = {}
local entidat = mw.wikibase.getEntityObject(unidatOrichinal)
--if true then return require('Módulo:Tablas').tostring(entidat) end
datosUnidatOrichinal.etiqueta = elementoTabla(entidat, 'labels', 'es', 'value')
datosUnidatOrichinal.enlace = elementoTabla(entidat, 'sitelinks', 'eswiki', 'title')
datosUnidatOrichinal.conversionSI = {
[1]=tonumber((elementoTabla(entidat,'claims','P2370',1,'mainsnak','datavalue','value','amount'):gsub('+','') or ''))
, [2]=elementoTabla(entidat,'claims','P2370',1,'mainsnak','datavalue','value','unit'):gsub('^.-/(Q%d+)$', '%1')
}
--if true then return require('Módulo:Tablas').tostring(datosUnidatOrichinal) end
end
--if true then return require('Módulo:Tablas').tostring(opcions) end
local conversionSI = datosUnidatOrichinal.conversionSI
if opcions.unidadConversion and opcions.unidadConversion ~= '' then
elseif not conversionSI then
return formatearMagnitut(tonumber(valor), datosUnidatOrichinal, opcions)
elseif conversionSI and datosUnidatOrichinal['unidat SI'] then
return formatearMagnitut(tonumber(valor) * conversionSI[1], unidatz[conversionSI[2]], opcions)
else
return formatearMagnitut(tonumber(valor), datosUnidatOrichinal, opcions) ..
' (' .. formatearMagnitut(tonumber(valor) * conversionSI[1], unidatz[conversionSI[2]], opcions) .. ')'
end
end
function p.amostrar(frame)
local args = frame.args
return p.amostrarValor(args[1], args[2], {unidadConversion=args[3], ['precisión']=args[4], disp=args.disp,enlace=args.enlace})
end
return p