|
||||||||||
| 前のパッケージ 次のパッケージ | フレームあり フレームなし | |||||||||
ResourceBundle を提供します.
参照先:
説明
| インタフェースの概要 | |
|---|---|
| EnumMessageCode | メッセージコードを定義した列挙が実装するインタフェースです. |
| クラスの概要 | |
|---|---|
| EnumMessageFormatter<T extends Enum<T> & EnumMessageCode> | 列挙に定義された Formatter のパターンを使用してメッセージを組み立てるクラスです. |
| EnumMessageResourceBundle<T extends Enum<T> & EnumMessageCode> | メッセージを定義した列挙を使用するリソースバンドルです. |
| EnumMessageTextFormatter<T extends Enum<T> & EnumMessageCode> | 列挙に定義された MessageFormat のパターンを使用してメッセージを組み立てるクラスです. |
プロパティファイルの代わりに列挙に記述されたメッセージを使用する
ResourceBundle を提供します.
メッセージコードを記述した列挙は,
EnumMessageCode を実装し, 列挙定数ごとに
診断レベル と, ロケールごとのメッセージを持ちます.
列挙がサポートするメッセージのロケールは SUPORTED_LOCALES という名前の
static フィールドに Locale の配列として定義します.
SUPPORTED_LOCALES 配列には Locale.ROOT を含めるべきです.
EnumMessageCode.getMessageFormat(int) の引数には,
SUPPORTED_LOCALES 配列のインデックスがロケールとして渡されます.
メッセージを定義した列挙は次のようになります.
public enum TestMessageCode implements EnumMessageCode {
// 第 2 引数はルートロケールのメッセージ,第 3 引数は日本語ロケールのメッセージ
XXXX(Kind.ERROR, "Error", "エラー"),
YYYY(Kind.WARNING, "Warning", "警告"),
...
;
/** サポートするロケールの配列 */
public static final Locale[] SUPPORTED_LOCALES = new Locale[] {
Locale.ROOT, Locale.JAPANESE };
/** 診断の種類 */
private final Kind kind;
/** メッセージフォーマット */
private final String[] messageFormats;
/**
* インスタンスを構築します.
* 配列の要素は SUPPORTED_LOCALES 配列のロケールに対応するメッセージフォーマットです.
*
* @param messageFormats
* メッセージフォーマットの配列
*/
private TestMessageCode(final Kind kind, final String... messageFormats) {
this.kind = kind;
this.messageFormats = messageFormats;
}
/**
* 診断の種類を返します.
*
* @return 診断の種類
*/
public Kind getKind() {
return kind;
}
/**
* 指定されたロケールのメッセージフォーマットを返します.
*
* @param locale
* ロケール
* @return 指定されたロケールのメッセージフォーマット
*/
public String getMessageFormat(final int locale) {
return messageFormats[locale];
}
}
列挙を指定して ResourceBundle を取得するには,
EnumMessageResourceBundle の
static メソッドを使用します.
ResourceBundle bundle = EnumMessageResourceBundle.getBundle(XxxMessageCode.class);
列挙の文字列表現をキーとしてメッセージを取得することができます.
String message = bundle.getString(WARN.name());
列挙のメッセージとして Formatter のパターンを定義した場合は
EnumMessageFormatter を使用することができます.
public enum YyyMessageCode implements EnumMessageCode {
E0000(Kind.ERROR, "Exception occurred : %1$s%n", "例外が発生しました : %1$s%n"),
...
EnumMessageFormatter<YyyMessageCode> formatter =
new EnumMessageFormatter<TestMessageCode>(YyyMessageCode.class);
String message = formatter.getMessage(E0000, e);
または,
EnumMessageFormatter
の出力先を指定してインスタンス化して使うこともできます.
StringBuilder builder = new StringBuilder();
EnumMessageFormatter<YyyMessageCode> formatter =
new EnumMessageFormatter<YyyMessageCode>(YyyMessageCode.class, builder);
formatter.format(E0000, e); // builder にフォーマットされた文字列が追加される
列挙のメッセージとして MessageFormat のパターンを定義した場合は
EnumMessageTextFormatter を使用することができます.
public enum ZzzMessageCode implements EnumMessageCode {
E0000(Kind.ERROR, "Exception occurred : {0}", "例外が発生しました : {0}"),
...
EnumMessageTextFormatter<ZzzMessageCode> formatter =
new EnumMessageTextFormatter<ZzzMessageCode>(ZzzMessageCode.class);
String message = formatter.getMessage(E0000, e);
|
||||||||||
| 前のパッケージ 次のパッケージ | フレームあり フレームなし | |||||||||