У меня есть старый проект, который поддерживает несколько языков. Я хочу обновить библиотеку поддержки и целевую платформу. До перехода на Androidx все работало нормально, но теперь смена языка не работает!
Я использую этот код для изменения локали приложения по умолчанию
private static Context updateResources(Context context, String language)
{
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration configuration = context.getResources().getConfiguration();
configuration.setLocale(locale);
return context.createConfigurationContext(configuration);
}
И вызывайте этот метод для каждого действия путем переопределения attachBaseContext
следующим образом:
@Override
protected void attachBaseContext(Context newBase)
{
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
String language = preferences.getString(SELECTED_LANGUAGE, "fa");
super.attachBaseContext(updateResources(newBase, language));
}
Я стараюсь другой метод, чтобы получить строку, и я заметил, что getActivity().getBaseContext().getString
работы и getActivity().getString
не работает. Даже следующий код не работает и всегда показывает app_name
vlaue в ресурсе по умолчанию string.xml.
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"/>
Я поделился примером кода в https://github.com/Freydoonk/LanguageTest
Также getActivity()..getResources().getIdentifier
не работает и всегда возвращает 0!