Это происходит, как вы сказали, потому что инъекция происходит после вызова attachBaseContext
.
Я на самом деле не уверен, что за вопрос здесь, но я столкнулся с той же проблемой, но, к сожалению, я не смог решить ее с помощью кинжала. Мне нужно было создать новый LocaleManager
в attachBaseContext
, например:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(new LocaleManager(base).updateContext());
}
, где updateContext
возвращает контекст с обновленной локалью, например:
public Context updateContext() {
Locale locale = new Locale(DESIRED_LANGUAGECODE);
Locale.setDefault(locale);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return updateResourcesLocale(locale);
}
return updateResourcesLocaleLegacy(locale);
}
@SuppressWarnings("deprecation")
private Context updateResourcesLocaleLegacy(Locale locale) {
Resources resources = mContext.getResources();
Configuration configuration = resources.getConfiguration();
configuration.locale = locale;
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
return mContext;
}
@TargetApi(Build.VERSION_CODES.N)
private Context updateResourcesLocale(Locale locale) {
Configuration configuration = mContext.getResources().getConfiguration();
configuration.setLocale(locale);
return mContext.createConfigurationContext(configuration);
}