代码之家  ›  专栏  ›  技术社区  ›  True Soft

在messageformat的.properties文件中测试空参数

  •  3
  • True Soft  · 技术社区  · 14 年前

    是否可以使用资源束和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" (始终为参数,无需检查 无效的 )
    • getBundle("message.09") = & gt; "Open file" (无参数,无需检查 无效的 )

    我应该在.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
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   Adeel Ansari    14 年前

    你的 .properties 文件,

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

    然后您需要更改代码以进行显式检查 params 对于 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'
    

    现在告诉我问题在哪里?

        2
  •  1
  •   helios    14 年前

    我建议不要尝试更改捆绑功能(即使您有一个封装它的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);
    }