AboutAndroid 多语种适配框架,兼容高版本,适配第三方库语种

语种切换框架

  • 项目地址:Github

  • 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,点击此处可直接下载

集成步骤
  • 如果你的项目 Gradle 配置是在 7.0 以下,需要在 build.gradle 文件中加入
allprojects {repositories {// JitPack 远程仓库:https://jitpack.iomaven { url 'https://jitpack.io' }}
}
  • 如果你的 Gradle 配置是 7.0 及以上,则需要在 settings.gradle 文件中加入
dependencyResolutionManagement {repositories {// JitPack 远程仓库:https://jitpack.iomaven { url 'https://jitpack.io' }}
}
  • 配置完远程仓库后,在项目 app 模块下的 build.gradle 文件中加入远程依赖
dependencies {// 语种切换框架:https://github.com/getActivity/MultiLanguagesimplementation 'com.github.getActivity:MultiLanguages:9.3'
}
初始化框架
  • 在 Application 中初始化框架
public final class XxxApplication extends Application {@Overridepublic void onCreate() {super.onCreate();// 初始化语种切换框架MultiLanguages.init(this);}
}
  • 重写 Application 的 attachBaseContext 方法
@Override
protected void attachBaseContext(Context base) {// 绑定语种super.attachBaseContext(MultiLanguages.attach(base));
}
  • 重写基类 BaseActivity 的 attachBaseContext 方法
@Override
protected void attachBaseContext(Context newBase) {// 绑定语种super.attachBaseContext(MultiLanguages.attach(newBase));
}
  • 只要是 Context 的子类都需要重写,Service 也雷同,这里不再赘述

  • 温馨提示:Fragment 不需要重写此方法,因为它不是 Context 的子类

语种设置
// 设置当前的语种(返回 true 表示需要重启 App)
MultiLanguages.setAppLanguage(Context context, Locale locale);// 获取当前的语种
MultiLanguages.getAppLanguage(Context context);// 跟随系统语种(返回 true 表示需要重启 App)
MultiLanguages.clearAppLanguage(Context context);
其他 API
// 获取系统的语种
MultiLanguages.getSystemLanguage(Context context);
// 是否跟随系统的语种
MultiLanguages.isSystemLanguage(Context context);// 对比两个语言是否是同一个语种(比如:中文有简体和繁体,英语有美式和英式)
MultiLanguages.equalsLanguage(Locale locale1, Locale locale2);
// 对比两个语言是否是同一个地方的(比如:中国大陆用的中文简体,中国台湾用的中文繁体)
MultiLanguages.equalsCountry(Locale locale1, Locale locale2);// 获取某个语种下的 String
MultiLanguages.getLanguageString(Context context, Locale locale, int stringId);
// 生成某个语种下的 Resources 对象
MultiLanguages.generateLanguageResources(Context context, Locale locale);// 更新 Context 的语种
MultiLanguages.updateAppLanguage(Context context);
// 更新 Resources 的语种
MultiLanguages.updateAppLanguage(Resources resources);// 设置默认的语种(越早设置越好)
MultiLanguages.setDefaultLanguage(Locale locale);
语种变化监听器
// 设置语种变化监听器
MultiLanguages.setOnLanguageListener(new OnLanguageListener() {@Overridepublic void onAppLocaleChange(Locale oldLocale, Locale newLocale) {Log.d("MultiLanguages", "监听到应用切换了语种,旧语种:" + oldLocale + ",新语种:" + newLocale);}@Overridepublic void onSystemLocaleChange(Locale oldLocale, Locale newLocale) {Log.d("MultiLanguages", "监听到系统切换了语种,旧语种:" + oldLocale + ",新语种:" + newLocale + ",是否跟随系统:" + MultiLanguages.isSystemLanguage());}
});
使用案例
@Override
public void onClick(View v) {// 是否需要重启boolean restart;switch (v.getId()) {// 跟随系统case R.id.btn_language_auto:restart = MultiLanguages.clearAppLanguage(this);break;// 简体中文case R.id.btn_language_cn:restart = MultiLanguages.setAppLanguage(this, LocaleContract.getSimplifiedChineseLocale());break;// 繁体中文case R.id.btn_language_tw:restart = MultiLanguages.setAppLanguage(this, LocaleContract.getTraditionalChineseLocale());break;// 英语case R.id.btn_language_en:restart = MultiLanguages.setAppLanguage(this, LocaleContract.getEnglishLocale());break;default:restart = false;break;}if (restart) {// 我们可以充分运用 Activity 跳转动画,在跳转的时候设置一个渐变的效果startActivity(new Intent(this, LanguageActivity.class));overridePendingTransition(R.anim.activity_alpha_in, R.anim.activity_alpha_out);finish();}
}
框架混淆规则
  • 在混淆规则文件 proguard-rules.pro 中加入
-keep class com.hjq.language.** {*;}

常见疑问请点击此处查看

其他资源:语言代码列表大全
作者的其他开源项目
  • 安卓技术中台:AndroidProject 

  • 安卓技术中台 Kt 版:AndroidProject-Kotlin 

  • 权限框架:XXPermissions 

  • 吐司框架:Toaster 

  • 网络框架:EasyHttp 

  • 标题栏框架:TitleBar 

  • 悬浮窗框架:EasyWindow 

  • Shape 框架:ShapeView 

  • Gson 解析容错:GsonFactory 

  • 日志查看框架:Logcat 

  • Android 版本适配:AndroidVersionAdapter 

  • Android 代码规范:AndroidCodeStandard 

  • Android 资源大汇总:AndroidIndex 

  • Android 开源排行榜:AndroidGithubBoss 

  • Studio 精品插件:StudioPlugins 

  • 表情包大集合:EmojiPackage 

  • AI 资源大汇总:AiIndex 

  • 省市区 Json 数据:ProvinceJson 

  • Markdown 语法文档:MarkdownDoc 

     

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务介绍

背景 微服务是什么?杜克大学教授DanAriely说过一段非常出名的话,用来表述Big Data的发展现状。我觉得把这句话放到微服务身上也极其贴切。 Micro-services is like teenage sex: Everyone talks about it, nobody really knows how to do it, everyo ne thinks ev…

excel(vab)删除空行

删除第一、二、三列位空的所有行(8000)行范围以内 代码如下: Sub Macro1()Dim hang As Integer For hang 8000 To 1 Step -1If Sheet1.Cells(hang, 1) "" And Sheet1.Cells(hang, 2) "" And Sheet1.Cells(hang, 3) "&quo…

系统性学习vue-vue中的ajax

vue中的ajax 配置代理常用发送Ajax请求方式跨域方式一方式二 vue-resource插槽默认插槽具名插槽作用域插槽 配置代理 常用发送Ajax请求方式 xhr new XMLHttpRequest() 在真正开发中不常用,比较麻烦jQuery 封装了xhraxios 封装了xhr 与jQuery相比优势是&#xff1a…

怎样才能找到合适的产品说明书模板 方法献上

制作一份专业而吸引人的产品手册对于企业来说至关重要。然而,对于许多企业和个人而言,制作产品手册可能是一个挑战,因为需要一定的设计和排版能力。为了帮助大家更轻松地制作出优质的产品手册,下面将向大家推荐三款优秀的产品手册…

大物小练-判断题题解

一、判断题 1.检验电荷受到的电场力F方向就是电场强度E的方向。( B) A对 B错 解释:场强E的切线方向才和受力F的方向相同 2.电容器电容的大小与导体的形状、相对位置、其间的电介质有关,与其所带的电荷量无关。A A对 B错 解释…

Ovtio不同版本下载

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩! 主要专栏内容包括: †《LAMMPS小技巧》: ‾ \textbf…

2024年汉字小达人区级选拔备考——附加题:汉字和国学常识

上海的孩子们已经率先开启了悠长的寒假生活。在寒假期间,除了完成寒假生活、学校安排和要求外,还可以做些什么呢?不妨来为2024年汉字小达人做些准备吧!每天花个15分钟左右,背一背、做一做,轻松掌握汉字小达…

翻译: Streamlit从入门到精通 构建一个机器学习应用程序 三

Streamlit从入门到精通 系列: 翻译: Streamlit从入门到精通 基础控件 一翻译: Streamlit从入门到精通 显示图表Graphs 地图Map 主题Themes 二 1. 构建一个机器学习应用程序 在这一部分,我将带你了解我做的一个关于贷款预测的项目。 贷款的主要利润直…

“15个必备的自动化测试工具,助你构建2024年的自动化策略!“

以下为作者观点: 如何选择正确的自动化测试工具?自动化测试工具是旨在通过自动化测试脚本验证功能或非功能软件需求的应用程序,帮助加快发布速度、提高项目质量并强化成果。 自动化测试工具可以帮助开发测试人员轻松创建、运行和维护测试&a…

opencv_模型训练

文件夹 opencv训练文件 xml negdataposdata 说明 negdata目录: 放负样本的目录 posdata目录: 放正样本的目录 xml目录: 新建的一个目录,为之后存放分类器文件使用 neg.txt: 负样本路径列表 pos.txt: 正样本路径列表 pos.vec: 后续自动生成…

PlatformIO中ESP8266使用GxEPD库和U8G2库驱动 2.9寸黑白墨水屏显示中文

Content 0. 前言1. 安装platformIO环境2. 新建工程3. 添加外部库4. 修改U8g2_for_Adafruit_GFX库5. 代码和烧录 0. 前言 墨水屏是黄鱼淘的,效果还不错。 U8G2库一直编译不进去,显示汉字始终不太美观,个人一直不太喜欢汉字取模的方法&#x…

linux根据服务名称查服务文件夹路径

ps -ef |grep java| grep -v grep | awk { print $2 } -e 显示所有进程。 -f 全格式。 grep -v grep是在Linux系统的某些时刻下查看进程的命令,它的作用是排除grep进程本身。 启动: #!/usr/bin/bash PID$(ps -ef | grep serverName | grep -v gr…

【RabbitMQ】RabbitMQ高级:死信队列和延迟队列

目录 设置TTL(过期时间)概述RabbitMQ使用TTL原生API案例springboot案例 死信队列概述原生API案例springboot案例 延迟队列概述插件实现延迟队列安装插件代码 TTL实现延迟队列实现延迟队列优化 设置TTL(过期时间) 概述 在电商平台…

Komodor:Kubernetes 监控工具全面指南

为了方便起见,Komodor 提供了一个简单的 Web 界面,以帮助您监控 Kubernetes 集群的状态。它拥有付费和免费增值计划,除了在出现问题时通知用户外,还拥有一系列方便的工具,用于跟踪和管理集群中部署的资源的状态。让我们…

计算机网络 应用层

文章目录 应用层域名系统 DNS域名系统概述互联网的域名结构域名服务器 文件传送协议FTP 概述FTP 的基本工作原理简单文件传送协议 TFTP 远程终端协议 TELNET万维网 WWW统一资源定位符 URL超文本传送协议 HTTP万维网的信息检索系统 电子邮件电子邮件概述简单邮件传送协议 SMTP邮…

2024年机器人和人工智能将通过4种方式改变行业

文 | BFT机器人 前言: 2023年是人工智能界充满创造性和突破性的一年,包括生成式人工智能在内的人工智能 (AI) 技术的出现引起了全球的关注并占据了头条新闻。然而,生成式人工智能在企业中的应用仍处于早期阶段,如何最好地利用这项…

大物②练习题解

1.【单选题】关于磁场中磁通量,下面说法正确的是( D) A、穿过闭合曲面的总磁通量不一定为零 B、磁感线从闭合曲面内穿出,磁通量为负 C、磁感线从闭合曲面内穿入,磁通量为正D、穿过闭合曲面的总磁通量一定为零 磁感线从…

“轻松粘贴,高效办公:自动粘贴文本技术让您事半功倍

"在快节奏的现代工作中,时间就是金钱。使用自动粘贴文本技术,让您告别繁琐的手动操作,提高工作效率。一键粘贴,释放您的双手,让您专注于创作和思考。让工作更高效,生活更精彩!" 首先…

广告投放场景中ABtest分析的评价、优化和决策建议

目录 写在开头1. AB测试基础知识1.1 AB测试概述1.2 原理和流程1.3 广告领域中的AB测试应用 2. 评价广告投放中的AB测试2.1 关键指标选择与解释2.2 统计学方法应用 3. AB测试分析中的常见问题与解决方案3.1 样本偏差3.2 季节性影响3.3 测试时长选择3.4 结果误解与分析失误 4. 优…

《TrollStore巨魔商店》TrollStore2安装使用教程支持IOS14.0-16.6.1

TrollStore(巨魔商店) 简单的说就相当于一个永久的免费证书,它可以给你的iPhone和iPad安装任何你想要安装的App软件,而且不需要越狱,不用担心证书签名过期的问题,不需要个人签名和企业签名。 支持的版本: TrollStore安装和使用教…