Android国际化 动态更换本地语言

来源:互联网 发布:上海数据港 曾犁 编辑:程序博客网 时间:2024/05/21 11:03

Android动态更换应用语言

在开发应用过程中,对于一些有多国语言支撑的项目而言,就需要做到动态国际化的需求,当然Android应用基本上都是默认读取手机的当前语言环境,然后默认获取相对应的语言资源strings。

语言国际化

难免项目会需要应用到以上的需求,那么我们就来满足这个需求。首先:准备两个语言资源,两个Activity类,两个layout布局,两个语言strings资源:

这里写图片描述

这里写图片描述

这里写图片描述

第一个界面我放置两个按钮,一个用来动态切换语言,一个跳转打下一个界面,强调一点:

更新了语言资源之后,一定要刷新界面
语言引用用@string/xxx

接下来就是代码了::::::
 button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                refreshLanguage();            }        });        button2.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                startActivity(new Intent(MainActivity.this, SecondActivity.class));            }        });
简单的两个按钮,一个更换语言,一个跳转,真正重要的就在refreshLanguage()这个方法中了。
//刷新显示配置    public void refreshLanguage() {        String str = getLanguage(); //得到目前点击的语言环境 "zh" "en" 等        Resources localResources = context.getResources();  // 创建Resources对象        //如果本地语言不等于现在的语言环境        if (!localResources.getConfiguration().locale.getLanguage().equals(str)) {            // 得到一个 配置Configuration对象            Configuration localConfiguration = getUpdateLocalConfig(str);            //得到自定义资源的对象            DisplayMetrics localDisplayMetrics = localResources.getDisplayMetrics();            //资源对象更新配置文件          localResources.updateConfiguration(localConfiguration, localDisplayMetrics);        }    }
/**     * 创建Configuration     *     * @param language     * @return     */    public Configuration getUpdateLocalConfig(String language) {        //得到本地资源配置对象        Configuration localConfiguration = context.getResources().getConfiguration();        //得到最新的语言环境Locale        Locale localLocale = getLocale(language);        //资源配置对象设置语言环境        localConfiguration.locale = localLocale;        return localConfiguration;    }
 //创建新的Locale并覆盖原Locale    public Locale getLocale(String language) {        //根据传进来的语言 生成一个语言环境Locale        Locale localeLocale = new Locale(language);        //将传进来的语言环境变成本地默认的,进行更换前的准备,返回这个语言环境Locale        Locale.setDefault(localeLocale);        return localeLocale;    }
 //得到App配置文件目前的语言    public String getLanguage() {        if (config) {            //获得资源Resources对象            Resources resources = getApplicationContext().getResources();            //得到返回当前对象的语言"en""zh"等            defaultLanguage = resources.getConfiguration().locale.getLanguage();            config = false;            return "en";        } else {            Resources resources = getApplicationContext().getResources();            defaultLanguage = resources.getConfiguration().locale.getLanguage();            config = true;            return "zh";        }    }
通过上述的代码,写的注释已经真的真的真的非常详细了吧。总结:1.获取已经更改的语言Language字符串,例如“en”“zh”等2.判断项目目前的语言环境和动态得到的语言环境字符串是否相等3.不相等,则获取一个Configuration对象(Configuration对象又通过Locale对象获得,Locale对象又需要根据当前language来获取相对应的对象)4.得到自定义资源对象DisplayMetrics5.资源对象更新配置文件6.完成上述行云流水般的操作,再跳转下个界面,字符资源就变成英文了。
原创粉丝点击