Это эффект, который трудно описать.
Наше приложение для 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)) также отображаются на правильно настроенном языке.
Это приводит к предположениючто ресурсы меню несколько (повторно) загружены (снова), но не соответствуют установленному Locale из JVM.
У кого-нибудь есть идеи, как найти эту ошибку? Что нам здесь не хватает? Ресурсы меню загружаются по-разному?