显示货币名称和符号

以本地化方式显示货币信息

问题

一个应用程序需要引用一种货币,例如“USD”。仅仅显示这个代码会显得晦涩难懂。显示全名“US Dollar”会更好,但这个名称本身需要被翻译(例如“美元”、“dólar estadounidense”、“Dollar américain”)。此外,正确的符号($、US$、CA$)在没有上下文的情况下可能会引起歧义。

解决方案

使用 react-intlFormattedNumber 组件,并结合 currencyDisplay 选项。这允许您以符号(默认)、完整的本地化名称或 ISO 代码的形式显示货币,同时确保根据当前语言环境正确格式化。

步骤

1. 创建一个用于显示货币的客户端组件

FormattedNumber 组件必须在客户端组件中使用。创建一个文件 app/components/LocalizedCurrency.tsx,将 currencyDisplay 选项作为一个属性传递,以便于复用。

// 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 时,您将看到“1,250.75 US dollars”作为“name”选项的显示。当访问 /es 时,同一行将显示为“1.250,75 dólares estadounidenses”,表明货币名称本身已被正确翻译和格式化。