没有逗号的Java资源包格式

时间:2013-05-07 03:32:52

标签: java internationalization resourcebundle number-formatting

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

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

...

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,因为那时我失去了在属性文件中更改错误消息中变量顺序的能力。

2 个答案:

答案 0 :(得分:3)

您可以使用子格式。 例如:

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;
}

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

答案 1 :(得分:0)

您始终可以先将号码转换为String

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

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