Android 实现中英文切换

在开发海外项目的时候,需要实现app内部的中英文切换功能,所有的英文都是内置的,整体思路为:

创建一个sp对象,存储当前系统的语言类型,然后在BaseActivity中对语言进行判断;

//公共Activitypublic abstract class BaseActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {setTransparent();super.onCreate(savedInstanceState);setContentView(initLayout());String languageCode = SpUtils.getString(this, Constants.LANGUAGE);//从SP中取出来的当前语言类型;中文是:"cn",英文是:"en",对应底下的这个languageCode//系统内置的设置app内语言的功能;Locale locale = new Locale(languageCode);Locale.setDefault(locale);Configuration config = new Configuration();config.setLocale(locale);getResources().updateConfiguration(config, getResources().getDisplayMetrics());}//设置布局protected abstract int initLayout();
}

2、可以新开一个页面,用来set当前的sp中数据(只写代码)

Constants.LANGUAGE:

public static final String LANGUAGE = "application_language";//语言设置

//可以自定义一个String字符串,不用全局变量

//设置语言的方法,通过传入的language判断当前用户选择的是中文还是英文
public void setLanguage(String language) {if (language.equals("中文")) {switchLanguage("cn");} else {switchLanguage("en");}}//选完之后就可以将app中的语言进行切换public void switchLanguage(String languageCode) {Locale locale = new Locale(languageCode);Locale.setDefault(locale);Configuration config = new Configuration();config.setLocale(locale);getResources().updateConfiguration(config, getResources().getDisplayMetrics());SpUtils.putString(mContext, Constants.LANGUAGE, languageCode);
//(这个只是SP的工具类,可以不用这个,直接用SP写入,都是一样的,我习惯别名用静态的,不容易写错)restartApplication(mContext);}//然后重启app生效public static void restartApplication(Context context) {Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());if (intent != null) {intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);context.startActivity(intent);}System.exit(0);}
SpUtils:
public class SpUtils {private static final String spFileName = "app";public static String getString(Context context, String strKey) {SharedPreferences setPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);String result = setPreferences.getString(strKey, "");return result;}public static String getString(Context context, String strKey,String strDefault) {SharedPreferences setPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);String result = setPreferences.getString(strKey, strDefault);return result;}public static void putString(Context context, String strKey, String strData) {SharedPreferences activityPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);SharedPreferences.Editor editor = activityPreferences.edit();editor.putString(strKey, strData);editor.commit();}public static Boolean getBoolean(Context context, String strKey) {SharedPreferences setPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);Boolean result = setPreferences.getBoolean(strKey, false);return result;}public static Boolean getBoolean(Context context, String strKey,Boolean strDefault) {SharedPreferences setPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);Boolean result = setPreferences.getBoolean(strKey, strDefault);return result;}public static void putBoolean(Context context, String strKey,Boolean strData) {SharedPreferences activityPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);SharedPreferences.Editor editor = activityPreferences.edit();editor.putBoolean(strKey, strData);editor.commit();}public static int getInt(Context context, String strKey) {SharedPreferences setPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);int result = setPreferences.getInt(strKey, -1);return result;}public static int getInt(Context context, String strKey, int strDefault) {SharedPreferences setPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);int result = setPreferences.getInt(strKey, strDefault);return result;}public static void putInt(Context context, String strKey, int strData) {SharedPreferences activityPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);SharedPreferences.Editor editor = activityPreferences.edit();editor.putInt(strKey, strData);editor.commit();}public static long getLong(Context context, String strKey) {SharedPreferences setPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);long result = setPreferences.getLong(strKey, -1);return result;}public static long getLong(Context context, String strKey, long strDefault) {SharedPreferences setPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);long result = setPreferences.getLong(strKey, strDefault);return result;}public static void putLong(Context context, String strKey, long strData) {SharedPreferences activityPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);SharedPreferences.Editor editor = activityPreferences.edit();editor.putLong(strKey, strData);editor.commit();}public static void cleanSp(Context context) {SharedPreferences activityPreferences = context.getSharedPreferences(spFileName, Context.MODE_PRIVATE);SharedPreferences.Editor editor = activityPreferences.edit();editor.clear();editor.apply();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/35052.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Qt-练习1(事件循环)

一、练习要求 1、使用QT的IO读取文件; 2、以QSlider为基础,写一个进度条,显示文件读取的进度; 3、给QSlider布置qss样式,qss文件像css文件一样,分离出来。 二、源码 全部源码 源码目录: 1.1 、m…

解决Clang 18+不能链接GCC14编译的库的问题

前面笔者的博文MSYS2 MinGW64使用Protobuf新版本踩坑,有提到使用最新的Clang 19.1.4版本在MinGW下无法正常链接使用了Protobuf 28.3的项目,因为MinGW下的项目默认都是使用GCC来编译的,所以如果开发者使用Clang编译器,必然会出现链…

城市内涝监测预警系统解决方案-智慧排水

成因分析 气候变化 受全球气候变暖导致大气水循环加快,环流不稳定性增加,进一步引发极端降雨事件受城市热岛效应、雨岛效应的影响,强降雨常集中于城市且雨量多,强度大且雨量多。 排水系统不完善 城市发展快,城市防洪排涝工程&a…

Python:使用随机森林分类器进行模型评估:ROC 曲线与 AUC 指标计算

前言 这段代码的目标是使用 随机森林分类器(Random Forest Classifier) 来进行二分类任务,并基于每个数据子集计算 ROC 曲线(Receiver Operating Characteristic Curve)以及 AUC(Area Under Curve&#xf…

【JAVA练习】力扣1232.缀点成线

题目: 解题思路: 直线上面的点满足公式:, 如果所有点在一条直线上,即任意两点的斜率相同,由于计算斜率存在精度的问题,可以将除法等价于乘法。 等价于 class Solution {public boolean che…

【SKFramework框架核心模块】3-12、网络请求模块

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【Unity3D框架】SKFramework框架完全教程《全…

C# 反射(Reflection)

文章目录 前言一、反射的优缺点(一)优点(二)缺点 二、反射的用途(一)查看特性(attribute)信息(二)审查集合中的各种类型并实例化(三)实…

Jdk配置、maven配置、gradle配置、Java开发常用的依赖库

一、配置JDK环境变量: 1. 安装 JDK 首先确保已经安装了 JDK。如果还没有安装,可以从 Oracle 官网 或者 AdoptOpenJDK 下载并安装合适的 JDK 版本。 我建议下载这个:https://adoptium.net/zh-CN/temurin/releases/?oswindows&archx64&…

【AI系统】FBNet 系列

FBNet 系列 本文主要介绍 FBNet 系列,在这一章会给大家带来三种版本的 FBNet 网络,从基本 NAS 搜索方法开始,到 v3 版本的独特方法。在本节中读者会了解到如何用 NAS 搜索出最好的网络和训练参数。 FBNet V1 模型 FBNetV1:完全基于 NAS 搜…

二十三、Linux可视管理之webmin和bt运维工具

1、webmin 基本介绍 Webmin 是功能强大的基于 Web 的 Unix/linux 系统管理工具。管理员通过浏览器访问 Webmin 的各种管理功能并完成相应的管理操作。除了各版本的 linux 以外还可用于:AIX、HPUX、Solaris、Unixware、Irix 和 FreeBSD 等系统安装webmin&配置 …

聚合支付系统/官方个人免签系统/三方支付系统稳定安全高并发 附教程

聚合支付系统/官方个人免签系统/三方支付系统稳定安全高并发 附教程 系统采用FastAdmin框架独立全新开发,安全稳定,系统支持代理、商户、码商等业务逻辑。 针对最近一些JD,TB等业务定制,子账号业务逻辑API 非常详细,方便内置…

Transformer真的是机器人技术的基础吗?

生成式预训练Transformer(GPT)被吹捧为将彻底改变机器人技术。但实际应用中,GPT需要庞大且昂贵的计算资源、冗长的训练时间以及(通常)非机载无线控制,诸多限制之下,GPT技术真的实用吗&#xff1…

使用脚本语言实现Lumerical官方案例——闪耀光栅(Blazed grating)(纯代码)(2)

接《使用脚本语言实现Lumerical官方案例——闪耀光栅(Blazed grating)(纯代码)(1)》 一、添加分析组 1.1 代码实现 #添加分析组 addanalysisgroup(); set("name", "grating_R"); set("x", 0); set("y", 2.5*um); addanalysisgrou…

【Java】异常处理见解,了解,进阶到熟练掌握

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦 大家好我们今天来学习Java面向对象的的抽象类和接口,我们大家庭已经来啦~ 目录 1.(throws和throw)我们不管这个异常&…

Oracle数据库 用户管理模式下的冷备份与热备份

1. 用户管理模式下的冷备份 1.1. 通过数据库相关视图查询 查实例 select instance_name,version,status,archiver,database_status from v$instance; 查数据库 select dbid,name,log_mode from v$database; 查数据文件状态 select file_name,tablespace_name,status,o…

Solon 3.0.4 发布(Spring 的替代方案,备胎计划)

Solon 框架! 面向全场景的 Java 应用开发框架。从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态。新一代 Java 应用软件的生态基座。开放原子开源基金会,孵化项目。 追求: 更快、更小、更简单…

严格单元测试造就安全软件

在信息技术迅速发展的今天,软件在各个行业中扮演着至关重要的角色,尤其是在汽车行业,其中软件的可靠性和安全性直接影响到人们的生命安全。软件缺陷所带来的潜在风险不容小觑,尤其在涉及到自动驾驶和车辆控制等关键系统时&#xf…

基于CALMET诊断模型的高时空分辨率精细化风场模拟技术应用

在研究流场时,常用观测、模型风洞测试和数值模拟方法进行研究。但时常遇到研究区气象站点分布稀疏,不能代表周边复杂地形的风场。风洞模拟需要对地形进行实景的微缩,但实际过程中可能更关心近地表边界层的风场。风洞模拟一方面费用较高&#…

手写签名OCR识别-提升文档处理效率

随着数字化办公和智能化管理的普及,企业在日常业务中处理的各类单据和文件数量与日俱增。这些文件不仅包括了繁琐的文字信息,还涉及到重要的签名和印章等手写元素。尤其是在合同、协议、发票、审批单等文档中,手写签名不仅是身份确认的重要标…

Flutter:webview打开网页

官方文档地址 下方代码来自官方文档&#xff0c;先简单记录下如何通过webview打开某个http地址 添加权限&#xff1a;android/app/src/main/AndroidManifest.xml <uses-permission android:name"android.permission.INTERNET"/>pubspec.yaml webview_flutter: …