You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用代码切换语言失效问题排查求助

Android应用内切换语言不生效的常见原因
  • 已加载页面未刷新
    修改资源配置的操作只会影响后续新加载的资源,已经创建完成的Activity不会自动刷新布局和文案。需要在修改配置后调用recreate()重启当前Activity,或者调用startActivity(Intent.makeRestartActivityTask(getComponentName()))清空原有Activity栈并重启应用首页,改动才会生效。
  • Context使用或生命周期适配错误
    不要仅使用Application Context修改配置,部分系统版本中Application的资源配置不会同步到Activity Context。其次需要在基类Activity的attachBaseContext生命周期中提前注入你设置的Locale,不能仅在切换语言时单次修改,否则页面重建或者应用重启后配置会被系统重置,示例适配代码如下:
    @Override
    protected void attachBaseContext(Context newBase) {
        // 读取持久化存储的目标语言code
        String targetLang = SpUtil.getString("selected_lang", "en");
        Locale targetLocale = new Locale(targetLang.toLowerCase());
        Configuration config = newBase.getResources().getConfiguration();
        config.setLocale(targetLocale);
        // API 24+ 建议同时设置LocaleList
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            config.setLocales(new LocaleList(targetLocale));
        }
        Context customContext = newBase.createConfigurationContext(config);
        super.attachBaseContext(customContext);
    }
    
  • 高版本系统适配缺失
    你使用的updateConfiguration方法在Android 7.0(API 25)之后已经被官方废弃,仅在低版本系统有效。如果你的应用适配Android 12(API 31)及以上版本,系统新增了应用独立语言偏好功能,建议改用官方推荐的AppCompatDelegate.setApplicationLocales()方法完成切换,不需要手动修改资源配置。
  • 资源配置不匹配
    首先确认目标语言对应的资源目录和strings.xml已正确创建,比如简体中文对应values-zh-rCN、英文对应values-en,且对应文案的key和默认values下的key完全一致,不存在缺失。其次注意语言代码不要写错,部分设备对仅传入zh的适配识别存在问题,建议传入完整的语言+地区编码。
  • 系统限制导致修改被覆盖
    部分国产定制ROM会强制应用跟随系统语言,禁止应用独立修改语言配置;如果你的应用处于分屏、多窗口模式下,部分系统也会强制同步系统配置,覆盖你的Locale修改。

内容的提问来源于stack exchange,提问作者lewis machilika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:15:01