Modul:CurrencyFormat
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