Modul:CurrencyFormat
Zweck 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 Bearbeiten
Typischerweise wird das Modul nicht direkt eingebunden, sondern über die zugehörige Vorlage.
Direktaufruf Bearbeiten
{{#invoke:CurrencyFormat|main|1234.56|lang=de|currency=CHF}}
→ Gibt: Fr. 1’234.56
Parameter 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 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 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 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