Android app应用多语言切换功能实现
最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种:
1. 实现的效果
和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成,下次重新打开 App ,也是用户设置的语言。
2. 实现步骤
1. 添加多语言文件
在不同的 value 文件夹下(例如 value 、value-en、values-zh-rTW 文件夹)添加不同语言的 string.xml
文件,我们的项目添加了英文、简体中文、繁体中文三种语言,如下图所示:
其中英文需要翻译,繁体如果没有专门翻译的话,可以找个简繁转换网站,直接将简体中文转成繁体中文,我用的这个网站:在线中文简体转繁体。
2. 更新 Configuration 中的 locale 属性
参照 Android 开发者官网 上 的描述,Configuration 包含了设备的所有的配置信息,这些配置信息会影响应用获取的资源。例如 string 资源,就是根据 Configuration 的 locale 属性来判断该取哪种语言的 string 资源,默认是 value 文件夹下的。
主要代码如下:
1 Resources resources = getContext().getResources(); 2 DisplayMetrics dm = resources.getDisplayMetrics(); 3 Configuration config = resources.getConfiguration(); 4 // 应用用户选择语言 5 config.locale = Locale.ENGLISH; 6 resources.updateConfiguration(config, dm);
我们用了 Locale
中的预设值 Locale.ENGLISH
、Locale.TRADITIONAL_CHINESE
和 Locale.SIMPLIFIED_CHINESE
,如果你需要设置的语言没有预设值,你可以自己新建一个 Locale
对象,具体自行 Google 吧。
注:跟随系统设置是 Locale.getDefault()
3. 重启 HomeActivity
我 们的 App 有个启动页 WelcomeActivity,类似微信那个小人启动页,如果从欢迎页重启,并不是一个好的体验,应该和微信的语言设置一样,直接回到 HomeActivity ,而不是从 WelcomeActivity 重新打开。实现其实也很简单,代码如下:
1 Intent intent = new Intent(this, HomeActivity.class); 2 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 3 getActivity().startActivity(intent);
正常来说这段代码应该是没问题的,但是假如你的 App 存在某个 activity 和当前设置页 activity 不在一个 task 栈内的话(比如你从某个通知页用 FLAG_ACTIVITY_NEW_TASK
启动的一个 activity),就不会应用语言设置。因此可以直接杀掉当前 App 的进程,保证是“整个”重启了:
1 Intent intent = new Intent(this, HomeActivity.class); 2 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 3 startActivity(intent); 4 // 杀掉进程 5 android.os.Process.killProcess(android.os.Process.myPid()); 6 System.exit(0);
按道理杀掉进程的两行代码任意一行即可,但是查阅相关资料,还是两个都加上吧,如果有详细了解欢迎沟通。此段代码其实参考自 CustomActivityOnCrash 开源项目,有兴趣的可以研究下这个开源库捕捉崩溃信息,重启应用部分的代码。
个人觉得这种重启HomeActivity的方法太粗暴了而且体验不好,不过貌似微信也是这么重启了HomeActivity。一般语言切换的设置会藏的比较深,比如微信,如果一个用户对手机操作不熟或者说对这个应用不熟,不小心切换了不知道什么语言然后给我跳回主页,再想设回中文就麻烦咯。所以,我认为最好是切完语言立即刷新然后还是停留当前页比较好。具体实现如下:
1、还是要添加多语言文件,跟上面的步骤1一样;
2、在BaseActivity中实现语言切换代码:
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EventBus.getDefault().register(this);changeAppLanguage();}
1 public void changeAppLanguage() {2 String sta = Store.getLanuageIsChinese() ? "zh" : "en";//这是SharedPreferences工具类,用于保存设置,代码很简单,自己实现吧3 // 本地语言设置4 Locale myLocale = new Locale(sta);5 Resources res = getResources();6 DisplayMetrics dm = res.getDisplayMetrics();7 Configuration conf = res.getConfiguration();8 conf.locale = myLocale;9 res.updateConfiguration(conf, dm); 10 }
1 public void onEvent(String str) { 2 switch (str) { 3 case Constant.EVENT_REFRESH_LANGUAGE: 4 changeAppLanguage(); 5 recreate();//刷新界面 6 break; 7 } 8 }
1 @Override 2 protected void onDestroy() { 3 super.onDestroy(); 4 EventBus.getDefault().unregister(this); 5 }
3、设置界面中的实现自然就是更新sharedPreferences 中的设置,然后发送EventBus就行啦
1 if () {//中文 2 Store.setLanuageIsChinese(true); 3 } else if () {//英文 4 Store.setLanuageIsChinese(false); 5 } 6 EventBus.getDefault().post(Constant.EVENT_REFRESH_LANGUAGE);
基本思路就是这样,如果还有什么更好的方法,敬请给俺留言,让我膜拜一下。
Android app应用多语言切换功能实现相关推荐
- android locale app内设置,Android app应用多语言切换功能实现
本文实例为大家分享了Android app应用实现多语言切换功能,供大家参考,具体内容如下 1.添加多语言文件在不同的 value 文件夹下(例如 value .value-en.values-zh- ...
- Android实现app内的语言切换功能
我在目前所在的公司负责一个app项目的维护,最近需要对这个项目进行国际化,适配10多个国家的语言,在实现国际化过程中,遇到了很多问题,最麻烦的就是翻译了,得一个个将翻译从excel复制到资源文件中,还 ...
- android的app语言无法切换,Android应用实现多语言切换
关于Android应用实现多语言切换,有好几种办法,网上也搜到很多资料,这里有个简单有效的办法. 步骤如下: 在资源文件中新建一个文件夹values-en,在里面新建一个strings.xml,把默认 ...
- uni-app项目使用多语言切换功能
1.下载安装(vue-i18n模块) npm install vue-i18n --save 2.如果项目中没有package.json文件,在根目录下新建package.json文件,并把以下代码加 ...
- html怎么实现多语言图片切换,JavaScript实现--中英语言切换功能
最近弄的项目是面向国际的,所以老总说要有语言切换功能.第一感觉好像不难吧 网上查了下,感觉实现方法就2种: 一:2个版本的HTML.至于怎么切换,方法也很多. 不过这种方法,除了笨,我实在不知道用什么 ...
- android app 多国语语言快速翻译
android app 多国语语言快速翻译 在excel中输入A2单元格输入 设置 用公式提取出app_name: =IFERROR(IF(ISBLANK(A2),"",MID(A ...
- Android学习–Android app 语言切换功能
功能: app用户根据自己的语言喜好,设置app语言.语言设置只针对本app,并在下次启动应用时保留前一次启动设置. 更新语言: public static void changeAppLanguag ...
- Android 仿微信多语言切换
目录 一.简介 二.效果预览 三.实现步骤 1.功能实现 2.配置多语言文件 四.MultiLanguageUtils分析 五.Demo地址 六.内容推荐 一.简介 我想搜到这篇文章的朋友应该不需要我 ...
- Android实现应用内语言切换,android 应用内切换 多国语言
微信中可以动态设置,apk的语言版本,最近尝试实现了这个功能. 我们知道,android本身就支持多国语言版本的. 不过这个语言的切换 依赖于系统的的语言设置,见图 也依赖apk本身values多国语 ...
最新文章
- python中collections_Python中的collections模块
- HTTP协议详解 转自小坦克
- 图书管理系统可行性分析报告范例_会做可行性分析报告贺州专家团队*金
- 阿里上市,四大洲8个国家的十位代表敲锣;全球首款支持5G双卡双待的芯片发布;撕裂者3990X:桌面史上第一次64核128线程……...
- 【模拟】Ingenious Lottery Tickets
- 超大杯来了!一加10 Ultra将在第三季度登场:或搭载OPPO 自研影像芯片
- css修改图片形状,css定位图形改(原创)
- 腾讯离职领导的建议:如果可以,去做大数据,不要做报表
- Mac下MySQL卸载方法
- 冷藏温度范围_机械式、干冰式、冷板式、液氮式等冷藏车制冷方式横向对比
- JavaScript-拷贝
- Prometheus 监控 nginx
- unity 简易游戏打飞碟V2
- 一篇文章看明白 Activity 与 Window 与 View 之间的关系
- Android7.1 亮度自动调节
- 数据集成之数据整合(Data Consolidation)
- 找玩具 概率 dfs
- 平台计算机网课视频无法加载,微信电脑版视频无法播放怎么办?微信电脑版视频播放不了的解决方法...
- IDM关于某些应用程序阻止了IDM集成到浏览器中
- RPLIDAR A2 rviz显示雷达数据教程
热门文章
- 粤港澳大湾区落地首家技术VC,创新工场25亿加持,做投资也做AI研发
- 从AI打王者荣耀到自动驾驶,高通一口气公布了5G+AI未来的无数种可能
- 马斯克一说特斯拉“全自动驾驶”,大家就想笑
- 真·干货!这套深度学习教程整理走红,从理论到实践的带你系统学习 | 资源...
- 英国莽汉司机认罪:放任特斯拉自动驾驶,自己躺在副驾悠哉悠哉
- 海量ICLR论文点评公开,用这几个工具可以读得更轻松
- python pip 安装
- Spring官网改版后下载
- ipconfig显示IP地址情况
- PacMan开发-碰撞检测实现