如何按国家/地区代码获取货币和货币符号?

Mat*_*ini 7 flutter

我正在将我的应用程序从 Java(Android) 转换为 Flutter(Dart),但找不到从上下文或国家/地区代码获取货币的方法。

Java中的代码:

String country = Locale.getDefault().getCountry();
String currency = Currency.getInstance(new Locale("", country)).getCurrencyCode();
Run Code Online (Sandbox Code Playgroud)

Dart 中的代码:

Locale locale = Localizations.localeOf(context);

String country = locale.countryCode;
Run Code Online (Sandbox Code Playgroud)

小智 16

intl包可以解决问题

import 'package:intl/intl.dart';

void currency() {
    Locale locale = Localizations.localeOf(context);
    var format = NumberFormat.simpleCurrency(locale: locale.toString());
    print("CURRENCY SYMBOL ${format.currencySymbol}"); // $
    print("CURRENCY NAME ${format.currencyName}"); // USD
}
Run Code Online (Sandbox Code Playgroud)

  • @shababhsiddique Locale locale = Localizations.localeOf(context).split('_').last.toLowerCase(); //这应该解决您的用例,它的作用是本地通常返回//带有国家/地区代码的语言代码,例如[en_DE],只传递小写的DE,它应该可以工作。 (3认同)
  • Localizations.localeOf() 返回语言首选项,在大多数手机上为 en_us,NumberFormat.simpleCurrency() 将为不使用美元的人返回 $ (2认同)

小智 11

默认情况下,国家/地区符号以美元为单位,要获取本地符号,请添加如下名称属性(对于尼日利亚 - 奈拉):

import 'package:intl/intl.dart';
import 'dart:io';

String getCurrency() {
  var format = NumberFormat.simpleCurrency(locale: Platform.localeName, name: 'NGN');
  return format.currencySymbol;
}
Run Code Online (Sandbox Code Playgroud)


Ebr*_*man 9

经过长时间搜索这个问题,解决我的问题的唯一解决方案是使用支持您的符号的字体。
\n这是我的符号“\xe2\x82\xba”,支持它的字体是“Roboto”,您可以为文本指定字体,如下所示:

\n\n
  Text(\'\xe2\x82\xba\',\n     style: TextStyle(\n     fontFamily: \'Roboto\',\n      )),\n
Run Code Online (Sandbox Code Playgroud)\n


小智 9

如果您的应用程序支持用户的语言环境,则接受的答案确实有效,但如果您没有明确添加对用户语言环境的支持,则它不起作用。

相反,您可以Platform.localeNamedart:io将采用设备本身的语言环境的包中使用。

例如:

import 'package:intl/intl.dart';
import 'dart:io';

String getCurrency() {
  var format = NumberFormat.simpleCurrency(locale: Platform.localeName);
  return format.currencySymbol;
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用。包括 Platform.localName (3认同)
  • 很棒,因为它不需要上下文 (2认同)