Java如何覆盖特定区域设置的语言环境

5
我正在使用NumberFormat.getCurrencyInstance().format(amount)将货币从BigDecimal格式化为字符串。这个方法正常工作,但问题是我们的主要目标市场是荷兰,而默认荷兰格式有些奇怪。
让我解释一下,当格式化-125时,荷兰地区得到的结果是"€ 125-"(预期结果应该是"-€125")。英国的结果是"-£125.50",符合预期。
我可以检查当前语言环境是否为荷兰,并在每次格式化小数时提供特定的模式。但我更希望有一种方法来覆盖荷兰的格式设置。我考虑了以下解决方案:
Locale nlLocale = new Locale("nl", "NL");
NumberFormat.getCurrencyInstance(new Locale("nl", "NL")).setFormatPattern("€ #");

这样每次在格式化时使用荷兰语区域设置时,我都能获得自定义格式。是否存在类似的解决方案?

你为什么想要更改荷兰格式呢?选择非标准格式选项(对于荷兰人来说)不会让他们感到困惑吗? - Dunes
我在Swing GUI中使用了close / similair类,你也可以创建自己的矩阵来表示分数。 - mKorbel
@Dunes 用户期望的格式与Java提供的荷兰语不同(减号符号应该在数字前面而不是后面)。mKorbel,我考虑将每个对格式的调用进行包装,这将是我的最后一招,但我希望我可以覆盖特定区域设置的某些设置。 - Rob
2个回答

2
暂且不考虑那个特定格式是否“正确”,更改“nl”语言环境下的货币实例的方法是实现和配置一个自定义LocaleServiceProvider来提供数字格式服务。(提供程序类需要子类化NumberFormatProvider,但超类 javadoc 解释了如何配置提供程序。)
提供程序需要针对您关心的特定情况返回非标准的NumberFormat实例,但在其他情况下(可能)委托给默认提供程序。

0
使用 applyPattern 方法:
final DecimalFormat df = (DecimalFormat)NumberFormat.getCurrencyInstance(locale);
df.applyPattern("¤#,##0.##");

当使用'getCurrencyInstance'时,您将创建格式化程序的新实例。因此,每次要进行格式化时都必须应用特定的模式。我想设置一次格式,并将其应用于由'getCurrencyInstance'返回的所有格式化程序。 - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接