对于不同的语言,我有不同的字符串值。 在运行时,用户可以选择另一种语言。 minSdkVersion 21
我正在使用这些方法更新语言环境
public static Context setNewLocale(Context c, String language) {
persistLanguage(c, language); // persists new language in shared prefs
return updateResources(c, language);
}
private static Context updateResources(Context context, String language) {
Locale locale = new Locale(language, language + "_" + language.toUpperCase());
Locale.setDefault(locale);
Resources res = context.getResources();
Configuration config = res.getConfiguration();
config.setLocale(locale);
context = context.createConfigurationContext(config);
return context;
}
在我覆盖了 attachBaseContext 的地方有一个BaseActivity,每个活动都对其进行扩展。
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(LocaleManager.setLocale(base));
}
并且在BaseApplication中也已覆盖
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(LocaleManager.setLocale(base)); //updates resources
MultiDex.install(getBaseContext());
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LocaleManager.setLocale(this); //updates resources
}
用户选择新语言后,我将重新创建活动。 当我从商店下载发行版本时,尽管所有这些在调试时都可以正常工作,但该应用程序仅使用默认语言。改变语言无济于事。
答案 0 :(得分:0)
首先,问题不在于代码,而在于Android如何通过新应用捆绑包处理资源。以前使用APK来下载所有资源。现在,它仅下载手机可以使用的资源。如果您只使用首选语言的英语,则除非您另有说明,否则它将不会下载其他语言
bundle {
language {
// Specifies that the app bundle should not support
// configuration APKs for language resources. These
// resources are instead packaged with each base and
// dynamic feature APK.
enableSplit = false
}
density {
// This property is set to true by default.
enableSplit = true
}
abi {
// This property is set to true by default.
enableSplit = true
}
}