当我更改设备区域设置时,如何强制应用程序使用特定的区域设置?

时间:2017-04-24 18:04:39

标签: android localization

我有一个法语和德语字符串的应用程序。我已将这些字符串分别放在values-frvalues-de中。

当前状态: 设备区域设置:en-US

当我启动应用程序时,我希望该应用程序显示英语(en-US)。我只希望应用程序使用法语或德语,具体取决于我通过API收到的标志。为此,在Application.onCreate()中,我使用这段代码将语言环境强制为英语 - 在这种情况下,locale是en-US。

public void updateLocale(@NonNull Locale locale) {
  checkNotNull(locale);

  if (!getCurrentLocale().equals(locale)) {
    Locale.setDefault(locale);

    Resources resources = context.getResources();
    Configuration configuration = resources.getConfiguration();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
      configuration.setLocale(locale);
    } else {
      configuration.locale = locale;
    }
    setCurrentLocale(locale);
    resources.updateConfiguration(configuration, resources.getDisplayMetrics());
  }
}

当前区域设置分别通过setCurrentLocale(Locale)getCurrentLocale()写入和读取SharedPreferences。

当我将设备区域设置更改为fr-FR并返回应用程序时,区域设置将更改为法语,但我希望这种情况发生(因为我还没有制作API)打电话来获得旗帜)。我想用onConfigurationChanged方法强制英语:

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  Locale newLocale;
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    newLocale = newConfig.getLocales().get(0);
  } else {
    newLocale = newConfig.locale;
  }

  if (!localeManager.isFlagTurnedOn()) {
    localeManager.updateLocale(LOCALE_ENGLISH);
  }
}

这不起作用!当我回到应用程序时,语言环境更改为法语(如果我将设备区域设置更改为fr-FR)。我怎样才能防止这种情况发生?此外,如何确保应用程序在更改为横向时不会默认为系统区域设置?

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

0 个答案:

没有答案