通貨名と記号の表示

通貨情報をローカライズされた方法で表示

問題

アプリケーションで「USD」などの通貨を参照する必要があります。単にこのコードを表示するだけでは分かりにくいです。「US Dollar」のようなフルネームを表示する方が良いですが、この名前自体も翻訳する必要があります(「dólar estadounidense」、「Dollar américain」など)。さらに、正しい記号($、US$、CA$)はコンテキストがなければ曖昧になる可能性があります。

解決策

react-intlFormattedNumberコンポーネントをcurrencyDisplayオプションと共に使用します。これにより、通貨をシンボル(デフォルト)、ローカライズされたフルネーム、またはISOコードとして表示でき、すべて現在のロケールに合わせて正しくフォーマットされます。

ステップ

1. 通貨表示用のクライアントコンポーネントを作成する

FormattedNumberコンポーネントはクライアントコンポーネント内で使用する必要があります。再利用可能にするために、currencyDisplayオプションをプロップとして受け取るapp/components/LocalizedCurrency.tsxファイルを作成します。

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

このコンポーネントはdisplayAsプロップを受け取り、それが直接currencyDisplayオプションを制御します。

2. ページでコンポーネントを使用する

これで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>通貨表示オプション</h1>
      <p>
        デフォルト(シンボル):
        <LocalizedCurrency
          value={price}
          currency={currency}
          displayAs="symbol"
        />
      </p>
      <p>
        フルネーム(名前):
        <LocalizedCurrency
          value={price}
          currency={currency}
          displayAs="name"
        />
      </p>
      <p>
        ISOコード(コード):
        <LocalizedCurrency
          value={price}
          currency={currency}
          displayAs="code"
        />
      </p>
    </div>
  );
}

/enにアクセスすると、「name」オプションでは「1,250.75 US dollars」と表示されます。/esにアクセスすると、同じ行が「1.250,75 dólares estadounidenses」と表示され、通貨名自体が正しく翻訳およびフォーマットされていることがわかります。