我们有一个默认的英语,在我们的应用程序中还有其他几种语言的翻译。当用户启动应用程序时,我们调用Locale.setDefault()将其设置为翻译的本地化。例如,电话是用西班牙语运行的,但是我们没有西班牙语翻译,我们叫Locale.setDefault(Locale.US)。我们需要这个作为时间格式,因为libs使用Locale.getDefault()。直到android 24,它才能完美地工作。安卓24“忽略”Locale.setDefault()。所有的日期都是用设备语言格式化的,而不是app语言。
发布于 2017-12-15 08:12:04
因此,解决方案不仅是改变区域设置,而且改变内部配置的地区。
在应用类中
@Override
protected void attachBaseContext(Context base) {
LocaleUtil.getInstance().invalidateCurrentLocale(base);
super.attachBaseContext(base);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LocaleUtil.getInstance().invalidateCurrentLocale(this);
}这是LocaleUtil方法
public void invalidateCurrentLocale(Context context) {
updateResources(context,
getLocaleOrDefault(getConfigLocale(context.getResources().getConfiguration())));
}
public Locale getConfigLocale(Configuration configuration) {
if (Build.VERSION.SDK_INT < 24) {
return configuration.locale;
} else {
return configuration.getLocales().get(0);
}
}
private Locale getLocaleOrDefault(Locale locale) {
if (AVAILABLE_LOCALES.contains(locale)) {
return locale;
}
return DEFAULT_LOCALE;
}
private void updateResources(Context context, Locale locale) {
Locale.setDefault(locale);
Resources res = context.getResources();
Configuration config = new Configuration(res.getConfiguration());
config.setLocale(locale);
res.updateConfiguration(config, res.getDisplayMetrics());
}发布于 2017-12-13 12:01:56
在API 24中添加了新的方法setDefault (Locale.Category category,Locale newLocale)使用官方码头
https://stackoverflow.com/questions/47792437
复制相似问题