我有一个旧的项目,支持多语言。我想升级支持库和目标平台,在迁移到 Androidx
之前一切都很好,但现在改变语言不工作!
我使用这个代码来更改 App 的默认语言环境
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
不工作。即使下面的代码也不起作用,并且始终在默认资源 string.xml 中显示 app_name
值。
<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!