我有一个法语和德语字符串的应用程序。我已将这些字符串分别放在values-fr
和values-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)。我怎样才能防止这种情况发生?此外,如何确保应用程序在更改为横向时不会默认为系统区域设置?
任何帮助将不胜感激!谢谢!