我在为我的网站添加多语言时遇到了一些麻烦。
使用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>
答案 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