Formato de números
Manejo de separadores decimales y de agrupación
Problema
Un número grande como 10000.5 se escribe como 10.000,5 en Alemania y 10,000.5 en Estados Unidos. Mostrar el número usando la convención de una región crea confusión para los usuarios de otras regiones, quienes pueden malinterpretar el valor debido a separadores decimales y de agrupación incorrectos.
Solución
Usa un componente de formato dedicado de react-intl, como FormattedNumber. Este componente lee automáticamente el idioma actual de su proveedor y formatea un primitivo number en una cadena que utiliza los separadores decimales y de agrupación correctos, específicos de la configuración regional.
Pasos
1. Crea un componente de cliente para números
Como otros componentes de react-intl, FormattedNumber debe usarse dentro de un componente de cliente.
Crea un nuevo componente, app/components/ProductInfo.tsx, que mostrará un número formateado.
// 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. Pasa opciones de formato
El componente FormattedNumber acepta opciones para controlar la salida:
valuees elnumbera formatear.minimumFractionDigitsymaximumFractionDigitsse usan aquí para forzar la visualización de un lugar decimal (por ejemplo, 4.0).
3. Usa el componente en una página
Ahora puedes usar este componente en cualquier página que muestre información de productos.
// 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 usuario que visite /en verá "Total reviews: 1,234,567" y "Average rating: 4.0". Un usuario que visite /es verá "Total reviews: 1.234.567" y "Average rating: 4,0".