2012-04-05 74 views
0

我有一個枚舉,我想國際化就喜歡:枚舉國際例外

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枚舉類的關鍵,應用也args作爲格式化但這正是我用枚舉我只能做後...

activity.summary = String.format(activityEnum.toString(), args); 

燦你請給我一個如何處理這個問題的建議?

UPDATE

如果我用的是經典的方式,所有的工作很好:

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>"); 

但這是沒有國際化。

回答

1
  • 通過鍵在構造並將其存儲在一個成員字段
  • 寫等的方法:

    公共字符串toDisplayString(字符串...參數){ ... }

  • 擺脫開關語句