【问题标题】:Java override locale setting for specific localeJava 覆盖特定语言环境的语言环境设置
【发布时间】:2012-10-27 09:56:20
【问题描述】:

我正在使用NumberFormat.getCurrencyInstance().format(amount) 将货币从 BigDecimal 格式化为字符串。这按预期工作,问题是我们的主要目标是荷兰市场,默认的荷兰语格式很奇怪。

让我解释一下,当格式化 -125 时,我得到荷兰语的“€ 125-”(预期为“-€ 125”)。英国按预期工作,给出“-£125.50”。

我可以检查语言环境是否为荷兰语,然后在每次我想格式化小数时提供一个模式。但我更喜欢覆盖荷兰语格式设置的解决方案。我正在考虑类似以下的事情:

Locale nlLocale = new Locale("nl", "NL");
NumberFormat.getCurrencyInstance(new Locale("nl", "NL")).setFormatPattern("€ #");

所以每次我在格式化时使用荷兰语语言环境,我都会得到我的自定义格式。是否存在类似的解决方案?

【问题讨论】:

  • 为什么要更改荷兰语格式?您不会通过选择非标准格式选项(对于荷兰语)来混淆它们。
  • 我使用 close / similair 的 Swing GUI 类,您也可以为分数创建自己的矩阵
  • @Dunes 用户期望的格式不同于 java 为荷兰语提供的格式(减号应该在 nr 前面,而不是后面)。 mKorbel,我考虑过将每次调用都包装为格式,这将是我最后的手段,但我希望我可以覆盖特定语言环境的一些设置

标签: java locale


【解决方案1】:

撇开特定格式是否“正确”的问题不谈,更改“nl”语言环境的货币实例的方法是为数字格式服务实现和配置自定义LocaleServiceProvider。 (提供者类需要继承NumberFormatProvider,但超类javadoc解释了如何配置提供者。)

提供者需要为您关心的特定情况返回一个非标准的NumberFormat 实例,但在其他情况下(可能)委托给默认提供者。

【讨论】:

    【解决方案2】:

    使用applyPattern 方法:

    final DecimalFormat df = (DecimalFormat)NumberFormat.getCurrencyInstance(locale);
    df.applyPattern("¤#,##0.##");
    

    【讨论】:

    • 使用“getCurrencyInstance”时,您会创建格式化程序的新实例。因此,每次要格式化时,您都必须应用特定的模式。我想设置一次格式并将其应用于 getCurrencyInstance 返回的所有格式化程序
    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2013-01-10
    • 2020-04-05
    • 2011-09-20
    相关资源
    最近更新 更多