ロケール別の通貨フォーマットの違い

同じ金額がロケールによってどのように異なるフォーマットになるか。記号の配置、小数点・桁区切り、ナロー記号、右から左の通貨フォーマットを解説。

Internationalization

詳細な説明

ロケール固有の通貨フォーマット

同じ金額でも、ユーザーのロケールによって見た目が劇的に異なる場合があります。

記号の位置

ロケール フォーマット
en-US 記号が前、スペースなし $1,234.56
de-DE 記号が後、スペースあり 1.234,56 €
fr-FR 記号が後、細いスペース 1 234,56 €
ja-JP 記号が前、スペースなし ¥1,234

小数点と桁区切り

ロケール 小数点 桁区切り
en-US .(ピリオド) ,(コンマ) 1,234.56
de-DE ,(コンマ) .(ピリオド) 1.234,56
fr-FR ,(コンマ) (細いスペース) 1 234,56
hi-IN .(ピリオド) ,(インド式) 1,23,456.78

インドの数字体系

インドは独自のグループ化システム(ラーク、クロール)を使用:

new Intl.NumberFormat("en-IN", {
  style: "currency",
  currency: "INR",
}).format(1234567.89);
// => "₹12,34,567.89"(₹1,234,567.89ではない)

ベストプラクティス

ロケールフォーマットを手動で構築しないこと。Intl.NumberFormatを使用してブラウザのICUデータに複雑さを処理させる:

function formatMoney(amount, currency, locale) {
  return new Intl.NumberFormat(locale, {
    style: "currency",
    currency: currency,
  }).format(amount);
}

ユースケース

国際アプリケーションを構築するフロントエンド開発者は、通貨フォーマットがロケールによってどのように異なるかを理解する必要があります。Intl.NumberFormatを正しく使用するのが最もシンプルなアプローチですが、基礎となるルールを知ることは、フォーマットの問題のデバッグ、Intlをサポートしないを構築する際に役立ちます。

試してみる — Currency Code Reference

フルツールを開く