|
||||||||||
前のパッケージ 次のパッケージ | フレームあり フレームなし |
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);
|
||||||||||
前のパッケージ 次のパッケージ | フレームあり フレームなし |