Affichage des noms et symboles de devises
Afficher les 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 mieux, 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 nom complet localisé ou de code ISO, le tout correctement formaté pour la locale actuelle.
Étapes
1. Créer un composant client pour l'affichage des devises
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>Currency Display Options</h1>
<p>
Default (symbol):
<LocalizedCurrency
value={price}
currency={currency}
displayAs="symbol"
/>
</p>
<p>
Full name (name):
<LocalizedCurrency
value={price}
currency={currency}
displayAs="name"
/>
</p>
<p>
ISO code (code):
<LocalizedCurrency
value={price}
currency={currency}
displayAs="code"
/>
</p>
</div>
);
}
Lors de la visite de /en, vous verrez « 1 250,75 dollars américains » pour l'option 'name'. Lors de la visite de /es, la même ligne s'affichera comme « 1 250,75 dólares estadounidenses », montrant que le nom de la devise lui-même a été traduit et formaté correctement.