2017-02-08 2 views
0

Ich versuche, locale dynamisch in Java Resource zu setzen wie:
ResourceBundle rb = ResourceBundle.getBundle(pathAndFilename,locale());Java Resource locale() NULL Ausnahme

ich alle Möglichkeiten in meinem folgenden Code zu decken versucht, Browser-Sprache zu erfassen und festgelegt, und wenn nicht vorhanden

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

aber Methode locale() zurückkehrt null_NULL
Bitte raten, wo ich Fehler mache: in Bündeln dann werden en_US könnte als Standardsprache verwendet?

ich viel gesucht, aber nicht in der Lage, meinen Fehler

+1

Fragen Debug-Hilfe zu suchen („warum nicht dieser Code zu arbeiten?“) Muss das gewünschte Verhalten umfassen, um ein bestimmtes Problem oder Fehler und der kürzeste Code erforderlich, um es in der Frage selbst zu reproduzieren. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (http://stackoverflow.com/help/mcve). –

+0

Ich habe weitere Informationen zu der Frage hinzugefügt. Bitte lassen Sie mich wissen, wenn es immer noch nicht klar ist – usr169

Antwort

0

sein kann, Sie werden immer „null“ als Wert in folgende Methode. So ändern als 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; 
} 

Lassen Sie mich wissen, wenn Sie noch Problem konfrontiert

+0

Sie sparen meinen Tag! Ich sortierte dieses Problem für die letzten 3 Stunden, aber konnte diesen Punkt nicht verstehen. Vielen Dank – usr169

0

Versuchen Sie finden Ändern Code in Ihrer setLanguage() -Methode: von Javadoc der Locale-Klasse genommen

639 ISO ist keine stabile Norm- einig Sprachencodes haben sich geändert. Der Konstruktor von Locale erkennt sowohl den neuen als auch den alten Code für die Sprachen, deren Codes sich geändert haben, aber diese Funktion gibt immer den alten Code zurück. Wenn Sie für eine bestimmte Sprache, deren Code überprüfen möchten hat sich geändert, nicht tun:

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

Stattdessen tun

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

Danke für die Optimierung meines Codes und Ihre Beratung, aber wie hilft es mir, null_NULL zu steuern? – usr169

+0

Ich habe nur gehofft, dass der Wert von der erwähnten Methode kommen könnte:/tut mir leid, es hat nicht geholfen. – Nayriva