2017-02-08 4 views
0

Je suis en train de définir locale dynamique en Java ResourceBundle comme:
ResourceBundle rb = ResourceBundle.getBundle(pathAndFilename,locale());locale Java ResourceBundle() NULL exception

J'ai essayé de couvrir toutes les possibilités dans mon code ci-dessous pour détecter la langue du navigateur et définir et if not exist en faisceaux puis en_US pourrait être utilisé comme langue par défaut:

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

mais locale de la méthode() est de retour null_NULL
S'il vous plaît indiquer où je fais erreur?

J'ai cherché beaucoup mais incapable de trouver mon erreur

+1

questions visant à obtenir l'aide de débogage (« pourquoi pas ce code fonctionne? ») doit comprendre le comportement souhaité, un problème spécifique ou erreur et le code le plus court nécessaire pour le reproduire dans la question elle-même. Les questions sans énoncé de problème clair ne sont pas utiles aux autres lecteurs. Voir: [Comment créer un exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve). –

+0

J'ai ajouté plus d'informations à la question. S'il vous plaît laissez-moi savoir si ce n'est toujours pas clair – usr169

Répondre

0

Peut-être que vous obtenez « null » en tant que valeur méthode suivante. changer Alors comme 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; 
} 

Laissez-moi savoir si vous rencontrez encore des problèmes

+0

Vous sauvez ma journée! Je triais ce problème pendant les 3 dernières heures mais je n'ai pas pu comprendre ce point. Merci beaucoup – usr169

0

Essayez de changer le code dans votre méthode setLanguage(): provenant Javadoc de classe Locale

ISO 639 n'est pas une normalisation stable certains les codes des langues ont changé. Le constructeur de Locale reconnaît à la fois les nouveaux et les anciens codes pour les langues dont les codes ont changé, mais cette fonction renvoie toujours l'ancien code. Si vous voulez vérifier une langue spécifique dont le code a changé, ne pas faire:

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

Au lieu de cela, faire

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

Merci d'avoir optimisé mon code et vos conseils, mais comment cela m'aider à contrôler null_NULL? – usr169

+0

J'espérais juste que la valeur pourrait provenir de la méthode mentionnée:/désolé, cela n'a pas aidé. – Nayriva