SDK 内部已经做了多语言,内置支持中、英、阿拉伯,会跟随系统语言配置自动变更。
问题一:App 业务侧语言配置变更如何让 IMKit SDK 同步变更?
SDK 默认仅支持监听系统语言,但提供了接口可以让业务侧调用更新语言配置。您可以看一下 RongConfigurationManager
类相关的方法:
RongConfigurationManager.getInstance().switchLocale()
问题二:如何更新 IMKit SDK中的内置 UI?
需要处理 Activity、Application 两部分:
处理 Activity
- 会话列表和会话页面的 Activity 使用 SDK 内置的 Activity;
- 使用自己的 Activity 装载 SDK 的页面,继承 RongBaseActivity;
- 使用自己的 Activity 装载 SDK 的页面,但不继承 RongBaseActivity,需要加入如下代码
Context context = RongConfigurationManager.getInstance().getConfigurationContext(newBase);
代码参考
处理 Application
加入如下代码
Context context = LangUtils.getConfigurationContext(base);
代码参考
问题三:如何将整个 IM Kit 设置成固定的某一种语言?
假如设置 IM Kit 为英文环境,无论当前系统语言是否为英文,可以使用如下方案
注意:context 需要使用 Application 类型(或者使用 context.getApplicationContext()),否则可能会导致部分页面不生效。
// 参考RCLocale
LangUtils.RCLocale selectedLocale = LangUtils.RCLocale.LOCALE_US;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Resources resources = context.getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
Configuration config = resources.getConfiguration();
LocaleList localeList = new LocaleList(selectedLocale.toLocale());
LocaleList.setDefault(localeList);
config.setLocales(localeList);
resources.updateConfiguration(config, dm);
LangUtils.saveLocale(context, selectedLocale);
} else {
RongConfigurationManager.getInstance().switchLocale(selectedLocale, context);
}
LangUtils.RCLocale 支持的语言类型
class RCLocale {
/** 中文 */
public static final RCLocale LOCALE_CHINA = new RCLocale("zh");
/** 英文 */
public static final RCLocale LOCALE_US = new RCLocale("en");
/** 阿拉伯 */
public static final RCLocale LOCALE_ARAB = new RCLocale("ar");
}