Numeri e valute internazionali
Valuta localizzata: spiegata
- Money: Localizzazione (L10n) e Internazionalizzazione (i18n)
- Concetti Critici
- Una Soluzione
- Prossimi Passi
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:
€1,234,567.89Irlanda 🇮🇪1.234.567,89 €Germania 🇩🇪1 234 567,89 €Francia 🇫🇷$1,234,567.89USA 🇺🇸₹12,34,567.89India 🇮🇳
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:
- Separatore decimale: virgola, punto.
- Separatore delle migliaia: virgola, punto, spazio.
- Posizione e spaziatura del simbolo di valuta.
La valuta è globale 🌎
Una currency indica un’unità monetaria specifica. (Vedi ISO 4217 per l’elenco.)
- Definisce un simbolo:
$,€,£,¥. (Spesso riutilizzato.) - Dispone sempre di un codice a 3 lettere:
USD,EUR,GBP,JPY. - Può essere utilizzata o scambiata in “qualsiasi” paese. In teoria.
- La conversione tra valute richiede dati sui tassi di cambio.
- Il valore non varia in base alla locale.
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:
- Best practice per le impostazioni locali dell’utente. Rilevamento + override consentiti. (es. un menu a tendina per la selezione della nazione.)
- Persistenza di numeri interi (archivia i centesimi, non i dollari.)
- Operazioni aritmetiche con le valute. (es. applicazione di un coupon
20% off, calcolo disubTotal + taxes, ecc.) - Tassi di cambio in tempo reale. (Per acquisti al dettaglio, cambi valuta/forex.)
Fammi sapere se vorresti un futuro articolo su questi argomenti!