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.完成上述行云流水般的操作,再跳转下个界面,字符资源就变成英文了。
阅读全文
3 0
- Android国际化 动态更换本地语言
- android 动态加载 语言xml 实现国际化
- android国际化代码动态更改语言环境
- 本地语言国际化
- struts2 国际化,修改本地语言
- Android 动态更换图标
- spring3国际化 动态语言切换
- Android 之 语言 国际化
- Android 语言国际化
- android 自适应国际化语言
- Android 语言国际化
- Android语言国际化
- Android APP 语言国际化
- android语言国际化
- android 多语言国际化
- Android自适应国际化语言
- android语言国际化
- android之语言国际化
- USB和串口(COM)的区别,以及相互转换
- 字符串中转义实现
- Problem 15 Lattice paths
- 单元测试
- 使用vscode,新建vue模板
- Android国际化 动态更换本地语言
- CodeForces
- Mac上使用virtualenv搭建虚拟环境
- 杭电problem6043- KazaQ's Socks
- 增长奥秘:滴滴当年如何挖掘最有效的渠道和增长方法?
- 如果明天永远不来—可是今天我又做了什么呢?
- Zookeeper简介
- 提高linux socket 性能技巧
- 解决Java程序向mysql数据库插入中文乱码问题的多种方式