首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置默认区域设置

设置默认区域设置
EN

Stack Overflow用户
提问于 2017-12-13 11:56:50
回答 2查看 2K关注 0票数 0

我们有一个默认的英语,在我们的应用程序中还有其他几种语言的翻译。当用户启动应用程序时,我们调用Locale.setDefault()将其设置为翻译的本地化。例如,电话是用西班牙语运行的,但是我们没有西班牙语翻译,我们叫Locale.setDefault(Locale.US)。我们需要这个作为时间格式,因为libs使用Locale.getDefault()。直到android 24,它才能完美地工作。安卓24“忽略”Locale.setDefault()。所有的日期都是用设备语言格式化的,而不是app语言。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-15 08:12:04

因此,解决方案不仅是改变区域设置,而且改变内部配置的地区。

在应用类中

代码语言:javascript
复制
@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方法

代码语言:javascript
复制
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());
}
票数 2
EN

Stack Overflow用户

发布于 2017-12-13 12:01:56

在API 24中添加了新的方法setDefault (Locale.Category category,Locale newLocale)使用官方码头

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47792437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档