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

Android语言切换异常:从印地语无法切回英文

问题排查与修复方案

1. 修正Locale语言代码

你的代码中切换英文时使用的"eng"是非标准Locale代码,英文的标准Locale代码为"en",多数设备无法识别"eng",导致切换失败。将所有"eng"替换为"en",同时优化Activity重启逻辑:

SharedPreferences sharedPreferences = getSharedPreferences("Language", MODE_PRIVATE);
SharedPreferences.Editor editor1 = sharedPreferences.edit();

language.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String currentLang = sharedPreferences.getString("lang", "en");
        if (currentLang.equals("en")){
            Toast.makeText(Settings.this, "Changing Language to Hindi", Toast.LENGTH_SHORT).show();
            context = LocaleHelper.setLocale(Settings.this, "hi");
            editor1.putString("lang", "hi");
        } else {
            Toast.makeText(Settings.this, "Changing Language to English", Toast.LENGTH_SHORT).show();
            context = LocaleHelper.setLocale(Settings.this, "en");
            editor1.putString("lang", "en");
        }
        editor1.apply();
        // 添加标记确保旧Activity实例被清除,新实例用更新后的Locale启动
        startActivity(new Intent(Settings.this, Settings.class)
                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
        finish();
    }
});

2. 确保LocaleHelper正确处理Locale切换

检查LocaleHelper.setLocale方法,确保它能正确解析标准Locale代码并更新配置。以下是标准实现示例:

public class LocaleHelper {
    public static Context setLocale(Context context, String language) {
        Locale locale = new Locale(language);
        Locale.setDefault(locale);

        Configuration config = context.getResources().getConfiguration();
        config.setLocale(locale);
        config.setLayoutDirection(locale);

        return context.createConfigurationContext(config);
    }
}

3. 在Activity启动时恢复语言设置

每次SettingsActivity启动时,先应用保存的语言配置,再执行初始化:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // 先恢复语言设置
    SharedPreferences sharedPreferences = getSharedPreferences("Language", MODE_PRIVATE);
    String lang = sharedPreferences.getString("lang", "en");
    LocaleHelper.setLocale(this, lang);
    
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    
    // 后续视图初始化、事件绑定代码
}

4. 额外检查项

  • 确认项目中存在对应语言的资源文件:英文用values/strings.xml,印地语用values-hi/strings.xml。
  • 测试时彻底关闭应用再重启,避免旧Context缓存影响结果。

内容的提问来源于stack exchange,提问作者Dhananjay Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:50:14