gpt4 book ai didi

java - 枚举国际化异常

转载 作者:行者123 更新时间:2023-12-01 15:27:05 28 4
gpt4 key购买 nike

我有一个枚举,我尝试将其国际化,如下所示:

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 枚举类中获取 key 时,也应用用于格式化的参数,但我只在稍后使用该枚举时才这样做...

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

但这没有国际化。

最佳答案

  • 在构造函数中传递 key 并将其存储在成员字段中
  • 编写如下方法:

    公共(public)字符串 toDisplayString(字符串... args){ ...}

  • 去掉 switch 语句

关于java - 枚举国际化异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10033855/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com