Android 中英切换工具记录

app内语言切换的一个工具类,很久之前在网上看到的,忘了是哪个的了,

记录一下。

public class LanguageUtil {

    public static Context selectLanguage(Context context, String language) {
        Context updateContext;
        //设置语言类型
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            updateContext = createConfigurationResources(context, language);
        } else {
            applyLanguage(context, language);
            updateContext = context;
        }
        //保存设置语言类型
        ShareUtil.Companion.getInstance().save(Constant.LANGUAGE, language);
        return updateContext;
    }

    private static Context createConfigurationResources(Context context, String language) {
        //设置语言类型
        Resources resources = context.getResources();
        Configuration configuration = resources.getConfiguration();
        Locale locale = null;
        switch (language) {
            case "en":
                locale = Locale.ENGLISH;
                break;
            case "zh":
                locale = Locale.SIMPLIFIED_CHINESE;
                break;
            default:
                locale = Locale.getDefault();
                break;
        }
        configuration.setLocale(locale);
        return context.createConfigurationContext(configuration);
    }

    private static void applyLanguage(Context context, String language) {
        //设置语言类型
        Resources resources = context.getResources();
        Configuration configuration = resources.getConfiguration();
        DisplayMetrics displayMetrics = resources.getDisplayMetrics();
        Locale locale = null;
        switch (language) {
            case "en":
                locale = Locale.ENGLISH;
                break;
            case "zh":
                locale = Locale.SIMPLIFIED_CHINESE;
                break;
            default:
                locale = Locale.getDefault();
                break;
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            // apply locale
            configuration.setLocale(locale);
        } else {
            // updateConfiguration
            configuration.locale = locale;
            DisplayMetrics dm = resources.getDisplayMetrics();
            resources.updateConfiguration(configuration, dm);
        }
    }

    public static Context updateLanguage(Context context) {
        String curLanguage = ShareUtil.Companion.getInstance().getString(Constant.LANGUAGE, "zh");
        if (TextUtils.isEmpty(curLanguage)) {
            curLanguage = "zh";
        }

        return selectLanguage(context, curLanguage);
    }

    public static boolean switchLanguage(Context context, String value) {
        String curLanguage = ShareUtil.Companion.getInstance().getString(Constant.LANGUAGE, "zh");
        if (value.equals(curLanguage)) {
            return false;
        }
        if (TextUtils.isEmpty(curLanguage)) {
            ShareUtil.Companion.getInstance().save(Constant.LANGUAGE, "zh");
        } else {
            if (curLanguage.equals("en")) {
                ShareUtil.Companion.getInstance().save(Constant.LANGUAGE, "zh");
            } else {
                ShareUtil.Companion.getInstance().save(Constant.LANGUAGE, "en");
            }
        }
        selectLanguage(context, ShareUtil.Companion.getInstance().getString(Constant.LANGUAGE, "zh"));
        return true;
    }
}

使用:

 viewBinding!!.rgLanguage.setOnCheckedChangeListener { group, checkedId ->
            if (checkedId == R.id.rb_zh) {
                switchLanguage(APP.context, "zh")
                this.recreate()
            } else {
                switchLanguage(APP.context, "en")
                this.recreate()
            }
        }

完毕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值