Flutter 如何添加对所有语言环境的支持';在Flitter应用程序中输入货币符号
我想向用户显示其当前区域设置的货币符号。 可以使用以下工具轻松检索区域设置和货币符号:Flutter 如何添加对所有语言环境的支持';在Flitter应用程序中输入货币符号,flutter,dart,Flutter,Dart,我想向用户显示其当前区域设置的货币符号。 可以使用以下工具轻松检索区域设置和货币符号: import 'package:intl/intl.dart'; var localeString = Localizations.localeOf(context).toString(); var _currencySymbol = NumberFormat.simpleCurrency(locale: localeString).currencySymbol; 问题在于,要检索用户的货币符号,应
import 'package:intl/intl.dart';
var localeString = Localizations.localeOf(context).toString();
var _currencySymbol = NumberFormat.simpleCurrency(locale: localeString).currencySymbol;
问题在于,要检索用户的货币符号,应用程序必须支持用户的区域设置。例如,如果您想向南非的用户显示南非兰特货币,则必须将Locale('en','ZA')
添加到当前支持的Locale
在“支持的地区”列表中添加对所有国家/地区的地区的支持:
supportedLocales: [
const Locale('en', 'US'), // USD
const Locale('en', 'ZA'), // ZAR
const Locale('en', 'AU'), // AUD
//..... All other locales
],
似乎不可行,也不支持将新的国家添加到颤振国际列表中。是否有更简单/更好的方法来添加对所有国家/地区的支持或显示所有地区的货币符号?货币代码和一些其他本地化信息存储在一个名为
number\u symbols\u data.dart
作为一个巨大的地图
您可以从Intl
库导入文件,如下所示:
import 'package:intl/number_symbols_data.dart';
然后,您可以通过以下方式获取货币代码:
numberFormatSymbols['ar\u EG'].DEF\u CURRENCY\u code
注意:将ar\u EG
替换为所需的本地代码
如果要支持所有区域设置,可以使用
supportedLocales: numberFormatSymbols.keys
.where((key)=>key.toString().contains('_'))
.map((key)=> key.toString().split('_'))
.map((split)=>Locale(split[0],split[1])).toList(),
编辑:经过仔细研究后,前面的代码将只支持具有\uu
的区域设置,因此为了支持其他区域设置,应该像这样修改代码
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(),
要使用
Localizations.localeOf(context)
获取所需的区域设置,Flatter应用程序需要支持该区域设置,这让我回到了我最初的问题,我如何支持我的Flatter应用程序中的所有区域设置?不幸的是Localizations.localeOf(context).toString()
只返回“en”而不是“en\u US”如果使用supportedLocales:numberFormatSymbols.keys.map((key)=>Locale(key)).toList()
。这意味着$符号始终作为区域设置的货币符号返回。返回“en”的原因是“en”与“en_US”、“en_AU”、“en_ZA”等一起包含在区域设置列表中。如果从数字格式符号中删除“en”,这将导致区域设置默认为“en”而不是“en_AU”。键映射正确的返回“en_XX”区域设置。@PetriOosthuizen感谢您发现这一点,我过滤了区域设置,现在它按预期工作,请在完成后重新检查答案correction@PetriOosthuizen别忘了。toList()和我一样:)我现在才加上