Dart 中的货币格式(按语言环境)

Currency format (by locale) in Dart

我能够通过以下方式获得货币格式的数字:

final myLocale = Localizations.localeOf(context).toString();
final longNumberFormat = NumberFormat.currency(locale: myLocale, symbol: mySymbol, decimalDigits: 2);
print(longNumberFormat.format(1234));

结果是:

区域设置 'en_US':1,234.00 美元

对于语言环境 'es' 或 'es_AR':1.234,00 $

第一种情况(en_US)是正确的,但最后一种情况(es_AR)是阿根廷西班牙语(我的国家)是错误的,我们不使用符号在最后,我们像美国一样在前面使用它,但是 dots/commas 是正确的。

这是库的错误?有解决办法吗?

谢谢

似乎还没有添加 es_AR,所以它回落到其他东西,也许是 es?。也许你可以贡献包并自己添加?我想这是它应该去的地方 https://github.com/dart-lang/intl/blob/master/lib/number_symbols_data.dart

编辑: 如前所述,该文件是从 CLDR 生成的,因此不应更改 dart 文件。或许您可以向 github 页面提交问题或寻求 Alan Knight 建议的解决方案。

如上所述,es_AR 不在数据中。您不能修改该文件,因为它是从 CLDR 数据生成的,并且会被覆盖。但是您可以在运行时修改它以添加缺少的条目或修改现有的条目。例如,我在这里创建了一个条目,其中我采用 "es" 条目并将货币符号 (\u00a4) 移至开头。

import 'package:intl/intl.dart';
import 'package:intl/number_symbols.dart';
import 'package:intl/number_symbols_data.dart';

main() {
  var argentina = NumberSymbols(
      NAME: "es_AR",
      DECIMAL_SEP: ',',
      GROUP_SEP: '.',
      PERCENT: '%',
      ZERO_DIGIT: '0',
      PLUS_SIGN: '+',
      MINUS_SIGN: '-',
      EXP_SYMBOL: 'E',
      PERMILL: '\u2030',
      INFINITY: '\u221E',
      NAN: 'NaN',
      DECIMAL_PATTERN: '#,##0.###',
      SCIENTIFIC_PATTERN: '#E0',
      PERCENT_PATTERN: '#,##0\u00A0%',
      CURRENCY_PATTERN: '\u00A4#,##0.00\u00A0',
      DEF_CURRENCY_CODE: r'$');

  numberFormatSymbols['es_AR'] = argentina;
  var f = NumberFormat.currency(locale: 'es_AR');
  print(f.format(1234));

}