Modul:Wikidades/Units
Utseende
Moduldokumentasjon
[opprett]
-- syntax:
-- Qxxx = { -- label from Wikidata, as a reference
-- label = "label fixed",
-- plural = "plural fixed",
-- ucode = "unit code to add or to fix",
-- },
local wikidata_units = {
-- Q573 = { -- dia
-- ucode = "dies",
-- },
Q4917 = { -- dòlar dels Estats Units
ucode = "$", -- reiteratiu
},
Q5151 = { -- mes
},
Q11229 = { -- percentatge
ucode = "%", -- reiteratiu
},
Q11573 = { -- metre
ucode = "m", -- reiteratiu
},
Q25267 = { -- grau Celsius
plural = "grader Celsius",
ucode = "°C"
},
Q42289 = { -- grau Fahrenheit
plural = "grader Fahrenheit",
},
-- Q55627 = { -- anys de vida ajustats per discapacitat
-- plural = "anys de vida ajustats per discapacitat",
-- ucode = "AVAD",
-- },
-- Q83327 = { -- electró-volt
-- plural = "electrons-volt",
-- },
Q155009 = { -- Reichsmark
ucode = "ℛℳ",
},
Q206037 = { -- revolucions per minut
ucode = "RPM", -- WD: rev/min
},
Q209426 = { -- minut d'arc
},
Q483261 = { -- unitat de massa atòmica
},
Q524410 = { -- mil milions d'anys
},
Q550207 = { -- dòlar Geary-Khamis
ucode = "$",
},
Q712226 = { -- quilòmetre quadrat
ucode = "km²", -- reiteratiu
},
Q743895 = { -- pulsacions per minut
ucode = "ppm",
},
Q829073 = { -- segon d'arc
},
Q1463969 = { -- watt per metre-kelvin
ucode = "W/(m·K)", -- WD: W m⁻¹ K⁻¹
},
Q2080811 = { -- fracció volumètrica
ucode = "%", -- WD: vol%
},
Q3085309 = { -- joule per quilogram-kelvin
ucode = "J/Kg·K", -- WD: J kg⁻¹ K⁻¹
},
Q6859652 = { -- mil·límetre de mercuri
ucode = "mm Hg", -- WD: mmHg
},
Q20966435 = { -- amper per volt-metre
},
Q20966455 = { -- joule per mol-kelvin
ucode = "J/mol·K", -- WD: J K⁻¹ mol⁻¹
},
Q21127659 = { -- gram per 100 grams de dissolvent
},
Q23977060 = { -- decibel relatiu a 1 picaWatt
},
Q24564698 = { -- anys (d'edat)
},
Q28739766 = { -- coulomb-metre
ucode = "C·m", -- WD: C m
},
}
local function getUnit(amount, label, unitID, code, symbol)
if label == nil then return unitID end
local id_data = wikidata_units[unitID] or {}
local unit_text = ''
if code then
unit_text = id_data.ucode or symbol or id_data.label or label
elseif amount == "1" then
unit_text = id_data.label or label or unitID
else
unit_text = id_data.plural or require("Module:ca-flexió").plural(id_data.label or label)
end
return unit_text
end
local convert_default = {
Q218593 = "Q174789", -- in > mm
Q3710 = "Q174728", -- ft > cm
Q482798 = "Q11573", -- yd > m
Q253276 = "Q828224", -- mi > km
Q232291 = "Q712226", -- mi² > km²
Q128822 = "Q180154", -- nus > km/h
}
-- fraction values are saved in Wikidata as decimal numbers, e.g. P6757
-- this helper function restores the fracion notation with 1 as numerator
local function fraction1(decimal)
decimal = tonumber(decimal)
if decimal >= 1 then
return decimal
end
local precision = 1E-15
local z = decimal
local predenum = 0
local sc, num
local denum = 1
repeat
z = 1 / (z - math.floor(z))
sc = denum
denum = denum * math.floor(z) + predenum
predenum = sc
num = math.ceil(decimal * denum)
until ((math.abs(decimal - (num / denum)) < precision) or (z == math.floor(z)) or num == 1)
return num .. '/' .. denum
end
return {
getUnit = getUnit,
convert_default = convert_default,
fraction1 = fraction1
}