Ir al contenido

Módulo:Wikidata/Units

Tü Wikipeetia

La documentación para este módulo puede ser creada en Módulo:Wikidata/Units/doc

-- 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 = { -- any llum
		plural = "anys llum",
		},
	Q573 = { -- dia
		ucode = "dies",
		},
	Q4917 = { -- dòlar dels Estats Units
		ucode = "$", -- reiteratiu
		},
	Q5151 = { -- mes
		plural = "mesos",
		},
	Q11229 = { -- percentatge
		plural = "percentatge",
		ucode = "%", -- reiteratiu
		},
	Q11573 = { -- metre
		ucode = "m", -- reiteratiu
		},
	Q25267 = { -- grau Celsius
		plural = "graus Celsius",
		},
	Q42289 = { -- grau Fahrenheit
		plural = "graus 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
		label = "revolució",
		ucode = "RPM", -- WD: rev/min
		},
    Q209426 = { -- minut d'arc
		label = "minut",
		},
	Q483261 = { -- unitat de massa atòmica
		ucode = "uma", -- WD: u
		},
	Q524410 = { -- mil milions d'anys
		plural = "mil milions d'anys",
		},
	Q550207 = { -- dòlar Geary-Khamis
		plural = "dòlars Geary-Khamis",
		ucode = "$",
		},
	Q712226 = { -- quilòmetre quadrat
		ucode = "km²", -- reiteratiu
		},
	Q743895 = { -- pulsacions per minut
		plural = "pulsacions per minut",
		ucode = "ppm",
		},
	Q829073 = { -- segon d'arc
		label = "segon",
		ucode = "″", -- WD amb cometes rectes
		},
	Q1463969 = { -- watt per metre-kelvin
		ucode = "W/(m·K)", -- WD: W m⁻¹ K⁻¹
		},
	Q2080811 = { -- fracció volumètrica
		label = "percentatge en volum",
		plural = "percentatge en volum",
		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
		plural = "amper per volt-metre",
		},
	Q20966455 = { -- joule per mol-kelvin
		ucode = "J/mol·K", -- WD: J K⁻¹ mol⁻¹
		},
	Q21127659 = { -- gram per 100 grams de dissolvent
		ucode = "g/100 g dissolvent",
		},
	Q23977060 = { -- decibel relatiu a 1 picaWatt
		ucode = "dB re 1pW", 
		},
	Q24564698 = { -- anys (d'edat)
		plural = "anys",
		},
	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
}