2013-01-18 8 views
9

Ich ändere das Anwendungsgebietsschema basierend auf der Benutzerauswahl. Unabhängig vom Geräte-Gebietsschema.So rufen Sie das Gebietsschema des Geräts ab, nachdem Sie das Gebietsschema für die Anwendung geändert haben

public void setDefaultLocale(Context context, String locale) { 
     Locale appLoc = new Locale(locale); 
     Locale.setDefault(appLoc); 
     Configuration appConfig = new Configuration(); 
     appConfig.locale = appLoc; 
     context.getResources().updateConfiguration(appConfig, 
       context.getResources().getDisplayMetrics()); 
    } 

Aber ich möchte mit wissen, was das Gerät auch locale sein wird.

Wenn ich versuche, bekomme ich immer das Gebietsschema, das ich auf Anwendung eingestellt habe.

ex: applictaion ist in ENGLISH und Gerät ist in CHINESE. Ich bekomme immer Englisch.

für immer locale verwenden,

Option 1.

String locale = context.getResources().getConfiguration().locale.getCountry(); 

Option 2.

String local_country = ((Activity) context).getBaseContext().getResources().getConfiguration().locale.getCountry(); 

Jede Hilfe sehr geschätzt wird !!!

+0

Ähnliche: http://stackoverflow.com/questions/23348954/android-get-device-locale – trante

Antwort

6

Ich bin absolut nicht sicher, wie tragbare dies auf verschiedene Geräte ist:

try { 
    Process exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.language"}); 
    String locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine(); 
    exec.destroy(); 
    Log.e("", "Device locale: "+locale); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Und wenn Sie das Land Teil wollen: persist.sys.country

+0

Vielen Dank! Es funktioniert für mich! :) – AndroidDev

7

ich etwas Ähnliches gefragt und fand diese Antwort, sorry wenn es zu spät ist:

Um das System locale Verwendung zu finden:

defaultLocale = Resources.getSystem().getConfiguration().locale; 

I t erhält das Systemgebietsschema, unabhängig davon, welches Standardgebietsschema für die App/Aktivität festgelegt ist.

+2

Dies sollte die akzeptierte Antwort sein. – Pongpat

0

für diejenigen, die Daniel Fekete ‚s-Lösung verwenden, die ist:

Process exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.language"}); 
String locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine(); 
exec.destroy(); 

Schreiben dieser locale bewusst könnte LEER auf neuesten Android-Api (+21) sein! anstelle der Verwendung persist.sys.language Verwendung persist.sys.locale

exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.locale"}); 
locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine(); 
exec.destroy(); 
Verwandte Themen