Java ResourceBundle locale()NULL异常

时间:2017-02-08 16:47:37

标签: java resourcebundle

我试图在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
请告诉我哪里出错了?

我搜索了很多但却找不到我的错误

2 个答案:

答案 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;
}

如果您仍然遇到问题,请告诉我