Я создал приложение android (используя Xamarin c#), и оно содержит экран настроек, где пользователи могут менять язык приложения. Этот языковой параметр сохраняется также на сервере путем вызова API. После смены языка я перевожу sh тексты на экран настроек и в другие открытые действия, и все кажется работающим.
Проблема в том, что когда я закрываю и снова открываю приложение: я вхожу в систему пользователя и читаю язык данные с сервера. Я программно изменяю язык локали приложения в свою основную деятельность: например, я установил язык, отличный от языка смартфона по умолчанию. Это действие содержит 4 фрагмента в ViewPager, но иногда эти фрагменты написаны на «старом» языке, и «новый» язык применяется неправильно. Итак, когда я открываю новое действие, показанный язык является «старым», а не «новым».
Я что-то не так делаю? Кто-нибудь может мне помочь?
Следуя моему коду:
В моем классе AppBaseActivity, событие OnCreate:
base.OnCreate(bundle);
if (UserSettings != null
&& !string.IsNullOrWhiteSpace(UserSettings.LanguageCode))
{
LocaleManager.ChangeAppLanguage(this, UserSettings.LanguageCode);
}
В моем классе AppBaseActivity, событие OnResume:
base.OnResume();
if (UserSettings != null
&& !string.IsNullOrWhiteSpace(UserSettings.LanguageCode))
{
LocaleManager.ChangeAppLanguage(this, UserSettings.LanguageCode);
}
Мой метод LocaleManager.ChangeAppLanguage:
public static bool ChangeAppLanguage(Context context, String lang, bool saveInSharedPreferences)
{
Locale newLocale = new Locale(lang);
if (Locale.Default.Language != newLocale.Language)
{
Locale.Default = newLocale;
Android.Content.Res.Configuration config = new Android.Content.Res.Configuration();
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
config.SetLocale(newLocale);
}
else
{
config.Locale = newLocale;
}
context.Resources.UpdateConfiguration(config, context.Resources.DisplayMetrics);
if (saveInSharedPreferences)
return Helper.SaveInSharedPreferences(context, context.ApplicationContext.PackageName + ".languageCode", lang);
return true;
}
return false;
}