我试图在java ResourceBundle中动态设置语言环境,如:
ResourceBundle rb = ResourceBundle.getBundle(pathAndFilename,locale());
我尝试在以下代码中涵盖所有可能性来检测浏览器语言并设置它,如果不存在于bundle中,则en_US可以用作默认语言:
private Locale setLanguage(){
Locale locale = request.getLocale();
if (locale.getLanguage().equals("ar")){
locale = new Locale("ar", "AE");
}
else if (locale.getLanguage().equals("fa")){
locale = new Locale("fa", "IR");
}
else if (locale.getLanguage().equals("en")){
locale = new Locale("en", "US");
}
else{
locale = new Locale("en", "US");
}
return locale;
}
private Locale locale(){
Locale locale=null;
if(country == null){
locale = setLanguage();
}else{
locale = new Locale(language, country);
}
return locale;
}
但是方法locale()返回 null_NULL
请告诉我哪里出错了?
我搜索了很多但却找不到我的错误
答案 0 :(得分:0)
尝试更改setLanguage()方法中的代码: 取自Locale类的javaDoc
ISO 639不是一个稳定的标准 - 某些语言'代码已经改变。 Locale的构造函数识别代码已更改的语言的新代码和旧代码,但此函数始终返回旧代码。如果您想检查代码已更改的特定语言,请执行以下操作:
if (locale.getLanguage().equals("he")) // BAD!
...
相反,做
if (locale.getLanguage().equals(new Locale("he").getLanguage()))
...
答案 1 :(得分:0)
你可能会得到" null"作为以下方法中的值。因此请将其更改为if(country == null || country.equals("null")){
:
private Locale locale(){
Locale locale=null;
if(country == null || country.equals("null")){
locale = setLanguage();
}else{
locale = new Locale(language, country);
}
return locale;
}
如果您仍然遇到问题,请告诉我