多语言切换
更新时间: 2025/09/11 14:15:56
自 V10.5.0 起,UIKit 支持多语言切换。
语言切换原理
获取语言配置
应用语言在未设置之前默认使用系统语言。设置后,通过 SharedPreferences,应用程序可以方便地读取和写入数据,实现数据的本地持久化存储。
如果需要获取用户的地区信息(Locale),会优先从本地持久化数据中获取。若本地没有持久化数据,则会获取系统的默认地区信息。
java//获取语言类型
public String getAppLanguage(Context context) {
if (TextUtils.isEmpty(currentLang)) {
currentLang = SPUtils.INSTANCE.getString("app_lang_key", "", context);
if (TextUtils.isEmpty(currentLang)) {
currentLang = getSystemLanguage().getLanguage();
}
}
return currentLang;
}
//设置语言类型
public void setAppLanguage(Context context, String lang) {
currentLang = lang;
SPUtils.INSTANCE.saveString("app_lang_key", lang, context);
}
语言自主切换
Android 端通过设置 Activity 和 Application 的 context 来实现语言的自主切换。
在应用启动时,设置 Application 的 Locale 来实现全局字符的语言设置。
java//设置语言
String localeStr = AppLanguageConfig.getInstance().getAppLanguage(this);
IMKitClient.init(this, options, new Locale(localeStr));
在 BaseLocalActivity 中的 onCreate 回调中设置语言。
javaoverride fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val language = AppLanguageConfig.getInstance().getAppLanguage(this)
changeLanguage(this, language)
}
语言切换广播
当应用内切换语言后,除了需要持久化到本地外,还需要通过 EventCenter 将此事件进行广播。
javaEventCenter.notifyEvent(new MultiLanguageUtils.LangEvent());
在此设置语言页面之前打开的 Activity 可以接受此通知,然后调用 restart 方法实现语言切换。
java//语言变更事件,切换语言后重新加载页面
EventNotify<MultiLanguageUtils.LangEvent> langeNotify =
new EventNotify<MultiLanguageUtils.LangEvent>() {
@Override
public void onNotify(@NonNull MultiLanguageUtils.LangEvent message) {
recreate();
}
@NonNull
@Override
public String getEventType() {
return "langEvent";
}
};
实现语言切换流程
-
在 Application 的 OnCreate 回调中设置语言:
java
String localeStr = AppLanguageConfig.getInstance().getAppLanguage(this); IMKitClient.init(this, options, new Locale(localeStr));
-
切换语言时进行持久化设置,并发出通知。
java
AppLanguageConfig.getInstance() .setAppLanguage(IMKitClient.getApplicationContext(), currentLanguage); EventCenter.notifyEvent(new MultiLanguageUtils.LangEvent());
-
在其他页面接收通知并 recreate,重新创建当前 Activity 实例。
java
//语言变更事件,切换语言后重新加载页面 EventNotify<MultiLanguageUtils.LangEvent> langeNotify = new EventNotify<MultiLanguageUtils.LangEvent>() { @Override public void onNotify(@NonNull MultiLanguageUtils.LangEvent message) { recreate(); } @NonNull @Override public String getEventType() { return "langEvent"; } };
多语言扩展
IM UIKit 还支持添加其他语言资源,如:values-es 等。
此文档是否对你有帮助?