DanLevy.net

Comprendre les nombres et devises internationaux

Argent local expliqué !

Argent : Localisation (L10n) et Internationalisation (i18n)

Ce ne sont pas seulement des mots pour dominer une partie de Scrabble, la localisation et l’internationalisation désignent le processus qui rend un produit à l’aise dans un autre pays.

Afficher une devise dans le mauvais format local est un indice évident : vous n’avez fourni aucun effort.
Si vous ne pouvez pas formater un prix, comment pourriez‑vous gérer la livraison ?

L’internationalisation est un sujet vaste, couvrant tout, de la traduction de texte au formatage des dates. Dans cet article, nous nous concentrerons sur un sous‑domaine particulier, le formatage des nombres et des devises.

Examinons le formatage dans trois pays de la zone euro, aux États‑Unis et en Inde :

Chaos ! N’est‑ce pas le cas ? Il y a des symboles, des espaces et de la ponctuation partout ! C’est incroyable de voir à quel point l’UE peut s’entendre sur quoi que ce soit ! 😅

Concepts critiques

Avant de plonger dans les solutions, que veut‑on dire par « Les nombres sont locaux » ?

Les nombres sont locaux 🏘️

Chaque locale (Country per ISO 3166) définit des règles de formatage des nombres.

Les règles de formatage des nombres comprennent :

La monnaie est globale 🌎

Une currency désigne une unité monétaire spécifique. (Voir ISO 4217 pour la liste.)

Quand la locale compte​

La plupart des API REST de commerce électronique/paiement manipulent price + currencyCode. Pourquoi aucune locale ?

Les locales sont (généralement) définies au niveau du système d’exploitation ou de l’appareil, et les navigateurs les exposent via navigator.language. Étant donné que chacun de vos utilisateurs peut avoir une locale différente, il n’est logique de formater les nombres et les devises que côté client.

Une solution

Bonne nouvelle ! Les langages de programmation modernes intègrent ce support. En JavaScript, on dispose de la classe Intl et de Intl.NumberFormat !

Voyons un exemple de code :

const number = 1_234_567.89;
/**
* Formate un nombre en devise locale.
* @param {number} amount - Le montant à formater.
* @param {string} currency - Le code devise à 3 lettres.
* @param {string} [locale] - La chaîne de locale de l'utilisateur.
*/
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'));

Si vous devez réaliser des opérations plus complexes, comme calculer des taxes, appliquer des remises ou convertir entre devises, il est recommandé d’utiliser une bibliothèque telle que dinero.js.

Prochaines étapes

Selon vos besoins spécifiques, vous pourriez vouloir explorer des concepts connexes :

Faites‑moi savoir si vous souhaitez voir un futur article sur ces sujets !

JavaScript / TypeScript

Rust

Go