package cn.sinata.xldutils.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 java.util.Locale;
|
|
public class LanguageUtil {
|
private static String defaultLanguage = "";
|
|
public static void setDefaultLanguage(String language) {
|
defaultLanguage = language;
|
}
|
|
//获取语言
|
public static String getLanguage() {
|
return SPUtils.Companion.instance().getString("language", defaultLanguage);
|
}
|
|
//设置语言
|
public static void saveLanguage(Context context, String language) {
|
SPUtils.Companion.instance().put("language", language).apply();
|
LanguageUtil.changeAppLanguage(context, language, "");
|
}
|
|
private static Locale getLocaleByLanguage(String language) {
|
if (TextUtils.isEmpty(language)) {
|
return Locale.FRENCH;
|
}
|
return switch (language) {
|
case "zh", "ch" -> Locale.CHINESE;
|
case "fr" -> Locale.FRENCH;
|
default -> Locale.ENGLISH;
|
};
|
}
|
|
public static Context attachBaseContext(Context context, String language, String country) {
|
Locale locale = getLocaleByLanguage(language);
|
Locale.setDefault(locale);
|
Resources resources = context.getResources();
|
Configuration configuration = new Configuration(resources.getConfiguration());
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
configuration.setLocale(locale);
|
LocaleList localeList = new LocaleList(locale);
|
LocaleList.setDefault(localeList);
|
configuration.setLocales(localeList);
|
return context.createConfigurationContext(configuration);
|
} else {
|
configuration.locale = locale;
|
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
|
}
|
|
return context;
|
}
|
|
/**
|
* @param context
|
* @param newLanguage 想要切换的语言类型 比如 Const.Language.ENGLISH ,"zh"
|
*/
|
private static void changeAppLanguage(Context context, String newLanguage, String country) {
|
if (TextUtils.isEmpty(newLanguage)) {
|
return;
|
}
|
Locale locale = getLocaleByLanguage(newLanguage);
|
Locale.setDefault(locale);
|
Resources resources = context.getResources();
|
Configuration configuration = new Configuration(resources.getConfiguration());
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
configuration.setLocale(locale);
|
LocaleList localeList = new LocaleList(locale);
|
LocaleList.setDefault(localeList);
|
configuration.setLocales(localeList);
|
} else {
|
configuration.locale = locale;
|
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
|
}
|
}
|
}
|