Как получить локаль устройства после изменения локали приложения

Я меняю локализацию приложения на основе выбора пользователя. Независимо от локали устройства.

используя

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();