DanLevy.net

Numeri e valute internazionali

Valuta localizzata: spiegata

Money: Localizzazione (L10n) e Internazionalizzazione (i18n)

Non servono solo a dominare una partita a Scrabble. Localizzazione e internazionalizzazione definiscono il processo di adattamento di un prodotto in modo che risulti naturale in un paese diverso.

Mostrare una valuta con un formato locale errato è un segnale inequivocabile: non ci hai messo alcun impegno.
Se non riesci a formattare un prezzo, come pensi di gestire le spedizioni?

L’internazionalizzazione è un argomento vasto, che spazia dalla traduzione del testo alla formattazione delle date. In questo post ci concentreremo su un sottoargomento specifico, la formattazione di numeri e valute.

Esaminiamo le differenze di formattazione tra tre paesi dell’Eurozona, gli USA e l’India:

Caos, vero? Simboli, spaziatura e punteggiatura volano ovunque! È incredibile come l’UE riesca a mettersi d’accordo su qualcosa! 😅

Concetti Critici

Prima di approfondire le soluzioni, cosa intendiamo con “I numeri sono locali”?

I numeri sono locali 🏘️

Ogni locale (Paese secondo ISO 3166) definisce le regole per la formattazione dei numeri.

Le regole di formattazione dei numeri includono:

La valuta è globale 🌎

Una currency indica un’unità monetaria specifica. (Vedi ISO 4217 per l’elenco.)

Quando la locale conta

La maggior parte delle API REST per e-commerce e pagamenti gestisce solo price + currencyCode. Perché niente locale?

Le impostazioni di locale sono (tipicamente) configurate a livello di SO/dispositivo e i browser le espongono tramite navigator.language. Poiché ogni utente può avere una locale diversa, è logico delegare la formattazione di numeri e valute al client.

Una Soluzione

Ok, buona notizia: i linguaggi di programmazione moderni offrono supporto nativo per questo. In JavaScript, abbiamo la classe Intl e Intl.NumberFormat!

Diamo un’occhiata al codice:

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

Se hai bisogno di operazioni più complesse, come il calcolo delle tasse, l’applicazione di sconti o la conversione tra valute, è il caso di affidarsi a una libreria dedicata come dinero.js.

Prossimi passi

In base alle tue esigenze specifiche, potresti voler esplorare concetti correlati:

Fammi sapere se vorresti un futuro articolo su questi argomenti!