再次討論了一些已經討論過的問題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