有的项目需要国际化,这样在语言需求方面就比较多了,所以我们需要设置语言转换,语言有很多,这里示范中英文转换。

工具:Android Studio

1、生成需要转换语种的 string.xml 文件

2、语种使用设置

3、语种转换

1、生成需要转换语种的 string.xml 文件

在android studio项目中,点击 鼠标右键 res > new > android Resource Directory 将会看到如下界面

选中 Locale ,将会看到如下界面

选中英文语言后点击ok,就会生成右边界面看到的 values-en 文件夹,在里面创建一个新的 string.xml 文件,用来放置英文内容

如图,values 里面的 string.xml 用来设置中文以及常规加载, values-en 文件夹下的 string.xml 用来设置英文加载

2、语种使用设置

上面定义好语种放置位置之后就可以进行设置,让系统知道加载哪个文件夹下的语言文件

这里我们在 Application 里设置语言,代码如下:

import android.app.Application;
import com.self.iscopy.db.SPUtils;
import com.self.iscopy.utils.system.LanguageUtils;
import com.self.iscopy.utils.tl.L;
import java.util.Locale;
import cn.jpush.android.api.JPushInterface;public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();String language = SPUtils.getLanguage(this);if(!language.equals("Language")){Locale locale = LanguageUtils.getAppLocale();LanguageUtils.changeAppLanguage(this, locale,true);}}
}

上面的 SPUtils.getLanguage(this) 和 LanguageUtils.getAppLocale() 以及 LanguageUtils.changeAppLanguage(this, locale,true)

这三个方法参考 3 语种转换

3、语种转换

因为这里只有两种语言需要切换,所以我只用了一个按钮来控制切换

代码如下:

buLanguage.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String language = SPUtils.getLanguage(MainActivity.this);if(language.equals("Language")){LanguageUtils.changeAppLanguage(MainActivity.this, Locale.ENGLISH, true);}else{SPUtils.setLanguage("Language", MainActivity.this);}}
});

其中  SPUtils 是我定义的一个 SharedPreferences 工具类,用来保存语言设置,代码如下

//Language
public static String getLanguage(Context context){return share(context).getString("Language","Language");
}
//这里使用的是 apply() 方法保存,将不会有返回值
public static void setLanguage(String Language, Context context){SharedPreferences.Editor e = share(context).edit();e.putString("Language",Language);e.apply();
}//创建
public static SharedPreferences share(Context context){SharedPreferences sharedPreferences = context.getSharedPreferences("data", Context.MODE_PRIVATE);return sharedPreferences;
}

上面我定义的是默认为 “Language” 就是如果 SharedPreferences 里 getLanguage 里面的值为 “Language” 时,显示默认的也就是中文语言。如果当前是中文语言,就调用 LanguageUtils 语言工具类,里面的 changeAppLanguage 语言设置方法进行设置,代码如下:

import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.util.DisplayMetrics;
import com.self.iscopy.db.SPUtils;
import java.util.Locale;/*** creator iscopy .* time 2018/12/27* 语言设置*/
public class LanguageUtils {/*** 更改app语言* @param context* @param locale* @param persistence*/public static void changeAppLanguage(Context context, Locale locale, boolean persistence) {Resources resources = context.getResources();DisplayMetrics metrics = resources.getDisplayMetrics();Configuration configuration = resources.getConfiguration();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {configuration.setLocale(locale);} else {configuration.locale = locale;}resources.updateConfiguration(configuration, metrics);if (persistence) {SPUtils.setLanguage(locale.getLanguage(), context);//保存设置的语言}}/*** 返回当前使用语言* @return*/public static Locale getAppLocale(){Locale locale = new Locale(Locale.ENGLISH.getLanguage());return locale;}
}

这样就简单的实现了语言切换的效果,效果展示:

不过,这里有一个缺陷,转换效果需要重启app才能够实现,因为数据已经加载好了,当前实时实现语言切换的需要后台数据

我们可以提示用户,需要重启APP才能实现语言切换,让用户去重启,也可以设置如下代码,在永用户同意的情况下调用,个人觉得可以使用弹框询问,如果是第一次进入时,可以在过了引导页后直接跳转跳转到语言设置去

//重启app
public void restart(){/*//关闭appIntent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(i);*/Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());PendingIntent restartIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);mgr.set(AlarmManager.RTC, System.currentTimeMillis(), restartIntent);android.os.Process.killProcess(android.os.Process.myPid());
}

如果有很多种语言设置也可以参照当前逻辑

Android 多语言设置,这里演示中英文转换相关推荐

  1. Android多语言支持以及繁简转换

    Android多语言支持以及繁简转换 Android自身就带有多语言支持.前一段时间需要做一个同时支持繁简体的APP,经过简单的搜索和探索,轻松解决了问题.并且写了一个简单的繁体到简单的转换类.分享给 ...

  2. Android Locale语言设置

    Android Locale语言设置 一.系统设置 二.应用级设置 (一)更新Locale 1.updateConfiguration 2.createConfigurationContext (二) ...

  3. Android多语言设置

    如果Android应用需要做本地化,都要用到多语言来适配,例如手机设置成英文后,App内文字变成英文. App提供资源可以参考官方文档https://developer.android.com/gui ...

  4. Android的语言设置(二)

    本文内容为原创,转载者请注明原始作者为seker,原始出处http://blog.csdn.net/seker_xinjian/archive/2011/03/30/6289191.aspx. 以避免 ...

  5. Android的语言设置(一)

    本文内容为原创,转载者请注明原始作者为seker,原始出处为http://blog.csdn.net/seker_xinjian/archive/2011/03/30/6288957.aspx. 以避 ...

  6. android语言切换快捷键,Android的语言设置两种方法

    第一种:修改配置文件 位置:build/target/product/languages_full.mk| languages_small.mk,这两个文件里头,有PRODUCT_LOCALES := ...

  7. android 英文语言设置字体,修改安卓ROM默认语言方法

    修改安卓ROM默认语言方法 (2012-06-06 19:29:41) 标签: 安卓 默认语言 中文 手机博客 安卓Android手机的ROM目前主要有三大类: ①官方发布的正版: ②民间开发团队发布 ...

  8. Android的语言设置两种方法

    第一种:修改配置文件                    位置:build/target/product/languages_full.mk| languages_small.mk,这两个文件里头, ...

  9. android 游戏语言设置在哪里设置中文版,使命召唤手游语言变更方法 怎么设置中文...

    很多小伙伴们在玩使命召唤手游外服的时候,一打开游戏都是英文的界面,那么这款游戏是怎么设置中文的呢,这里就来和大家分享一下使命召唤手游语言变更设置方法,一起来看看吧. 1.我们进入游戏之后,在主界面的右 ...

  10. android 多语言设置

    最近APP里做到了多语言的功能,需要简体中文,繁体中文,英语,三种语言.去查找了一下资料发现语言的切换就只是重载了一下resources: 首先在values里新建values-en(英文) valu ...

最新文章

  1. c语言调用python变量_Python变量
  2. typescript获取数据库数据_肿瘤药敏多组学数据库(GDSC)的数据介绍和获取
  3. 关于 HTTP 和 TCP 的 keep-alive
  4. 自动增益(AGC)算法FPGA实现
  5. 胡玥的侦探小说《做局》及自传《时间之夜》
  6. 漫画:Integer 竟然有 4 种比较方法?
  7. python开源库生成式对抗网络_神经网络结构:生成式对抗网络(GAN)
  8. linux下 卸载qt_Ubuntu14.04安装、配置与卸载QT5的步骤详解
  9. Unity学习笔记(一)—— 基础知识
  10. VS2010轻松学习C#-从零到深入-天轰穿.NET4趣味编程视频教程
  11. Oracle数据库备份到本地
  12. 加固工程验收规范50550_GB 50550-2010建筑结构加固工程施工质量验收规范
  13. 微信网页授权只能配置一个域名
  14. Error: The method ‘DioHttpHeaders.add‘ has fewer named arguments than those of overridden method
  15. 我的世界java版地狱_我的世界怎么去地狱_Minecraft地狱门建造教程 - 我的世界中文站...
  16. 算法基础篇-05-排序-LowB三人组(冒泡/选择/插入排序)
  17. win10总是很快自动休眠怎么解决?
  18. zabbix 监控 php-fpm
  19. Java 利用Graphics2D 合并图片(png格式可设置透明)
  20. Java中的时间、时区和夏令时

热门文章

  1. 用C写邮箱密码暴力破解器
  2. 单细胞测序技术(single cell sequencing)
  3. 标签系列三:spring 中property解释以及property标签里面的属性
  4. c语言写股票交易软件,写股票软件
  5. 被逼无奈,沉默寡言的程序员也开始露脸拍视频了
  6. mysql的number范围_数据库number类型精度实用分析
  7. 中控考勤机-C#操作
  8. 在短视频源码开发中,移动端音视频加密、防盗播实现方案
  9. Word frequency program 词频分析程序
  10. Difference between UDP and TCP