ロケール別の通貨フォーマットの違い
同じ金額がロケールによってどのように異なるフォーマットになるか。記号の配置、小数点・桁区切り、ナロー記号、右から左の通貨フォーマットを解説。
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をサポートしないを構築する際に役立ちます。