ロケールの通貨記号を取得する 質問する

ロケールの通貨記号を取得する 質問する

特定の通貨文字列 ("GBP"、"USD" など) の通貨記号を取得するにはどうすればよいでしょうか。私が思いついた最善の方法は途方もなく長いようです。別の方法がありますか。それとも、ルックアップ テーブルを使用する方がよいでしょうか。

const userLocale = "EN-gb";
const userCurrency = "GBP";
const withValueEl = document.querySelector(".withValue");
const withoutValueEl = document.querySelector(".withoutValue");
const valueWithCurrency = Number(0).toLocaleString(userLocale, {
  style: "currency",
  currency: userCurrency,
  minimumFractionDigits: 2
});
const valueWithoutCurrency = valueWithCurrency.replace(Number(0).toLocaleString(userLocale, {
  minimumFractionDigits: 2
}), "")

withValueEl.innerHTML = valueWithCurrency
withoutValueEl.innerHTML = valueWithoutCurrency
With value:<span class="withValue"></span><br /> Without value:<span class="withoutValue"></span><br />

ベストアンサー1

必要な機能とは関係のない DOM セレクターと値挿入ロジックをすべて含めると、実際よりも多くの作業が必要に見えます。シンボルの抽出は非常に簡単です。

const getCurrencySymbol = (locale, currency) => (0).toLocaleString(locale, { style: 'currency', currency, minimumFractionDigits: 0, maximumFractionDigits: 0 }).replace(/\d/g, '').trim()

または、es6 を使用していない場合は:

function getCurrencySymbol (locale, currency) {
  return (0).toLocaleString(
    locale,
    {
      style: 'currency',
      currency: currency,
      minimumFractionDigits: 0,
      maximumFractionDigits: 0
    }
  ).replace(/\d/g, '').trim()
}

オプションtoLocaleStringは冗長なので、これについてできることはあまりありません。ただし、コンストラクNumberターを使用する必要はありません (実際には絶対に)。小数点や区切り文字のない通貨値を取得する場合は、数字を削除して記号だけを残すのは簡単です。ロケールと通貨によっては、記号が常に 1 文字であるとは限らないため、このようなアプローチを取る必要があります。たとえば、次のようになります。

getCurrencySymbol('en-US', 'CNY') // CN¥
getCurrencySymbol('zh-CN', 'CNY') // ¥

結果をトリミングするのも良い考えです。.trim()例のように結果に連鎖するか、正規表現を更新して空白を含めることができます。これは、0~9 の数字にしか機能しないため、やや単純なアプローチであることに注意してください。アラビア語 (٠١٢٣٤٥٦٧٨٩) などの他の数字を含める必要がある場合は、正規表現を更新して Unicode の範囲を含める必要があります。/[0-9\u0660-\u0669]/g同様の方法で、サポートする必要がある他の数値システムを追加する必要があります。

ローカリゼーションは簡単な問題ではないので、通貨コードをシンボルマップに使う方が理にかなっているかもしれません。これです

おすすめ記事