我想向用户显示其当前语言环境的货币符号。 可以通过以下方式轻松检索语言环境和货币符号:
import 'package:intl/intl.dart';
var localeString = Localizations.localeOf(context).toString();
var _currencySymbol = NumberFormat.simpleCurrency(locale: localeString).currencySymbol;
问题是,应用程序必须支持用户的语言环境才能检索用户的货币符号。例如。如果您想向南非的用户显示南非兰特的货币,则必须将Locale('en', 'ZA')
添加到当前支持的语言环境中。
在支持的语言环境列表中添加对所有国家/地区语言的支持:
supportedLocales: [
const Locale('en', 'US'), // USD
const Locale('en', 'ZA'), // ZAR
const Locale('en', 'AU'), // AUD
//..... All other locales
],
似乎不可行,并且不支持将新国家/地区添加到颤抖的国际机场列表中。有没有更简便/更好的方法来增加对所有国家/地区的语言环境的支持或显示所有语言环境的货币符号?
答案 0 :(得分:2)
货币代码以及其他一些本地化信息存储在一个名为
number_symbols_data.dart
作为巨大的地图。
您可以从Intl
库中导入文件,如下所示:
import 'package:intl/number_symbols_data.dart';
然后您可以通过以下方式获取货币代码:
numberFormatSymbols['ar_EG'].DEF_CURRENCY_CODE
。
注意:用所需的本地替换ar_EG
。
如果您想支持所有语言环境,则可以使用
supportedLocales: numberFormatSymbols.keys
.where((key)=>key.toString().contains('_'))
.map((key)=> key.toString().split('_'))
.map((split)=>Locale(split[0],split[1])).toList(),
编辑:经过仔细研究,先前的代码将仅支持具有_<COUNTRY_CODE>
的语言环境,因此,为了支持其他本地语言,应像这样修改
supportedLocales: numberFormatSymbols.keys
//.where((key)=>key.toString().contains('_'))
.map((key)=> key.toString().split('_'))
.map((split)=>Locale(split[0],split.length == 1? null:split[1])).toList(),