package com.hdl.photovoltaic.utils; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Build; import android.os.LocaleList; import android.text.TextUtils; import android.util.DisplayMetrics; import com.hdl.photovoltaic.ui.adapter.LanguageAdapter; import java.util.ArrayList; import java.util.List; import java.util.Locale; /** * 多语言适配 */ public class LocalManageUtil { public static final String zh = "zh";//中文 public static final String en = "en";//英文 // private static Locale mLocale; /** * 获取系统的locale * * @return Locale对象 */ public static Locale getSystemLocale(Context context) { Locale locale; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { locale = LocaleList.getDefault().get(0); } else { locale = Locale.getDefault(); } return locale; } /** * 应用内切换语言 * * @param language language (zh:汉语;en:英语) * @param context 上下文 */ public static void changeAppLanguage(String language, Context context) { Locale locale = getLocale(language); updateResources(locale, context); } /** * 获取系统当前语言 * * @return _ */ public static Locale getDefaultLocale() { return Resources.getSystem().getConfiguration().locale; } /** * 获取Locale * * @param language (zh:汉语;en:英语) * @return Locale */ public static Locale getLocale(String language) { try { if (TextUtils.isEmpty(language)) { return getDefaultLocale(); } return new Locale(language); } catch (Exception e) { return getDefaultLocale(); } } /** * 更新资源数据 * * @param locale 语言实体类 * @param context 上下文 * @return - */ private static void updateResources(Locale locale, Context context) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { //7.0以下系统 DisplayMetrics metrics = context.getResources().getDisplayMetrics(); Configuration configuration = context.getResources().getConfiguration(); configuration.setLocale(locale); context.getResources().updateConfiguration(configuration, metrics); // Locale.setDefault(locale); } else { //7.0及以上系统 Configuration configuration = context.getResources().getConfiguration(); configuration.setLocale(locale); configuration.setLocales(new LocaleList(locale)); context.createConfigurationContext(configuration); } } /** * 设置当前APP的语言模式 * * @param context 上下文 */ private static void setCurrLanguageMode(Context context) { String language = SharedPreUtils.getSharedPreferencesKey("languege"); Locale local = getLocale(language); Resources res = context.getResources(); DisplayMetrics dm = res.getDisplayMetrics(); Configuration conf = res.getConfiguration(); conf.locale = local; res.updateConfiguration(conf, dm); } /** * 获取语言列表 * * @return 返回语言列表 */ public static List getLanguageList() { List list = new ArrayList<>(); LanguageAdapter.ItemData zh = new LanguageAdapter.ItemData(); zh.setState(false); zh.setTitle("简体中文"); zh.setLanguage(LocalManageUtil.zh); list.add(zh); LanguageAdapter.ItemData en = new LanguageAdapter.ItemData(); en.setState(false); en.setTitle("English"); en.setLanguage(LocalManageUtil.en); list.add(en); return list; } }