目次
きっかけ
月謝袋アプリのスペイン語対応を進める中で、
通貨表示について気になることがありました。
「スペイン語に対応したら、メキシコやアルゼンチンのユーザーも
通貨が自動で切り替わるの?」
調べてみると、Flutterの NumberFormat.currency() は
言語ではなくロケール(地域)を見ていることがわかりました。
コード
final locale = Localizations.localeOf(context).toString();
final format = NumberFormat.currency(
locale: locale,
decimalDigits: 0,
);
たったこれだけで、端末の地域設定に合わせて
通貨が自動で切り替わります。
実際の動作
| 端末の地域設定 | 表示 |
|---|---|
| スペイン語・スペイン(es_ES) | EUR € |
| スペイン語・メキシコ(es_MX) | MXN $ |
| スペイン語・アルゼンチン(es_AR) | ARS $ |
| 日本語(ja_JP) | JPY ¥ |
| 英語・アメリカ(en_US) | USD $ |
スペイン語を話していても、住んでいる国によって
通貨が自動で切り替わるのです!
WEBより有利な理由
WEBブラウザでは通貨を自動判定するのに
IPアドレス取得や追加のAPIが必要になることが多いです。
一方、スマートフォンアプリは
端末のロケール情報を直接取得できるため、
追加実装なしで正確な通貨表示が実現できます。
| WEB | スマホアプリ | |
|---|---|---|
| 通貨の自動判定 | △ 追加実装が必要 | ✅ ロケールから自動取得 |
| 精度 | △ IPは必ずしも正確でない | ✅ 端末設定なので正確 |
| 実装コスト | 高い | 低い |
まとめ
NumberFormat.currency(locale: locale)は言語ではなくロケールを見る- スマホアプリはロケール情報を直接取得できるのでWEBより有利
- たった数行で世界中の通貨に対応できる
海外展開を考えているFlutter開発者の方に
ぜひ参考にしていただければと思います🌍
月謝袋アプリ:App Store / Google Play にて配信中
