DanLevy.net

Internationale Zahlen und Währungen verstehen

Lokalisiertes Geld erklärt!

Geld: Lokalisierung (L10n) und Internationalisierung (i18n)

Sie sind nicht nur dafür da, eine Partie Scrabble zu gewinnen. Lokalisierung und Internationalisierung bezeichnen den Prozess, ein Produkt in einem anderen Land wie zu Hause wirken zu lassen.

Eine Währung im falschen lokalen Format anzuzeigen ist ein totes Indiz: Du hast dir keine Mühe gegeben.
Wenn du keinen Preis formatieren kannst, wie sollst du dann mit dem Versand umgehen?

Internationalisierung ist ein großes Thema, das alles von Textübersetzung bis hin zur Datumsformatierung abdeckt. In diesem Beitrag konzentrieren wir uns auf ein bestimmtes Unterthema: die Formatierung von Zahlen und Währungen.

Schauen wir uns die Formatierung in drei Euro-Ländern sowie den USA und Indien an:

Chaos, nicht wahr? Symbole, Leerzeichen und Satzzeichen fliegen nur so durch die Gegend! Es ist erstaunlich, worauf sich die EU überhaupt einigen kann! 😅

Wichtige Konzepte

Bevor wir uns mit Lösungen befassen: Was bedeutet „Zahlen sind lokal”?

Zahlen sind lokal 🏘️

Jedes Gebietsschema (Land gemäß ISO 3166) definiert Regeln für die Formatierung von Zahlen.

Regeln zur Zahlenformatierung umfassen:

Währung ist global 🌎

Eine Währung bezieht sich auf eine bestimmte Geldeinheit. (Siehe ISO 4217 für eine Liste.)

Wenn das Gebietsschema wichtig wird

Die meisten E-Commerce-/Zahlungs-REST-APIs arbeiten mit price + currencyCode. Warum keine Gebietsschemata?

Gebietsschemata werden typischerweise auf Betriebssystem-/Geräteebene festgelegt, und Browser machen sie über navigator.language verfügbar. Da jeder deiner Nutzer ein anderes Gebietsschema haben könnte, ist es nur sinnvoll, Zahlen und Währungen clientseitig zu formatieren.

Eine Lösung

Ok, gute Nachricht! Moderne Programmiersprachen haben eingebaute Unterstützung dafür. In JavaScript gibt es die Intl-Klasse und Intl.NumberFormat!

Schauen wir uns etwas Code an:

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'));

Wenn du komplexere Aufgaben erledigen musst, wie Steuerberechnungen, Rabattanwendungen oder Währungsumrechnungen, solltest du eine Bibliothek wie dinero.js verwenden.

Nächste Schritte

Je nach deinen konkreten Anforderungen solltest du verwandte Konzepte erkunden:

Lass mich wissen, wenn du einen zukünftigen Artikel zu diesen Themen sehen möchtest!