如何在 Flutter 应用程序中添加对所有语言环境货币符号的支持

Pet*_*zen 3 dart flutter

我想向用户显示他们当前语言环境的货币符号。可以通过以下方式轻松检索语言环境和货币符号:

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 列表中。是否有更简单/更好的方法来添加对所有国家/地区的语言环境的支持或显示所有语言环境的货币符号?

Sae*_*bil 5

货币代码以及其他一些本地化信息存储在一个称为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)