Как получить локаль устройства после изменения локали приложения
Я меняю локализацию приложения на основе выбора пользователя. Независимо от локали устройства.
используя
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());
}
Но я также хочу знать, какой будет язык устройства.
Когда я пытаюсь получить это, я всегда получаю локаль, которую я установил для приложения.
ex: applictaion находится в ENGLISH, а устройство находится в CHINESE.
Я всегда получаю английский.
для получения использования локали,
вариант 1.
String locale = context.getResources().getConfiguration().locale.getCountry();
вариант 2.
String local_country = ((Activity) context).getBaseContext().getResources().getConfiguration().locale.getCountry();
Любая помощь будет высоко оценена.
Ответы
Ответ 1
Я абсолютно не уверен, насколько переносимо это для разных устройств:
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();
}
И если вы хотите часть страны: persist.sys.country
Ответ 2
Я спросил что-то подобное и нашел этот ответ, извините, если он опаздывает:
Чтобы найти язык системы, используйте:
defaultLocale = Resources.getSystem().getConfiguration().locale;
Он получает локаль системы, независимо от того, какой языковой стандарт по умолчанию установлен для приложения/активности.
Ответ 3
для тех, кто использует решение Daniel Fekete
, которое:
Process exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.language"});
String locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
exec.destroy();
Помните, что этот локаль может быть EMPTY на последней версии Android Api (+21)! вместо использования persist.sys.language
используйте persist.sys.locale
exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.locale"});
locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
exec.destroy();