Formatage des nombres
Gestion des séparateurs décimaux et de groupement
Problème
Un grand nombre comme 10000.5 s'écrit 10.000,5 en Allemagne et 10,000.5 aux États-Unis. Afficher le nombre en utilisant la convention d'une région crée de la confusion pour les utilisateurs d'autres régions, qui peuvent mal interpréter la valeur en raison de séparateurs décimaux et de groupement incorrects.
Solution
Utilisez un composant de formatage dédié de react-intl, tel que FormattedNumber. Ce composant lit automatiquement la langue actuelle depuis son fournisseur et formate une primitive number en une chaîne qui utilise les séparateurs décimaux et de groupement corrects, spécifiques à la locale.
Étapes
1. Créer un composant client pour les nombres
Comme les autres composants react-intl, FormattedNumber doit être utilisé dans un composant client.
Créez un nouveau composant, app/components/ProductInfo.tsx, qui affichera un nombre formaté.
// app/components/ProductInfo.tsx
'use client';
import { FormattedNumber } of 'react-intl';
type Props = {
reviewCount: number;
averageRating: number;
};
export default function ProductInfo({ reviewCount, averageRating }: Props) {
return (
<div>
<h3>Product details</h3>
<p>
Total reviews:
{/* Basic number formatting */}
<FormattedNumber value={reviewCount} />
</p>
<p>
Average rating:
{/* Formatting with options */}
<FormattedNumber
value={averageRating}
minimumFractionDigits={1}
maximumFractionDigits={1}
/>
</p>
</div>
);
}
2. Passer les options de formatage
Le composant FormattedNumber accepte des options pour contrôler la sortie :
valueest lenumberà formater.minimumFractionDigitsetmaximumFractionDigitssont utilisés ici pour forcer l'affichage d'une décimale (par exemple, 4,0).
3. Utiliser le composant sur une page
Maintenant, vous pouvez utiliser ce composant sur n'importe quelle page qui affiche des informations produit.
// app/[lang]/page.tsx
import ProductInfo from '@/app/components/ProductInfo';
export default function Home() {
const product = {
reviews: 1234567,
rating: 4.0,
};
return (
<div>
<h1>Welcome</h1>
<ProductInfo
reviewCount={product.reviews}
averageRating={product.rating}
/>
</div>
);
}
Un utilisateur visitant /en verra « Total reviews: 1,234,567 » et « Average rating: 4.0 ». Un utilisateur visitant /es verra « Total reviews: 1.234.567 » et « Average rating: 4,0 ».