Anzeige von Währungsnamen und -symbolen

Darstellung von Währungsinformationen in lokalisierter Form

Problem

Eine Anwendung muss auf eine Währung verweisen, wie z.B. 'USD'. Die bloße Anzeige dieses Codes ist kryptisch. Die Anzeige des vollständigen Namens 'US Dollar' ist besser, aber dieser Name selbst muss übersetzt werden ('dólar estadounidense', 'Dollar américain'). Darüber hinaus kann das korrekte Symbol ($, US$, CA$) ohne Kontext mehrdeutig sein.

Lösung

Verwenden Sie die FormattedNumber-Komponente aus react-intl mit der Option currencyDisplay. Dies ermöglicht die Anzeige einer Währung als Symbol (Standard), als vollständigen lokalisierten Namen oder als ISO-Code, wobei alles korrekt für das aktuelle Gebietsschema formatiert wird.

Schritte

1. Erstellen einer Client-Komponente für die Währungsanzeige

Die FormattedNumber-Komponente muss innerhalb einer Client-Komponente verwendet werden. Erstellen Sie eine Datei app/components/LocalizedCurrency.tsx, die die Option currencyDisplay als Prop übernimmt, um sie wiederverwendbar zu machen.

// 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}
    />
  );
}

Diese Komponente akzeptiert jetzt einen displayAs-Prop, der direkt die Option currencyDisplay steuert.

2. Verwenden der Komponente auf einer Seite

Sie können diese Komponente nun auf einer Seite verwenden, um die verschiedenen Währungsformate durch Ändern des displayAs-Props anzuzeigen.

// 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>
  );
}

Beim Besuch von /en sehen Sie "1,250.75 US dollars" für die Option 'name'. Beim Besuch von /es wird dieselbe Zeile als "1.250,75 dólares estadounidenses" gerendert, was zeigt, dass der Währungsname selbst korrekt übersetzt und formatiert wurde.