Android 多语言设置,这里演示中英文转换
有的项目需要国际化,这样在语言需求方面就比较多了,所以我们需要设置语言转换,语言有很多,这里示范中英文转换。
工具: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 多语言设置,这里演示中英文转换相关推荐
- Android多语言支持以及繁简转换
Android多语言支持以及繁简转换 Android自身就带有多语言支持.前一段时间需要做一个同时支持繁简体的APP,经过简单的搜索和探索,轻松解决了问题.并且写了一个简单的繁体到简单的转换类.分享给 ...
- Android Locale语言设置
Android Locale语言设置 一.系统设置 二.应用级设置 (一)更新Locale 1.updateConfiguration 2.createConfigurationContext (二) ...
- Android多语言设置
如果Android应用需要做本地化,都要用到多语言来适配,例如手机设置成英文后,App内文字变成英文. App提供资源可以参考官方文档https://developer.android.com/gui ...
- Android的语言设置(二)
本文内容为原创,转载者请注明原始作者为seker,原始出处http://blog.csdn.net/seker_xinjian/archive/2011/03/30/6289191.aspx. 以避免 ...
- Android的语言设置(一)
本文内容为原创,转载者请注明原始作者为seker,原始出处为http://blog.csdn.net/seker_xinjian/archive/2011/03/30/6288957.aspx. 以避 ...
- android语言切换快捷键,Android的语言设置两种方法
第一种:修改配置文件 位置:build/target/product/languages_full.mk| languages_small.mk,这两个文件里头,有PRODUCT_LOCALES := ...
- android 英文语言设置字体,修改安卓ROM默认语言方法
修改安卓ROM默认语言方法 (2012-06-06 19:29:41) 标签: 安卓 默认语言 中文 手机博客 安卓Android手机的ROM目前主要有三大类: ①官方发布的正版: ②民间开发团队发布 ...
- Android的语言设置两种方法
第一种:修改配置文件 位置:build/target/product/languages_full.mk| languages_small.mk,这两个文件里头, ...
- android 游戏语言设置在哪里设置中文版,使命召唤手游语言变更方法 怎么设置中文...
很多小伙伴们在玩使命召唤手游外服的时候,一打开游戏都是英文的界面,那么这款游戏是怎么设置中文的呢,这里就来和大家分享一下使命召唤手游语言变更设置方法,一起来看看吧. 1.我们进入游戏之后,在主界面的右 ...
- android 多语言设置
最近APP里做到了多语言的功能,需要简体中文,繁体中文,英语,三种语言.去查找了一下资料发现语言的切换就只是重载了一下resources: 首先在values里新建values-en(英文) valu ...
最新文章
- c语言调用python变量_Python变量
- typescript获取数据库数据_肿瘤药敏多组学数据库(GDSC)的数据介绍和获取
- 关于 HTTP 和 TCP 的 keep-alive
- 自动增益(AGC)算法FPGA实现
- 胡玥的侦探小说《做局》及自传《时间之夜》
- 漫画:Integer 竟然有 4 种比较方法?
- python开源库生成式对抗网络_神经网络结构:生成式对抗网络(GAN)
- linux下 卸载qt_Ubuntu14.04安装、配置与卸载QT5的步骤详解
- Unity学习笔记(一)—— 基础知识
- VS2010轻松学习C#-从零到深入-天轰穿.NET4趣味编程视频教程
- Oracle数据库备份到本地
- 加固工程验收规范50550_GB 50550-2010建筑结构加固工程施工质量验收规范
- 微信网页授权只能配置一个域名
- Error: The method ‘DioHttpHeaders.add‘ has fewer named arguments than those of overridden method
- 我的世界java版地狱_我的世界怎么去地狱_Minecraft地狱门建造教程 - 我的世界中文站...
- 算法基础篇-05-排序-LowB三人组(冒泡/选择/插入排序)
- win10总是很快自动休眠怎么解决?
- zabbix 监控 php-fpm
- Java 利用Graphics2D 合并图片(png格式可设置透明)
- Java中的时间、时区和夏令时