为什么ResourceBundle.getBundle(String,Locale)忽略了Locale?

时间:2013-11-27 11:14:25

标签: java jsp multilingual

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

使用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;
}

出于测试目的,我向getBundle插入了一个新的Locale实例,但是如果我的浏览器设置为dutch,它仍会返回荷兰语翻译,如果浏览器设置为英语,它仍会返回英文翻译。 / p>

1 个答案:

答案 0 :(得分: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