2014-10-08 78 views
4

我有一個枚舉值以utf8格式顯示。正因爲如此,我在jsp視圖中遇到了一些編碼問題。有沒有辦法從我的messages.properties文件中獲取值。如果我在屬性文件中有以下幾行:Spring從屬性文件中獲取枚舉值

shop.first=Первый 
shop.second=Второй 
shop.third=Третий 

如何將它們注入枚舉?

public enum ShopType {  
    FIRST("Первый"), SECOND("Второй"), THIRD("Третий"); 

    private String label; 

    ShopType(String label) { 
     this.label = label; 
    } 

    public String getLabel() { 
     return label; 
    } 

    public void setLabel(String label) { 
     this.label = label; 
    } 
} 
+0

的可能的複製http://stackoverflow.com/問題/ 17167144/make-enum-tostring-localized – dkateros 2014-10-08 06:13:53

回答

3

我經常有類似的用例,我通過把鍵(不是本地化的值)作爲枚舉屬性來處理。使用ResourceBundle(或使用Spring時的MessageSource),我可以在需要時解析任何這樣的本地化字符串。這種方法有兩個優點:

  1. 所有本地化字符串可以存儲到一個單一的文件.properties,這消除了Java類的所有編碼的擔憂;
  2. 它使代碼完全可本地化(實際上,它將是每個語言環境的一個.properties文件)。

這樣,你的枚舉會是這樣的:

public enum ShopType {  
    FIRST("shop.first"), SECOND("shop.second"), THIRD("shop.third"); 

    private final String key; 

    private ShopType(String key) { 
     this.key = key; 
    } 

    public String getKey() { 
     return key; 
    } 
} 

(我刪除了二傳手,因爲一個枚舉屬性應始終只讀不管怎麼說,這是沒有必要的了。)

您的.properties文件保持不變。

現在到了時間來獲得本地化的店鋪名稱...

ResourceBundle rb = ResourceBundle.getBundle("shops"); 
String first = rb.getString(ShopType.FIRST.getKey()); // Первый 

希望這將有助於...

傑夫

+1

請小心使用此方法。 'java.util.ResourceBundle#getBundle(java.lang.String)'不支持'UTF-8'編碼,假定使用'ISO 8859-1'字符編碼。如果你的本地化文件包含這樣的字符,你需要使用'java.util.Properties#load(java.io.Reader)' – GokcenG 2017-10-14 13:10:25