Android 国际化(多语言)实现,支持8.0+

最近因为项目要做国际化,所以正好研究了下实现方法,很简单,就一个工具类!
工具类

public class LanguageUtil {
    
    /**
     * 获取系统的locale
     */
    public static Locale getSystemLocale() {
        Locale locale;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            locale = Resources.getSystem().getConfiguration().getLocales().get(0);
        } else
            locale = Resources.getSystem().getConfiguration().locale;
        return locale;
    }
    
     /**
     * 设置语言(核心方法)
     */
    public static Context attachBaseContext(Context context) {
        Resources resources = context.getResources();
        Locale locale = getUserLanguageLocale();//建议使用本地存储的语言
        Configuration configuration = resources.getConfiguration();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            configuration.setLocale(locale);
            configuration.setLocales(new LocaleList(locale));
            return context.createConfigurationContext(configuration);
        } else {
            configuration.setLocale(locale);
            resources.updateConfiguration(configuration, resources.getDisplayMetrics());
            return context;
        }
    }

    /**
     * 假装这里是本地存储的语言
     */
    public static Locale getUserLanguageLocale() {
        return Locale.ENGLISH;
    }

}

如何使用

Activity中的attachBaseContext()方法调用它,最好是写一个基类
@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(LanguageUtil.attachBaseContext(newBase));
}

建议
在用户选择语言后将Local保存在本地,下次直接使用本地Local,这样就不会随着系统切换语言或者应用重启而还原。

Local列表

举例:
(英语) Locale.ENGLISH
(越南语) new Locale(“vi”, “”)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值