再次讨论了一些已经讨论过的问题before以及我想要共享“我的”解决方案并寻求改进,其他方法或最佳实践的地方。多个枚举的国际化(枚举值的转换)
我有几个枚举,我需要国际化(我需要将枚举值翻译成一些语言才能在jsf页面中显示它们)。 Examle枚举:
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()
方法对每个枚举。应该有更好的东西!现在轮到你了,SO :-)
你可能已经张贴这是一个问题的其他问题。那么你会在适当的时候收到其他用户的反馈。 – 2013-03-26 09:13:08
谢谢,完成并链接到这里。 – 2013-03-26 09:23:33