Zum Inhalt springen

Modul:CurrencyFormat

Aus Wikonia


Zweck[Quelltext bearbeiten]

Dieses Modul formatiert eine Zahl als Währungsbetrag, angepasst an die gewünschte Sprache und das Währungssymbol.

Es basiert auf Modul:NumberFormat und wird in der Regel über die Vorlage Vorlage:Währung aufgerufen.

Verwendung[Quelltext bearbeiten]

Typischerweise wird das Modul nicht direkt eingebunden, sondern über die zugehörige Vorlage.

Direktaufruf[Quelltext bearbeiten]

{{#invoke:CurrencyFormat|main|1234.56|lang=de|currency=CHF}}

→ Gibt: Fr. 1’234.56

Parameter[Quelltext bearbeiten]

1 (Pflicht)
Zahl/Betrag
lang
Sprachcode für das Zahlformat (de, at, ch, en). Steuert u. a. Trennzeichen und Position des Symbols.
decimals
Nachkommastellen. Standard: 2
currency
ISO-Währungscode (z. B. EUR, USD, CHF, GBP)

Unterstützte Währungen[Quelltext bearbeiten]

ISO Symbol Position Beispiel (de)
EUR nachgestellt 1.234,56 €
USD $ vorangestellt $1,234.56
CHF Fr. vorangestellt Fr. 1’234.56
GBP £ vorangestellt £1,234.56

Bei unbekannten Codes wird der Code selbst als Symbol genutzt (z. B. „XYZ“).

Fallback-Verhalten[Quelltext bearbeiten]

  • Bei unbekannter Sprache: Darstellung im englischen Format (`1,234.56 $`)
  • Bei unbekannter Währung: Verwendung des Währungscodes als Symbol (`1.234,56 XYZ`)

Hinweis[Quelltext bearbeiten]

Dieses Modul unterstützt keine automatischen Umrechnungen oder Wechselkurse.


-- Modul:CurrencyFormat
local p = {}
local nf = require('Module:NumberFormat')

local currencySymbols = {
	EUR = { symbol = "€", position = "after" },
	USD = { symbol = "$", position = "before" },
	CHF = { symbol = "Fr.", position = "before" },
	GBP = { symbol = "£", position = "before" }
}

local function getSymbol(currency)
	local upper = (currency or ""):upper()
	return currencySymbols[upper] or { symbol = upper, position = "after" }
end

function p.main(frame)
	local args = frame:getParent().args
	local amount = args[1]
	local lang = args.lang or "en"
	local decimals = args.decimals or 2
	local currency = args.currency or "USD"

	local formatted = nf.main{
		getParent = function()
			return { args = {
				amount,
				lang = lang,
				decimals = decimals
			} }
		end
	}

	local symbolData = getSymbol(currency)
	local space = (symbolData.symbol:match("^%a") and " ") or ""

	if symbolData.position == "before" then
		return symbolData.symbol .. space .. formatted
	else
		return formatted .. space .. symbolData.symbol
	end
end

return p