语种切换框架
集成步骤
- 如果你的项目 Gradle 配置是在
7.0 以下
,需要在build.gradle
文件中加入
allprojects { repositories { // JitPack 远程仓库:https://jitpack.io maven { url 'https://jitpack.io' } } }
- 如果你的 Gradle 配置是
7.0 及以上
,则需要在settings.gradle
文件中加入
dependencyResolutionManagement { repositories { // JitPack 远程仓库:https://jitpack.io maven { url 'https://jitpack.io' } } }
- 配置完远程仓库后,在项目 app 模块下的
build.gradle
文件中加入远程依赖
dependencies { // 语种切换框架:https://github.com/getActivity/MultiLanguages implementation 'com.github.getActivity:MultiLanguages:9.3' }
初始化框架
- 在 Application 中初始化框架
public final class XxxApplication extends Application { @Override public 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() { @Override public void onAppLocaleChange(Locale oldLocale, Locale newLocale) { Log.d("MultiLanguages", "监听到应用切换了语种,旧语种:" + oldLocale + ",新语种:" + newLocale); } @Override public 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