Android app应用多语言切换功能实现
作者:android_it 发布时间:2023-12-27 22:06:27
本文实例为大家分享了Android app应用实现多语言切换功能,供大家参考,具体内容如下
1.添加多语言文件
在不同的 value 文件夹下(例如 value 、value-en、values-zh-rTW 文件夹)添加不同语言的 string.xml 文件,我们的项目添加了英文、简体中文、繁体中文三种语言,如下图所示:
Project模式:
Android模式:
其中英文需要翻译,繁体如果没有专门翻译的话,可以找个简繁转换网站,直接将简体中文转成繁体中文,推荐一个网站:
http://www.vifo.com.cn/fanti/
下面我只讲解简体中文和英文的做法;
2.现在我们可以在activity启动里面(onCreate()或者onResume())获取系统的语言:
Locale locale = Locale.getDefault();
String language = locale.getLanguage();
language就是我们从系统拿到的语言,这里如果是中文,拿到的是“zh”,如果是英文是“cn”;
3.拿到了系统语言,那么我们就要通过系统语言的判断改变我们app对应的系统语言:
protected void showLanguage(String language) {
//设置应用语言类型
Resources resources = getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
if (language.equals("zh")) {
config.locale = Locale.SIMPLIFIED_CHINESE;
} else {
config.locale = Locale.ENGLISH;
}
resources.updateConfiguration(config, dm);
//保存设置语言的类型(这个里面我先保存一下,下面会讲到他的用处)
PreferenceUtil.commitString("language", language);
}
这样子,如果你的手机开始的时候系统是中文,那么你的app就是中文,如果开始的时候系统是英文,那么你的app就是英文,这个只是适用开始的时候语言就已经设定好了,但是如果你现在的app用的是中文,app没有退出的情况下,直接去把系统设置成英文,那么你返回到你的app的时候并不会是英文,依然是中文,必须在程序退出之后,再进来的时候才会成为英文,这样子的体验一点都不好,那么我们怎么样才能做到你改系统语言,我的app就跟着去改变呢,所谓的动态改变。那么我们可以这样子做。
@Override
protected void onResume() {
super.onResume();
String LAN = PreferenceUtil.getString("language","");
Locale locale = Locale.getDefault();
String language = locale.getLanguage();
Log.i("语言————————",language);
if(!language.equals("")){
if(!LAN.equals(language)){
freshView();//重新启动MainActivity
}
}
showLanguage(language);
}
private void freshView(){
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
首先PreferenceUtil这个是我自己写的工具类,就是SharedPreferences存储,在onResume()里面,重要的就是做个判断,拿到的language是不是和之前保存系统的language一样,如果不一样,重新启动MainActivity,这样子就做到了重新获取系统language。
猜你喜欢
- 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Ap
- 1. 调试追踪代码: public static void enterTryMethod() { S
- HashMap的实现原理首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素(key-value)时,就首先计算元素key的h
- 本文是项目中使用了websocket进行一些数据的推送,对比项目做了一个demo,ws的相关问题不做细数,仅做一下记录。此demo针对ws的
- 在这里,我们将用到finish(),简单介绍一下它的使用:finish()官方解析:Call this when your activity
- 一、语音聊天说专业点就是即时语音,是一种基于网络的快速传递语音信息的技术,普遍应用于各类社交软件中,优势主要有以下几点:(1)时效性:视频直
- 环境JDK 1.8Spring Boot 2.3.0.RELEASEMaven 3.6.1H2 数据库用户名密码登录首先,我们用 Sprin
- 动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,并将这些子问题的解保存起来,如果以后在求解较大子问题的时候需要用到这些子问
- 简单了解计算机为什么要采用二进制表示信息:因为计算机作为一种电子计算机工具,是由大量的电子器件组成的,在这些电子器件中,电路的通断,电位的高
- 什么是不可变对象?String对象是不可变的,但这仅意味着你无法通过调用它的公有方法来改变它的值。众所周知, 在Java中, String类
- 我们有很多 Coding Style 或 代码规范。 但这一条可能会经常被我们所遗忘,就是我们 经常会在函数的参数里使用bool参数,这会大
- 一:什么是Bitmap像素级的操作相信大家都知道一张jpg或png放大后会是一个个小格子,称为一个像素(px),而且一个小格子是一种颜色,也
- 一、ArrayList简介在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:ArrayList底层是一段连
- 单元测试是编写测试代码,应该准确、快速地保证程序基本模块的正确性。JUnit是Java单元测试框架,已经在Eclipse中默认安装。JUni
- 准备工作这里就不说了,包括签约和申请APPID,附上微信开放平台APP开发步骤,不懂的同学可以参考这里:https://pay.weixin
- 一、Socket是什么Socket 的中文翻译过来就是“套接字”。套接字是什么,我们先来看看它的英文含义:插座。Socket 就像一个电话插
- 前言前段时间一直使用到word文档转pdf或者pdf转word,寻思着用Java应该是可以实现的,于是花了点时间写了个文件转换工具源码wel
- Java计算一段程序的运行时间介绍了两种方法,一种是毫秒级别的计算,另一种是更精确的纳秒级别的计算。毫秒级别计算时间  
- 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对,例如在数组{7,5,6,4}中,一共存在5对逆序对,分别是{
- 前言今天记录一个前段时间遇到的一个小问题的解决方法, 跨域!!!相信跨域这个问题, 做开发的或多或少都遇到过, 而且已经有很多博主已经分享了