Modul:Wikidata.Ca/Units
Penampilan
-- 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 = {
Q531 = { -- tahun cahaya
plural = "tahun cahaya",
},
Q573 = { -- hari
ucode = "hari",
},
-- Q4917 = { -- dolar Amerika Syarikat
-- plural = "AS$",
-- ucode = "$", -- berulang
-- },
Q5151 = { -- bulan
plural = "bulan",
},
Q11229 = { -- peratus
plural = "peratus",
ucode = "%", -- berulang
},
Q11573 = { -- meter
ucode = "m", -- berulang
},
Q25267 = { -- darjah Celsius
plural = "darjah Celsius",
ucode = "°C",
},
Q42289 = { -- darjah Fahrenheit
plural = "darjah Fahrenheit",
ucode = "°F",
},
Q55627 = { -- tahun hayat penyelarasan hilang upaya
plural = "tahun hayat penyelarasan hilang upaya",
ucode = "DALY",
},
Q83327 = { -- elektronvolt
plural = "elektronvolt",
},
Q155009 = { -- Reichsmark
ucode = "ℛℳ",
},
Q206037 = { -- putaran seminit
label = "putaran",
ucode = "rpm", -- WD: rev/min
},
Q209426 = { -- minit arka
label = "minit",
},
Q483261 = { -- unit jisim atom bersatu
ucode = "Da", -- WD: u
},
Q524410 = { -- bilion tahun
plural = "bilion tahun",
},
Q550207 = { -- dolar Geary–Khamis
plural = "dolar Geary–Khamis",
ucode = "$",
},
Q712226 = { -- kilometer persegi
ucode = "km²", -- berulang
},
Q743895 = { -- degupan seminit
plural = "degupan seminit",
ucode = "bpm",
},
Q829073 = { -- saat arka
label = "saat",
ucode = "″", -- WD amb cometes rectes
},
Q1463969 = { -- watt semeter kelvin
ucode = "W/(m·K)", -- WD: W m⁻¹ K⁻¹
},
Q2080811 = { -- pecahan persegi padu
label = "peratus padu",
plural = "peratus padu",
ucode = "%", -- WD: vol%
},
Q3085309 = { -- joule per kilogram kelvin
ucode = "J/Kg·K", -- WD: J kg⁻¹ K⁻¹
},
Q6859652 = { -- milimeter raksa
ucode = "mm Hg", -- WD: mmHg
},
Q20966435 = { -- ampere setiap volt meter
plural = "ampere per volt meter",
ucode = "A/Vm",
},
Q20966455 = { -- joule setiap mol kelvin
ucode = "J/mol·K", -- WD: J K⁻¹ mol⁻¹
},
Q21127659 = { -- gram setiap 100 gram pelarut
ucode = "g/100 g pelarut",
},
Q23977060 = { -- desibel berbanding 1 pikowatt
ucode = "dB re 1pW",
},
Q24564698 = { -- tahun (umur)
plural = "tahun",
},
Q28739766 = { -- meter Coulomb
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
}