私は列挙型を持っていて、次のように国際化しようとしました:
public enum ActivityEnum {
PROJECT_CREATED, PROJECT_EDITED, PROJECT_DONATION;
@Override
public String toString() {
switch (this) {
case PROJECT_CREATED:
return Messages.get("activity.project.created");
case PROJECT_EDITED:
return Messages.get("activity.project.edited");
case PROJECT_DONATION:
return Messages.get("activity.project.donation");
default: return super.toString();
}
}
private ActivityEnum activityEnum;
public ActivityEnum getActivityEnum() {
return activityEnum;
}
public void setActivityEnum(ActivityEnum activityEnum) {
this.activityEnum = activityEnum;
}
}
ここで、messages.propertiesで定義されているキーには、次のような文字列フォーマッターが含まれていることに注意してください。
activity.project.created = User <%s> created project <%s>
問題は、コード内の他の場所でこの列挙型を使用して何かを実行すると、次のような例外がスローされることです。
MissingFormatArgumentException occured : Format specifier 's'
したがって、基本的には、列挙型クラスでキーを取得するときにtoString
、フォーマット用の引数も適用する必要がありますが、これは後でその列挙型を使用する場合にのみ行います...
activity.summary = String.format(activityEnum.toString(), args);
これを処理する方法を教えてください。
更新:
私が古典的な方法を使用する場合、すべてがうまく機能します:
PROJECT_CREATED("User <%s> created project <%s>"), PROJECT_EDITED(
"User <%s> edited project <%s>"), PROJECT_DONATION(
"User <%s> made a donation of <%d> to project <%s>");
しかし、これには国際化がありません。