今天,我有一个样式问题:鉴于以下代码,我应该覆盖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()
。
答案 0 :(得分:0)
我最终在我的所有枚举上都有一个方法getMsgKey()
return getClass().getSimpleName() + "_" + name();
这与Internationalization of multiple enums (translation of enum values)相似,但没有EnumTranslator
。