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!!!
If you need to support below Android 7.0 - Nougat (API level 24) you can use something like this:
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
// ToDo: Adjust this method once the target API is 24 or higher!
private Locale getLocale()
{
if(Build.VERSION.SDK_INT >= 24)
{
return Resources.getSystem().getConfiguration().getLocales().get(0);
}
else
{
return Resources.getSystem().getConfiguration().locale;
}
}
Note the annotation regarding deprecation
and NewApi
. Adjust this method once you target API 24 or higher. Inspired by this answer.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With