簡體   English   中英

從代碼向Java資源包添加新條目

[英]Add new entry to Java resource bundle from code

我使用Java資源包來本地化我的應用程序,並且我創建了一個函數,該函數從代碼中返回根據資源包本地化的消息……類似這樣:

public String getDescription(String code, ResourceBundle resBundle){
    String returnValue = null;  
    try{
        returnValue=resBundle.getString(code);
    }catch(Exception ex){
        returnValue = null;
    }
}

但是,我想知道是否有可能在不存在通過的代碼的情況下向資源束添加條目,例如:

if(!resBundle.containsKey(code)){
    //This next line is pseudo-code... it is not valid at all
    resBundle.addEntry(code, "xyz");
}

有什么幫助嗎?

您可以嘗試使用Properties類並通過將ResourceBundle的鍵轉換為Stream類來填充它,因為Properties類的功能類似於帶有鍵和值的Map 例如 :

Properties props = new Properties();
    resBundle.keySet().stream().forEach(k -> props.put(k, resBundle.getString(k)));

然后可以使用PropertiesgetProperty()方法,如果找不到指定的鍵(在您的情況下,鍵為code ),則返回在第二個參數中指定的值:

returnValue=props.getProperty(code,"xyz");

我沒有足夠的聲譽,因此我無法在上面的評論中添加評論。 @Elton Hoxha我已經嘗試了如上所述的答案,但是,我無法在以下資源束中添加新密鑰,因為它在開始時為空,因此不會執行foreach循環。 我在網上尋找了解決方案,但仍然無法實現將密鑰添加到捆綁中的功能。 如果您之前遇到過類似的問題,我將非常感謝您的幫助或知識共享。 謝謝!

java.util.MissingResourceException: Can't find resource for bundle org.apache.sling.servlethelpers.MockSlingHttpServletRequest$1, key aps_message

    at java.util.ResourceBundle.getObject(ResourceBundle.java:450)
    at java.util.ResourceBundle.getString(ResourceBundle.java:407)
    at com.day.cq.i18n.I18n.get(I18n.java:607)
    at com.day.cq.i18n.I18n.get(I18n.java:143)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM