1

今天,我有一个风格问题:给定以下代码,我应该重写Enum#toString()以向应用程序用户呈现本地化字符串还是切换到自定义函数(例如,getLabel()),还是有其他方法可以达到相同的效果?

我主要是在这里保持干燥,所以硬编码资源包前缀不是一种选择。

我有一个像这样的简单枚举:

public enum DUE_DATE {
   START,
   PRESENTED;

   public String toString() {
       return DBResBundle.instance().getString("due_date_lbl_" + name());
   }
}

DBResBundle我可以像msg在 JSF 中那样访问的 ResourceBundle 实现在哪里:

<h:selectOneMenu value="#{m.due_date}" id="due">
  <f:selectItems value="#{dueDates}" var="d" 
    itemLabel="#{msg['due_date_lbl_'.concat(d.name())]}" />
</h:selectOneMenu>

我也在代码(不仅仅是JSF)上下文中使用枚举,但我没有使用toString()那里。

4

1 回答 1

0

我最终getMsgKey()在我的所有枚举上找到了一个基本上可以做到的方法

return getClass().getSimpleName() + "_" + name();

这就像多个枚举的国际化(枚举值的翻译)但没有EnumTranslator.

于 2013-07-19T08:21:45.160 回答