我应该重写Enum.toString()来本地化枚举的标签吗?

时间:2013-07-18 11:15:13

标签: java jsf localization

今天,我有一个样式问题:鉴于以下代码,我应该覆盖Enum#toString()向应用程序用户呈现本地化字符串或切换到自定义函数(例如,getLabel())或者是有另一种方法可以达到同样的效果吗?

我主要是在这里保持DRY之后,因此硬编码资源包前缀不是一种选择。

我有一个简单的枚举:

public enum DUE_DATE {
   START,
   PRESENTED;

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

其中DBResBundle是我的ResourceBundle实现,我可以在JSF中以msg的形式访问,如下所示:

<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()

1 个答案:

答案 0 :(得分:0)

我最终在我的所有枚举上都有一个方法getMsgKey()

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

这与Internationalization of multiple enums (translation of enum values)相似,但没有EnumTranslator