设置Locale.setDefault(locale)后,如何取回手机语言?

时间:2017-02-27 13:27:24

标签: android locale

我使用此代码段允许用户在appplication中设置自己喜欢的语言环境:

 Locale locale = new Locale(newLan);
 Locale.setDefault(locale);
 Configuration config = getBaseContext().getResources().getConfiguration();
 config.locale = locale;
 getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());

问题是我想写一个允许用户回到手机默认语言的设置。

怎么可能?

因为在使用上面的代码片段并想象用户选择法语后,我无法取回手机语言环境(例如可能是英语)

4 个答案:

答案 0 :(得分:1)

我刚试过这个,我的手机区域是美国,吐司用法语显示但在日志中我仍然看到美国,也许如果你没有将新的语言环境设置为默认它仍然有用吗?

Locale locale = new Locale("fr");
//Locale.setDefault(locale);
Configuration config = getBaseContext().getResources().getConfiguration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());

Toast.makeText(this, android.R.string.cancel, Toast.LENGTH_LONG).show();
Log.d("LOCALE", Locale.getDefault().getCountry());

我已经看到在其他问题和答案中使用Locale.setDefault(),现在我想知道,为什么要手动设置默认Locale?如果这是必要的,那么无论如何都不会在updateConfiguration()完成吗? this answer也很有趣

答案 1 :(得分:0)

怎么样:

  1. 将当前区域设置保存到共享首选项
  2. 强迫任何你想要的东西
  3. 使用共享首选项值移回原始区域设置

答案 2 :(得分:0)

首先弃用了这段代码config.locale = locale;,您应该使用config.setLocale(locale);

您是否尝试使用Locale.getDefault().getDisplayLanguage();获取当前设备区域设置,并在用户使用您的代码段选择默认区域设置作为应用程序的选定语言后进行设置?

答案 3 :(得分:0)

https://stackoverflow.com/a/34675427/519334中,我通过在任何应用程序更改语言环境之前记住静态变量中的设备语言来解决问题“回到设备语言”:

public class Global {
  public static final Locale systemLocale = Locale.getDefault();
}