Android国际化 动态更换本地语言
2017-07-26 10:20
393 查看
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.得到自定义资源对象DisplayMetrics 5.资源对象更新配置文件 6.完成上述行云流水般的操作,再跳转下个界面,字符资源就变成英文了。
相关文章推荐
- android 动态加载 语言xml 实现国际化
- 解决android 语言国际化在横竖屏切换后,设置的语言又变为本地语言
- android国际化代码动态更改语言环境
- android 动态加载 语言xml 实现国际化
- android国际化(多语言)
- Android国际化问题以及在应用内切换不同语言设置
- Android(国际化)多语言的实现和切换
- android 动态实现点击ImageButton更换图片
- Android 动态更换图标
- android国际化语言-各国或地区语言缩写或简称
- Android之动态更换桌面图标
- android多国语言 国际化
- android 资源国际化 语言 国家/地区 缩写代码
- Android 史上最强多语言国际化,不仅第一次会跟随系统,而且会保存用户的语言设置
- Android之动态设置App语言环境
- Android Studio多渠道打包并动态更换应用名、icon、参数等(一)
- android多语言与国际化
- Android适配之适配不同语言,即国际化
- android国际化之各国区域和语言的标志码
- QT5(10)语言国际化 动态修改