最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种:

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.ENGLISHLocale.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 笔记
标签: android, 语言切换

Android app应用多语言切换功能实现相关推荐

  1. android locale app内设置,Android app应用多语言切换功能实现

    本文实例为大家分享了Android app应用实现多语言切换功能,供大家参考,具体内容如下 1.添加多语言文件在不同的 value 文件夹下(例如 value .value-en.values-zh- ...

  2. Android实现app内的语言切换功能

    我在目前所在的公司负责一个app项目的维护,最近需要对这个项目进行国际化,适配10多个国家的语言,在实现国际化过程中,遇到了很多问题,最麻烦的就是翻译了,得一个个将翻译从excel复制到资源文件中,还 ...

  3. android的app语言无法切换,Android应用实现多语言切换

    关于Android应用实现多语言切换,有好几种办法,网上也搜到很多资料,这里有个简单有效的办法. 步骤如下: 在资源文件中新建一个文件夹values-en,在里面新建一个strings.xml,把默认 ...

  4. uni-app项目使用多语言切换功能

    1.下载安装(vue-i18n模块) npm install vue-i18n --save 2.如果项目中没有package.json文件,在根目录下新建package.json文件,并把以下代码加 ...

  5. html怎么实现多语言图片切换,JavaScript实现--中英语言切换功能

    最近弄的项目是面向国际的,所以老总说要有语言切换功能.第一感觉好像不难吧 网上查了下,感觉实现方法就2种: 一:2个版本的HTML.至于怎么切换,方法也很多. 不过这种方法,除了笨,我实在不知道用什么 ...

  6. android app 多国语语言快速翻译

    android app 多国语语言快速翻译 在excel中输入A2单元格输入 设置 用公式提取出app_name: =IFERROR(IF(ISBLANK(A2),"",MID(A ...

  7. Android学习–Android app 语言切换功能

    功能: app用户根据自己的语言喜好,设置app语言.语言设置只针对本app,并在下次启动应用时保留前一次启动设置. 更新语言: public static void changeAppLanguag ...

  8. Android 仿微信多语言切换

    目录 一.简介 二.效果预览 三.实现步骤 1.功能实现 2.配置多语言文件 四.MultiLanguageUtils分析 五.Demo地址 六.内容推荐 一.简介 我想搜到这篇文章的朋友应该不需要我 ...

  9. Android实现应用内语言切换,android 应用内切换 多国语言

    微信中可以动态设置,apk的语言版本,最近尝试实现了这个功能. 我们知道,android本身就支持多国语言版本的. 不过这个语言的切换 依赖于系统的的语言设置,见图 也依赖apk本身values多国语 ...

最新文章

  1. python中collections_Python中的collections模块
  2. HTTP协议详解 转自小坦克
  3. 图书管理系统可行性分析报告范例_会做可行性分析报告贺州专家团队*金
  4. 阿里上市,四大洲8个国家的十位代表敲锣;全球首款支持5G双卡双待的芯片发布;撕裂者3990X:桌面史上第一次64核128线程……...
  5. 【模拟】Ingenious Lottery Tickets
  6. 超大杯来了!一加10 Ultra将在第三季度登场:或搭载OPPO 自研影像芯片
  7. css修改图片形状,css定位图形改(原创)
  8. 腾讯离职领导的建议:如果可以,去做大数据,不要做报表
  9. Mac下MySQL卸载方法
  10. 冷藏温度范围_机械式、干冰式、冷板式、液氮式等冷藏车制冷方式横向对比
  11. JavaScript-拷贝
  12. Prometheus 监控 nginx
  13. unity 简易游戏打飞碟V2
  14. 一篇文章看明白 Activity 与 Window 与 View 之间的关系
  15. Android7.1 亮度自动调节
  16. 数据集成之数据整合(Data Consolidation)
  17. 找玩具 概率 dfs
  18. 平台计算机网课视频无法加载,微信电脑版视频无法播放怎么办?微信电脑版视频播放不了的解决方法...
  19. IDM关于某些应用程序阻止了IDM集成到浏览器中
  20. RPLIDAR A2 rviz显示雷达数据教程

热门文章

  1. 粤港澳大湾区落地首家技术VC,创新工场25亿加持,做投资也做AI研发
  2. 从AI打王者荣耀到自动驾驶,高通一口气公布了5G+AI未来的无数种可能
  3. 马斯克一说特斯拉“全自动驾驶”,大家就想笑
  4. 真·干货!这套深度学习教程整理走红,从理论到实践的带你系统学习 | 资源...
  5. 英国莽汉司机认罪:放任特斯拉自动驾驶,自己躺在副驾悠哉悠哉
  6. 海量ICLR论文点评公开,用这几个工具可以读得更轻松
  7. python pip 安装
  8. Spring官网改版后下载
  9. ipconfig显示IP地址情况
  10. PacMan开发-碰撞检测实现