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));
}
我能够通过以下方式获得货币格式的数字:
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));
}