153 lines
4.5 KiB
Java
153 lines
4.5 KiB
Java
|
|
package com.qxcm.moduleutil.utils;
|
||
|
|
|
||
|
|
import android.annotation.TargetApi;
|
||
|
|
import android.content.Context;
|
||
|
|
import android.content.res.Configuration;
|
||
|
|
import android.content.res.Resources;
|
||
|
|
import android.os.Build;
|
||
|
|
import android.text.TextUtils;
|
||
|
|
import android.util.DisplayMetrics;
|
||
|
|
|
||
|
|
import androidx.core.os.ConfigurationCompat;
|
||
|
|
import androidx.core.os.LocaleListCompat;
|
||
|
|
|
||
|
|
|
||
|
|
import com.qxcm.moduleutil.widget.CommonAppContext;
|
||
|
|
import com.qxcm.moduleutil.widget.Constants;
|
||
|
|
|
||
|
|
import java.util.Locale;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Created by cxf on 2019/6/5.
|
||
|
|
*/
|
||
|
|
|
||
|
|
public class LanguageUtil {
|
||
|
|
|
||
|
|
private static LanguageUtil instance;
|
||
|
|
private String mLanguage;
|
||
|
|
|
||
|
|
public LanguageUtil() {
|
||
|
|
mLanguage = SpUtil.getInstance().getStringValue(SpUtil.LANGUAGE);
|
||
|
|
// if (TextUtils.isEmpty(mLanguage)) {
|
||
|
|
getSystemLanguage();
|
||
|
|
// }
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public static LanguageUtil getInstance() {
|
||
|
|
if (instance == null) {
|
||
|
|
synchronized (LanguageUtil.class) {
|
||
|
|
if (instance == null) {
|
||
|
|
instance = new LanguageUtil();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return instance;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 判断系统语言是否是中文
|
||
|
|
*/
|
||
|
|
private void getSystemLanguage() {
|
||
|
|
String lang = Constants.LANG_ZH;
|
||
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||
|
|
LocaleListCompat listCompat = ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration());
|
||
|
|
if (listCompat.size() > 0) {
|
||
|
|
Locale locale = listCompat.get(0);
|
||
|
|
if (locale != null) {
|
||
|
|
String localeName = locale.toString();
|
||
|
|
if (localeName.startsWith("en")) {
|
||
|
|
lang = Constants.LANG_EN;
|
||
|
|
} else {
|
||
|
|
lang = Constants.LANG_ZH;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
Locale locale = Locale.getDefault();
|
||
|
|
if (locale != null) {
|
||
|
|
String localeName = locale.toString();
|
||
|
|
if (localeName.startsWith("en")) {
|
||
|
|
lang = Constants.LANG_EN;
|
||
|
|
} else {
|
||
|
|
lang = Constants.LANG_ZH;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
setLanguage(lang);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 设置语言
|
||
|
|
*/
|
||
|
|
private static void setConfiguration() {
|
||
|
|
Locale targetLocale = getLanguageLocale();
|
||
|
|
Resources resources = CommonAppContext.getInstance().getResources();
|
||
|
|
Configuration configuration = resources.getConfiguration();
|
||
|
|
configuration.setLocale(targetLocale);
|
||
|
|
DisplayMetrics dm = resources.getDisplayMetrics();
|
||
|
|
resources.updateConfiguration(configuration, dm);//语言更换生效的代码!
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public static Locale getLanguageLocale() {
|
||
|
|
String lang = LanguageUtil.getInstance().getLanguage();
|
||
|
|
if (!TextUtils.isEmpty(lang)) {
|
||
|
|
if (Constants.LANG_ZH.equals(lang)) {
|
||
|
|
return Locale.SIMPLIFIED_CHINESE;
|
||
|
|
} else if (Constants.LANG_EN.equals(lang)) {
|
||
|
|
return Locale.US;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return Locale.SIMPLIFIED_CHINESE;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public void updateLanguage(String language) {
|
||
|
|
setLanguage(language);
|
||
|
|
setConfiguration();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public static Context attachBaseContext(Context context) {
|
||
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||
|
|
return createConfigurationResources(context);
|
||
|
|
} else {
|
||
|
|
setConfiguration();
|
||
|
|
return context;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@TargetApi(Build.VERSION_CODES.N)
|
||
|
|
private static Context createConfigurationResources(Context context) {
|
||
|
|
Resources resources = context.getResources();
|
||
|
|
Configuration configuration = resources.getConfiguration();
|
||
|
|
Locale locale = getLanguageLocale();
|
||
|
|
configuration.setLocale(locale);
|
||
|
|
return context.createConfigurationContext(configuration);
|
||
|
|
}
|
||
|
|
|
||
|
|
public String getLanguage() {
|
||
|
|
if (TextUtils.isEmpty(mLanguage)) {
|
||
|
|
mLanguage = SpUtil.getInstance().getStringValue(SpUtil.LANGUAGE);
|
||
|
|
if (TextUtils.isEmpty(mLanguage)) {
|
||
|
|
getSystemLanguage();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return mLanguage;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void setLanguage(String language) {
|
||
|
|
mLanguage = language;
|
||
|
|
SpUtil.getInstance().setStringValue(SpUtil.LANGUAGE, language);
|
||
|
|
}
|
||
|
|
|
||
|
|
public static boolean isZh() {
|
||
|
|
return Constants.LANG_ZH.equals(LanguageUtil.getInstance().getLanguage());
|
||
|
|
}
|
||
|
|
|
||
|
|
public static boolean isEn() {
|
||
|
|
return Constants.LANG_EN.equals(LanguageUtil.getInstance().getLanguage());
|
||
|
|
}
|
||
|
|
}
|