2014-11-23 2 views
8
funktioniert

Ich habe diese Methode auf den meisten Android-API-Versionen laufen App einzurichten Sprache (Strings usw.)Lollipop Set Lokale Standard nicht

protected void setDefaultLocale(Context context, Locale locale) { 
    Locale.setDefault(locale); 
    Configuration appConfig = new Configuration(); 
    appConfig.locale = locale; 
    context.getResources() 
      .updateConfiguration(appConfig, context.getResources().getDisplayMetrics()); 
    System.out.println("trad" + locale.getLanguage()); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
    String language = sharedPref.getString("pref_language", "he_IL"); 
    if (!language.equals("")) 
     setDefaultLocale(this, new Locale(language)); 

    super.onCreate(savedInstanceState); 


} 

Wenn diese Verwendung auf dem Gerät nichts ändern Lutscher laufen.

Wer weiß, wie man das löst?

+0

wo ist Locale Locale = neues Locale ("your_locale"); '? – Riad

+0

Bearbeitete den Beitrag :) – SacreDeveloper

Antwort

0

Endlich die Antwort gefunden.

Die Antwort war "iw" anstelle von he_il.

Zeichenfolge language = sharedPref.getString ("pref_language", "iw");

2

Ich bemerkte ein ähnliches Verhalten in Lollipop, aber nicht in früheren Versionen der API.

In meinem Fall war das Problem, weil ich unterging, wie Sie, der Sprachcode und der Ländercode, aber meine Ressourcenordner waren sprachspezifische „Werte-fr“ nur und „Werte-es“ usw.

Wenn Sie diese Zeile gesetzt

String language = sharedPref.getString("pref_language", "he_IL"); 

zu

String language = sharedPref.getString("pref_language", "he"); 

funktioniert es wie erwartet?

Ich brauchte nur den Sprachcode, also habe ich nur das gelöst.

+0

thx, das Problem war iw. + 1 – SacreDeveloper

23

Antworten über Arbeit, sondern nur für die Sprache, wenn Sie zum Beispiel verwenden mag:

NumberFormat numberFormat = NumberFormat.getCurrencyInstance(Locale.getDefault()); 

das Standardgebietsschema vor dem Ändern, funktionieren nicht mehr wie in früheren Android-Versionen.

Hat die Art und Weise geändert, wie das Gebietsschema initialisiert wurde (ich weiß nicht warum, ich habe einen Blick in die API geworfen und sagt nichts).

So ändern Sie die Art und Weise Sie Ihren Ort initialisieren, von hier:

Locale locale = Locale("en_US") 

dazu:

Locale locale = new Locale("en", "US"); 

und es wirkt wie ein Zauber :)

Hope this jemand hilft bei der die Zukunft.

Prost

+1

Ja, du hast meinen Schlaf gerettet. – Nostradamus