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()和我一样:)我现在才加上