I am changing the application locale based on user choice. Independent of device locale.
using
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());
}
But I want to know what will be the device locale also.
When I am trying to get this I always getting the locale which I have set to application.
ex: applictaion is in ENGLISH and device is in CHINESE. I am always getting english.
for getting locale using,
option 1.
String locale = context.getResources().getConfiguration().locale.getCountry();
option 2.
String local_country = ((Activity) context).getBaseContext().getResources().getConfiguration().locale.getCountry();
Any help will be highly appreciated!!!
I am absolutely unsure how portable this is to different devices:
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();
}
And if you want the country part: persist.sys.country
I asked something similar and found this answer, sorry if it is late:
To find the system locale use:
defaultLocale = Resources.getSystem().getConfiguration().locale;
It gets the system locale, no matter which default locale is set for the app/activity.
for those whom are using Daniel Fekete
's solution which is :
Process exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.language"});
String locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
exec.destroy();
Be aware of that locale might be EMPTY on latest Android Api(+21)! instead of using persist.sys.language
use persist.sys.locale
exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.locale"});
locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
exec.destroy();
来源:https://stackoverflow.com/questions/14394735/how-to-get-the-device-locale-after-changing-the-application-locale