2013-11-27 46 views
2

我在添加多語言到我的網站時遇到了一些麻煩。爲什麼ResourceBundle.getBundle(String,Locale)忽略Locale?

它對jstl的.jsp文件工作正常,但是當我嘗試使用Java代碼獲取翻譯時,它會忽略Locale參數並使用客戶端瀏覽器區域設置。

我:

兩個屬性文件: dictionary.properties,包含:validate.firstname.empty=You have to enter a first name dictionary_nl.properties,包含:validate.firstname.empty=U heeft geen voornaam ingevuld

而這個Java代碼:

public List<String> validate(UserForm user, Locale locale) 
{ 
    List<String> errors = new ArrayList<>(); 
    ResourceBundle resources = ResourceBundle.getBundle("dictionary", new Locale("en")); 

    if (user.getFirstName() == null || user.getFirstName().trim().isEmpty()) 
    { 
     errors.add(resources.getString("validate.firstname.empty")); 
    } 
    return errors; 
} 

出於測試目的,我插入了一個Locale的新實例到getBundle,但是如果我的瀏覽器設置爲荷蘭語,它仍會返回荷蘭語翻譯,如果瀏覽器設置爲英文,則爲英文翻譯。

回答

3

事實上的getBundle()不忽略語言環境,它只是似乎忽略它在你的配置

由於配置中沒有dictionary_en.properties文件,語言「en」的區域設置在ResourceBundle文件搜索中將不起作用。

而是使用new Locale("nl")進行測試,無論在瀏覽器中設置何種語言,您都將獲得荷蘭語翻譯。

文檔中的更多細節:
http://docs.oracle.com/javase/6/docs/api/java/util/ResourceBundle.html#getBundle%28java.lang.String,%20java.util.Locale,%20java.lang.ClassLoader%29

相關問題