9

我正在根据用户选择更改应用程序区域设置。独立于设备区域设置。

使用

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

但我也想知道设备区域设置是什么。

当我试图得到这个时,我总是得到我设置为应用程序的语言环境。

例如:applictaion 是ENGLISH,device 是CHINESE。我总是学英语

用于获取语言环境,

选项1。

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

选项 2。

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

任何帮助将不胜感激!!!

4

4 回答 4

7

我问了类似的问题并找到了这个答案,如果迟到了,抱歉:

要查找系统区域设置,请使用:

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

无论为应用程序/活动设置了哪个默认语言环境,它都会获取系统语言环境。

于 2013-10-14T21:00:25.193 回答
6

我绝对不确定这对不同设备的便携性:

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

于 2013-01-18T11:23:50.637 回答
1

如果你需要支持低于 Android 7.0 - Nougat (API level 24) 你可以使用这样的东西:

@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;
  }
}

注意关于deprecation和的注释NewApi。一旦您以 API 24 或更高版本为目标,请调整此方法。受到这个答案的启发。

于 2020-10-21T07:01:33.877 回答
0

对于那些正在使用Daniel Fekete的解决方案是:

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

请注意,在最新的 Android Api(+21) 上,区域设置可能为EMPTY !而不是使用persist.sys.languageuse persist.sys.locale

exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.locale"});
locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
exec.destroy();
于 2016-02-21T12:09:17.003 回答