3

リソースバンドルとMessageFormatを使用すると、次のような結果になる可能性はありますか?

  • getBundle("message.07", "test")私が取得するために呼び出すとき"Group test"
  • getBundle("message.07", null)私が取得するために呼び出すとき"No group selected"

私がインターネットで見つけたすべての例は、惑星、ディスク上のファイルなどです。

リソースバンドルのプロパティファイルに1つのパラメータが存在するnullまたは存在しない)かどうかを確認するだけで済みます。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結果を説明するには、.propertiesファイルに何を書き込む必要がありますか?
私が今持っているのは:

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 に答える