Это эффект, который сложно описать.
Наше приложение для Android поддерживает два языка, однако мы не используем системный язык, но позволяем пользователю установить его в настройках. Затем перед присоединением BaseContext приложения мы устанавливаем конфигурацию локали.
// in Application class
override fun attachBaseContext(base: Context) {
super.attachBaseContext(LocaleHelper.onAttach(base))
}
// the LocaleHelper
fun onAttach(context: Context): Context {
return setLocale(context, getPersistedLanguage(context), getPersistedCountry(context))
}
Таким образом, вызов attachBaseContext получает контекст, для которого установлен языковой стандарт, например. «de» вместо «en» - даже если устройство на английском языке.
Пока это отлично работает, и в зависимости от настроек все ресурсы, поступающие из контекста, находятся на этом языке. Однако теперь мы добавили еще одну настройку для ночного режима (т.е. предоставили пользователю возможность установить «тему» в «нормальном» или «темном режиме»).
По этой причине идея заключалась в том, чтобы установить что-то вроде этого
if (enableDarkMode) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}
в onCreate () приложения (мы также пробовали в Activity).
Однако при этом внезапно загружаются ресурсы (по крайней мере, некоторые) с локалью устройства. Пункты меню на языке устройства. Однако проверка Locale.getLanguage () дает мне настроенный язык и динамически вызываемые строки (например, context.getString (R.string.xyz)) также отображаются на правильно настроенном языке.
Это приводит к предположению, что ресурсы меню несколько (повторно) загружены (снова), но не соблюдают установленный языковой стандарт из JVM.
Кто-нибудь знает, как найти эту ошибку? Что нам здесь не хватает? Ресурсы меню загружаются по-другому?