DanLevy.net

Internationale Zahlen und Währungen verstehen

Lokale Währungen – einfach erklärt!

Geld: Lokalisierung (L10n) und Internationalisierung (i18n)

Sie sind nicht nur nützlich, um beim Scrabble zu glänzen. Lokalisierung und Internationalisierung beschreiben den Prozess, ein Produkt so anzupassen, dass es sich in einem anderen Land wie zu Hause anfühlt.

Eine Währung im falschen lokalen Format anzuzeigen, ist ein klares Indiz: Es wurde kein Aufwand betrieben.
Wenn du einen Preis nicht korrekt formatieren kannst, wie willst du dann den Versand abwickeln?

Internationalisierung ist ein breites Feld und reicht von der Textübersetzung bis zur Datumsformatierung. In diesem Beitrag fokussieren wir uns auf einen spezifischen Teilbereich: die Formatierung von Zahlen und Währungen.

Wir vergleichen die Formatierung an drei Eurozone-Staaten, den USA und Indien:

Chaos! Oder? Symbole, Leerzeichen und Trennzeichen wirbeln nur so durcheinander! Es ist schon erstaunlich, wie die EU sich überhaupt auf etwas einigen kann! 😅

Kernkonzepte

Bevor wir uns die Lösungen ansehen: Was genau verstehen wir unter „Zahlen sind lokal“?

Zahlen sind lokal 🏘️

Jede Locale (Ländercodes nach ISO 3166) definiert Regeln für die Formatierung von Zahlen.

Zu den Regeln der Zahlenformatierung gehören:

Währung ist global 🌎

Eine currency bezeichnet eine spezifische Geldeinheit. (Siehe ISO 4217 für eine vollständige Liste.)

Wann die Locale eine Rolle spielt

Die meisten E-Commerce- und Zahlungs-APIs arbeiten mit price + currencyCode. Warum keine Locales?

Locales werden typischerweise auf OS-/Geräteebene festgelegt, und Browser stellen sie über navigator.language bereit. Da jeder Ihrer Nutzer eine andere Locale haben kann, ist es sinnvoll, Zahlen und Währungen clientseitig zu formatieren.

Eine Lösung

Gute Neuigkeiten! Moderne Programmiersprachen bieten dafür native Unterstützung. In JavaScript stehen uns die Intl-Klasse und Intl.NumberFormat zur Verfügung!

Ein kurzer Blick auf den Code:

const number = 1_234_567.89;
/**
* Format a number in local currency.
* @param {number} amount - The amount to format.
* @param {string} currency - The 3-letter currency code.
* @param {string} [locale] - The users locale string.
*/
const formatMoney = (amount, currency, locale = navigator.language) =>
new Intl.NumberFormat(locale, { currency, style: 'currency' })
.format(amount);
console.log('🇩🇪 ' + formatMoney(number, 'EUR', 'de-DE'));
console.log('🇮🇪 ' + formatMoney(number, 'EUR', 'ga-IE'));
console.log('🇫🇷 ' + formatMoney(number, 'EUR', 'fr-FR'));

Für komplexere Aufgaben wie Steuerberechnungen, Rabattanwendungen oder Währungsumrechnungen sollten Sie auf eine Bibliothek wie dinero.js zurückgreifen.

Nächste Schritte

Je nach Ihrem konkreten Use-Case sollten Sie folgende verwandte Themen vertiefen:

Geben Sie Bescheid, falls Sie einen Folgeartikel zu diesen Themen wünschen!