Android

多语言切换

更新时间: 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";
      }
    };

实现语言切换流程

  1. 在 Application 的 OnCreate 回调中设置语言:

    javaString localeStr = AppLanguageConfig.getInstance().getAppLanguage(this);
    IMKitClient.init(this, options, new Locale(localeStr));
    
  2. 切换语言时进行持久化设置,并发出通知。

    javaAppLanguageConfig.getInstance()
        .setAppLanguage(IMKitClient.getApplicationContext(), currentLanguage);
    EventCenter.notifyEvent(new MultiLanguageUtils.LangEvent());
    
  3. 在其他页面接收通知并 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 等。

此文档是否对你有帮助?
有帮助
去反馈
  • 语言切换原理
  • 获取语言配置
  • 语言自主切换
  • 语言切换广播
  • 实现语言切换流程
  • 多语言扩展