设置默认语言环境

时间:2017-12-13 11:56:50

标签: android locale

我们的应用程序中有默认的英语和其他几种语言的翻译。 当用户启动应用时,我们会调用Locale.setDefault()将其设置为我们翻译的区域设置。例如,手机以西班牙语运行,但我们没有西班牙语翻译,我们称之为Locale.setDefault(Locale.US)。我们需要这个用于时间格式化,因为libs使用Locale.getDefault()。 它完美地工作到android 24. Android 24"忽略" Locale.setDefault()。并且所有日期都使用设备语言格式化,但不是应用语言。

2 个答案:

答案 0 :(得分:2)

因此,解决方案不仅要更改区域设置,还要更改配置内的区域设置。

在应用程序类

@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());
}

答案 1 :(得分:1)

在API 24中添加了新方法setDefault (Locale.Category category,Locale newLocale)使用oficial docks