3

使用资源包和 MessageFormat 是否有可能得到以下结果?

  • 当我打电话getBundle("message.07", "test")"Group test"
  • 当我打电话getBundle("message.07", null)"No group selected"

我在 Internet 上找到的每个示例都与行星、磁盘上的文件等有关。

我只需要检查资源包的属性文件中是否存在null或不存在)一个参数。我希望为空参数找到一种特殊的格式,例如{0,choice,null#No group selected|notnull#Group {0}}.

我用来获取捆绑包的方法是:

public String getBundle(String key, Object... params) {
  try {
    String message = resourceBundle.getString(key);
    if (params.length == 0) {
      return message;
    } else {
      return MessageFormat.format(message, params);
    }
  } catch (Exception e) {
    return "???";
  }
}

我也将此方法用于其他捆绑包,例如

  • getBundle("message.08", 1, 2)=> "Page 1 of 2"(总是参数,不需要检查null
  • getBundle("message.09")=> "Open file"(无参数,无需检查null

我应该在我的 .properties 文件中写什么message.07来描述结果?
我现在拥有的是:

message.07=Group {0} 
message.08=Page {0} of {1}    # message with parameters where I always send them
message.09=Open file          # message without parameters
4

2 回答 2

1

我建议不要尝试更改捆绑功能(即使您有一个封装它的 getBundle 方法)。

只需在您的代码中执行以下操作:

getBundle(param == null? "message.07.null": "message.07", param)

或者制作另一种方法:

getBundleOrNull("message.07", param, "message.07.null")

确实如此

public String getBundleOrNull(String key, value, nullKey) {
   return getBundle(value == null? nullKey: key: value);
}
于 2010-01-19T11:22:14.820 回答
0

你的.properties档案,

message.07=Group {0} 
message.08=Page {0} of {1}
message.09=Open file
message.null = No group selected

然后您需要更改代码以明确params检查null. 如果null那么你可以做类似的事情resourceBundle.getString(NULL_MSG)NULL_MSG这会在哪里,

private static final String NULL_MSG = "message.null";

所以,现在你原来的方法会变成这样。

public String getBundle(String key, Object... params) {
  String message = null;
  try {
    if (params == null) {
      message = resourceBundle.getString(NULL_MSG);
    } else {
      message = MessageFormat.format(resourceBundle.getString(key), params);
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
  return message;
}

像下面这样调用我的方法,

getBundle("message.07", "test") // returning 'Group test'
getBundle("message.07", null) // returning 'No group selected'
getBundle("message.08", 1, 2) // returning 'Page 1 of 2'
getBundle("message.08", null) // returning 'No group selected'
getBundle("message.09", new Object[0]) // returning 'Open file'
getBundle("message.09", null) // returning 'No group selected'

现在告诉我问题出在哪里?

于 2010-01-18T11:34:42.223 回答