【发布时间】:2013-03-26 09:03:53
【问题描述】:
再次讨论了before 以及我想分享“我的”解决方案并要求改进、其他方法或最佳实践的地方。
我有几个需要国际化的枚举(我需要将枚举值翻译成某些语言,以便在 jsf 页面中显示它们)。示例枚举:
public enum TransferStatus {
NOT_TRANSFERRED,
TRANSFERRED
}
翻译例如是Not yet transferred / Transferred, all good
翻译应存储在 MessageBundle(属性文件)中。我正在寻找一个简单、通用的解决方案(最好不需要在所有枚举中编写额外的代码),它在 jsf 方面不需要太多。顺便提一下,当然有可能两个不同的枚举具有相同的枚举值(例如,COMPLETED 这样的值在不同的枚举中具有不同的含义)。
我想出的解决方案:
(1) 像这样在属性文件中存储翻译:
TransferStatus.NOT_TRANSFERRED = Not yet transferred
TransferStatus.TRANSFERRED = Transferred, all good
(2) 制作一个接受枚举并生成查找键的辅助类:
public class EnumTranslator {
public static String getMessageKey(Enum<?> e) {
return e.getClass().getSimpleName() + '.' + e.name();
}
}
(3) 将此代码添加到每个枚举中:
public String getKey() {
return EnumTranslator.getMessageKey(this);
}
(4) 现在,我可以像这样访问我的枚举的翻译值:
<h:outputText value="#{enum[order.transferStatus.key]}" />
这没关系,但我只是不喜欢在每个枚举中添加相同的 getKey() 方法。应该有更好的东西!现在轮到你了,所以:-)
【问题讨论】:
-
您可以将其发布为另一个问题的答案。这样您就会在适当的时候收到其他用户的反馈。
-
谢谢,已完成并在此处链接。
标签: java jsf internationalization enums