它是可能的,资源包和MessageFormat:具有以下结果呢?

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

每一例子,我在互联网上找到的与行星,用磁盘上的文件等等。

我只需要检查如果一个参数 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)

我应该怎么写我的。性文件 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
有帮助吗?

解决方案

你的 .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'

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

其他提示

我会建议不要试图改变束功能性(即使你有一个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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top