我想向用户显示他们当前语言环境的货币符号。可以通过以下方式轻松检索语言环境和货币符号:
import 'package:intl/intl.dart';
var localeString = Localizations.localeOf(context).toString();
var _currencySymbol = NumberFormat.simpleCurrency(locale: localeString).currencySymbol;
Run Code Online (Sandbox Code Playgroud)
问题是要检索用户的货币符号,应用程序必须支持用户的语言环境。例如。如果您想向南非用户显示南非兰特的货币,则Locale('en', 'ZA')必须将其添加到当前支持的语言环境中。
在支持的语言环境列表中添加对所有国家/地区的语言环境的支持:
supportedLocales: [
const Locale('en', 'US'), // USD
const Locale('en', 'ZA'), // ZAR
const Locale('en', 'AU'), // AUD
//..... All other locales
],
Run Code Online (Sandbox Code Playgroud)
似乎不可行,并且不会支持将新国家/地区添加到 flutter intl 列表中。是否有更简单/更好的方法来添加对所有国家/地区的语言环境的支持或显示所有语言环境的货币符号?
货币代码以及其他一些本地化信息存储在一个称为number_symbols_data.dart巨大地图的文件中
。
您可以按如下方式从库中导入文件Intl:
import 'package:intl/number_symbols_data.dart';
Run Code Online (Sandbox Code Playgroud)
然后您可以通过以下方式获取货币代码:
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(),
Run Code Online (Sandbox Code Playgroud)
编辑:经过仔细调查,之前的代码将只支持区域设置,_<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(),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2004 次 |
| 最近记录: |