【问题标题】:Java resource bundle formatting with out commas不带逗号的 Java 资源包格式
【发布时间】:2013-05-07 03:32:52
【问题描述】:

我有一个 web 服务实现,它验证请求并在响应中写入错误消息。响应不是所需的格式。

错误消息模板位于资源包属性文件中。

...

key=Plant name {0} Plant Id {1}.

...

这是我在验证后收到的错误消息。

Plant name PLANT1 Plant Id 9,905,005.

但所需的输出是数字变量不带逗号。

Plant name WPLANT Plant Id 9905005.

这是我的代码。

private String getErrorMessage(String messageKey, Object... args) {
    ResourceBundle messages = ResourceBundle.getBundle("ErrorMessageResourceBundle");
    MessageFormat formatter = new MessageFormat("");
    formatter.applyPattern(messages.getString(messageKey));
    String output = formatter.format(args);
    return output;
}

我用下面的键和变量调用这个方法。

...
getErrorMessage(key,"PLANT1",9905005)
...

如何更改此代码以获得所需的输出?我更喜欢不包含 %s, %d 的方法,从那时起我就无法在属性文件的错误消息中更改变量的顺序。

【问题讨论】:

    标签: java internationalization resourcebundle number-formatting


    【解决方案1】:

    您可以使用子格式模式。 示例:

    MessageFormat formatter = new MessageFormat("{0} {1,number,###0}");
    

    所以代码应该是这样的:

    private String getErrorMessage(String messageKey, Object... args) {
        ResourceBundle messages = ResourceBundle.getBundle("ErrorMessageResourceBundle");
        MessageFormat formatter = new MessageFormat("{0} {1,number,###0}");
        formatter.applyPattern(messages.getString(messageKey));
    
        String output = formatter.format(args);
        return output;
    }
    

    在此处阅读 Oracle 关于 SubFormatPattern 的文档: http://docs.oracle.com/javase/6/docs/api/java/text/MessageFormat.html#patterns

    【讨论】:

    • 感谢您的回答。但它仍然打印输出 with 逗号。
    【解决方案2】:

    您始终可以先将数字转换为String

    getErrorMessage(key,"PLANT1", String.valueOf(9905005))
    

    这应该可行。我怀疑消息格式化程序 aauto 会根据您的语言环境检测到该数字并将其格式化为一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多