语种切换框架
-
项目地址: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