2017-02-08 7 views
0

Я пытаюсь установить локаль динамически в Java ResourceBundle, как:
ResourceBundle rb = ResourceBundle.getBundle(pathAndFilename,locale());Java ResourceBundle локали() исключение NULL

Я попытался охватить все возможности в моем следующем коде, чтобы обнаружить язык браузера и установить его, и если не существует в пачках, то 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; 
    } 

но метод локализации() возвращает null_NULL
Пожалуйста посоветуйте, где я делаю ошибку?

Я искал много, но не смогли найти мою ошибку

+1

Вопросы ищут отладки помощи («почему не этот код работает?») Должен включать в себя желаемое поведение, конкретную проблему или ошибки и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). –

+0

Я добавил дополнительную информацию к вопросу. Пожалуйста, дайте мне знать, если все еще не ясно. – usr169

ответ

0

Может быть, вы получаете «нуль» в качестве значения в следующий способ. Так измените его 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; 
} 

Позвольте мне знать, если вы все еще сталкиваются проблему

+0

Вы экономите мой день! Я разбирал эту проблему последние 3 часа, но не смог понять этот момент. большое спасибо – usr169

0

Попробуйте изменить код в SetLanguage() метод: взяты из JavaDoc класса Locale

ISO 639 не является стабильным обычным форматом некоторыми коды языков изменены. Конструктор Locale распознает как новые, так и старые коды для языков, чьи коды были изменены, но эта функция всегда возвращает старый код. Если вы хотите, чтобы проверить на конкретном языке, код которого изменился, не делают:

if (locale.getLanguage().equals("he")) // BAD! 
    ... 

Вместо этого делать

if (locale.getLanguage().equals(new Locale("he").getLanguage())) 
    ... 
+0

Спасибо за оптимизацию моего кода и ваших советов, но как его помощь в управлении null_NULL? – usr169

+0

Я просто надеялся, что это может произойти из упомянутого метода:/sorry, это не помогло. – Nayriva