为什么ResourceBundle.getBundle(String,Locale)忽略语言环境?

Iva*_*var 4 java multilingual jsp

将多语言添加到我的网站时遇到了一些麻烦。

它可以在使用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;
}
Run Code Online (Sandbox Code Playgroud)

为了进行测试,我在上插入了一个Locale的新实例getBundle,但是如果我的浏览器设置为dutch,它仍然返回dutch翻译,如果浏览器设置为English,它仍返回英语翻译。

Blu*_*zee 5

实际上,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