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

时间:2019-06-29 16:19:00

标签: flutter dart

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

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
  ],

似乎不可行,并且不支持将新国家/地区添加到颤抖的国际机场列表中。有没有更简便/更好的方法来增加对所有国家/地区的语言环境的支持或显示所有语言环境的货币符号?

1 个答案:

答案 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(),