Affichage des noms et symboles de devises
Présentation des informations de devise de manière localisée
Problème
Une application doit faire référence à une devise, comme 'USD'. Afficher simplement ce code est cryptique. Afficher le nom complet 'US Dollar' est préférable, mais ce nom lui-même doit être traduit ('dólar estadounidense', 'Dollar américain'). De plus, le symbole correct ($, US$, CA$) peut être ambigu sans contexte.
Solution
Utilisez le composant FormattedNumber de react-intl avec l'option currencyDisplay. Cela vous permet d'afficher une devise sous forme de symbole (par défaut), de son nom localisé complet, ou de son code ISO, tout en étant correctement formaté pour la locale actuelle.
Étapes
1. Créer un composant client pour l'affichage de devise
Le composant FormattedNumber doit être utilisé à l'intérieur d'un composant client. Créez un fichier app/components/LocalizedCurrency.tsx qui prend l'option currencyDisplay comme prop pour le rendre réutilisable.
// app/components/LocalizedCurrency.tsx
'use client';
import { FormattedNumber } from 'react-intl';
type Props = {
value: number;
currency: string;
displayAs: 'symbol' | 'name' | 'code';
};
export default function LocalizedCurrency({
value,
currency,
displayAs,
}: Props) {
return (
<FormattedNumber
value={value}
style="currency"
currency={currency}
currencyDisplay={displayAs}
/>
);
}
Ce composant accepte maintenant une prop displayAs qui contrôle directement l'option currencyDisplay.
2. Utiliser le composant sur une page
Vous pouvez maintenant utiliser ce composant sur une page pour afficher les différents formats de devise en modifiant la prop displayAs.
// app/[lang]/page.tsx
import LocalizedCurrency from '@/app/components/LocalizedCurrency';
export default function Home() {
const price = 1250.75;
const currency = 'USD';
return (
<div>
<h1>Options d'affichage de devise</h1>
<p>
Par défaut (symbole) :
<LocalizedCurrency
value={price}
currency={currency}
displayAs="symbol"
/>
</p>
<p>
Nom complet (name) :
<LocalizedCurrency
value={price}
currency={currency}
displayAs="name"
/>
</p>
<p>
Code ISO (code) :
<LocalizedCurrency
value={price}
currency={currency}
displayAs="code"
/>
</p>
</div>
);
}
Lorsque vous visitez /en, vous verrez "1,250.75 US dollars" pour l'option 'name'. Lorsque vous visitez /es, la même ligne affichera "1.250,75 dólares estadounidenses", montrant que le nom de la devise lui-même a été traduit et formaté correctement.